some random stuff. caelestia incoming
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
from collections.abc import Callable
|
||||
from datetime import date, datetime, time
|
||||
from typing import Any, Type, TypeVar, final
|
||||
|
||||
import tomli_w
|
||||
|
||||
from mashumaro.dialect import Dialect
|
||||
from mashumaro.helper import pass_through
|
||||
from mashumaro.mixins.dict import DataClassDictMixin
|
||||
|
||||
try:
|
||||
import tomllib
|
||||
except ModuleNotFoundError:
|
||||
import tomli as tomllib # type: ignore
|
||||
|
||||
T = TypeVar("T", bound="DataClassTOMLMixin")
|
||||
|
||||
|
||||
EncodedData = str
|
||||
Encoder = Callable[[Any], EncodedData]
|
||||
Decoder = Callable[[EncodedData], dict[Any, Any]]
|
||||
|
||||
|
||||
class TOMLDialect(Dialect):
|
||||
no_copy_collections = (list, dict)
|
||||
omit_none = True
|
||||
serialization_strategy = {
|
||||
datetime: pass_through,
|
||||
date: pass_through,
|
||||
time: pass_through,
|
||||
}
|
||||
|
||||
|
||||
class DataClassTOMLMixin(DataClassDictMixin):
|
||||
__slots__ = ()
|
||||
|
||||
__mashumaro_builder_params = {
|
||||
"packer": {
|
||||
"format_name": "toml",
|
||||
"dialect": TOMLDialect,
|
||||
"encoder": tomli_w.dumps,
|
||||
},
|
||||
"unpacker": {
|
||||
"format_name": "toml",
|
||||
"dialect": TOMLDialect,
|
||||
"decoder": tomllib.loads,
|
||||
},
|
||||
}
|
||||
|
||||
@final
|
||||
def to_toml(
|
||||
self: T,
|
||||
encoder: Encoder = tomli_w.dumps,
|
||||
**to_dict_kwargs: Any,
|
||||
) -> EncodedData: ...
|
||||
|
||||
@classmethod
|
||||
@final
|
||||
def from_toml(
|
||||
cls: Type[T],
|
||||
data: EncodedData,
|
||||
decoder: Decoder = tomllib.loads,
|
||||
**from_dict_kwargs: Any,
|
||||
) -> T: ...
|
||||
Reference in New Issue
Block a user