serde.toml
Serialize and Deserialize in TOML format. This module depends on tomli (for python<=3.10) and tomli-w packages.
1""" 2Serialize and Deserialize in TOML format. This module depends on 3[tomli](https://github.com/hukkin/tomli) (for python<=3.10) and 4[tomli-w](https://github.com/hukkin/tomli-w) packages. 5""" 6 7import sys 8from typing import overload, Optional, Any 9 10import tomli_w 11 12from .compat import T 13from .de import Deserializer, from_dict 14from .se import Serializer, to_dict 15 16__all__ = ["from_toml", "to_toml"] 17 18 19if sys.version_info[:2] >= (3, 11): 20 import tomllib 21else: 22 import tomli as tomllib 23 24 25class TomlSerializer(Serializer[str]): 26 @classmethod 27 def serialize(cls, obj: Any, **opts: Any) -> str: 28 return tomli_w.dumps(obj, **opts) 29 30 31class TomlDeserializer(Deserializer[str]): 32 @classmethod 33 def deserialize(cls, data: str, **opts: Any) -> Any: 34 return tomllib.loads(data, **opts) 35 36 37def to_toml( 38 obj: Any, 39 cls: Optional[Any] = None, 40 se: type[Serializer[str]] = TomlSerializer, 41 reuse_instances: bool = False, 42 convert_sets: bool = True, 43 skip_none: bool = True, 44 **opts: Any, 45) -> str: 46 """ 47 Serialize the object into TOML. 48 49 You can pass any serializable `obj`. If you supply keyword arguments other than `se`, 50 they will be passed in `toml_w.dumps` function. 51 52 * `skip_none`: When set to True, any field in the class with a None value is excluded from the 53 serialized output. Defaults to True. 54 55 If you want to use the other toml package, you can subclass `TomlSerializer` and implement 56 your own logic. 57 """ 58 return se.serialize( 59 to_dict( 60 obj, 61 c=cls, 62 reuse_instances=reuse_instances, 63 convert_sets=convert_sets, 64 skip_none=skip_none, 65 ), 66 **opts, 67 ) 68 69 70@overload 71def from_toml( 72 c: type[T], s: str, de: type[Deserializer[str]] = TomlDeserializer, **opts: Any 73) -> T: ... 74 75 76# For Union, Optional etc. 77@overload 78def from_toml( 79 c: Any, s: str, de: type[Deserializer[str]] = TomlDeserializer, **opts: Any 80) -> Any: ... 81 82 83def from_toml(c: Any, s: str, de: type[Deserializer[str]] = TomlDeserializer, **opts: Any) -> Any: 84 """ 85 Deserialize from TOML into the object. 86 87 `c` is a class object and `s` is TOML string. If you supply keyword arguments other than `de`, 88 they will be passed in `toml.loads` function. 89 90 If you want to use the other toml package, you can subclass `TomlDeserializer` and implement 91 your own logic. 92 """ 93 return from_dict(c, de.deserialize(s, **opts), reuse_instances=False)
def
from_toml( c: Any, s: str, de: type[serde.de.Deserializer[str]] = <class 'serde.toml.TomlDeserializer'>, **opts: Any) -> Any:
84def from_toml(c: Any, s: str, de: type[Deserializer[str]] = TomlDeserializer, **opts: Any) -> Any: 85 """ 86 Deserialize from TOML into the object. 87 88 `c` is a class object and `s` is TOML string. If you supply keyword arguments other than `de`, 89 they will be passed in `toml.loads` function. 90 91 If you want to use the other toml package, you can subclass `TomlDeserializer` and implement 92 your own logic. 93 """ 94 return from_dict(c, de.deserialize(s, **opts), reuse_instances=False)
Deserialize from TOML into the object.
c is a class object and s is TOML string. If you supply keyword arguments other than de,
they will be passed in toml.loads function.
If you want to use the other toml package, you can subclass TomlDeserializer and implement
your own logic.
def
to_toml( obj: Any, cls: Optional[Any] = None, se: type[serde.se.Serializer[str]] = <class 'serde.toml.TomlSerializer'>, reuse_instances: bool = False, convert_sets: bool = True, skip_none: bool = True, **opts: Any) -> str:
38def to_toml( 39 obj: Any, 40 cls: Optional[Any] = None, 41 se: type[Serializer[str]] = TomlSerializer, 42 reuse_instances: bool = False, 43 convert_sets: bool = True, 44 skip_none: bool = True, 45 **opts: Any, 46) -> str: 47 """ 48 Serialize the object into TOML. 49 50 You can pass any serializable `obj`. If you supply keyword arguments other than `se`, 51 they will be passed in `toml_w.dumps` function. 52 53 * `skip_none`: When set to True, any field in the class with a None value is excluded from the 54 serialized output. Defaults to True. 55 56 If you want to use the other toml package, you can subclass `TomlSerializer` and implement 57 your own logic. 58 """ 59 return se.serialize( 60 to_dict( 61 obj, 62 c=cls, 63 reuse_instances=reuse_instances, 64 convert_sets=convert_sets, 65 skip_none=skip_none, 66 ), 67 **opts, 68 )
Serialize the object into TOML.
You can pass any serializable obj. If you supply keyword arguments other than se,
they will be passed in toml_w.dumps function.
skip_none: When set to True, any field in the class with a None value is excluded from the serialized output. Defaults to True.
If you want to use the other toml package, you can subclass TomlSerializer and implement
your own logic.