Interchangeable representation between toml and Python dataclass
Project description
Getting started with toml_dataclass
Toml and Python Dataclass serialization.
Features
- Preserve the in-memory representation of Python dataclasses
Examples
Creating a dataclass with support to toml serialization.
>>> from danoan.toml_dataclass import TomlDataClassIO
>>> from dataclasses import dataclass
>>> @dataclass
... class Plugin(TomlDataClassIO):
... name: str
... version: str
... description: str
>>> jpg_plugin = Plugin("image-jpg", "1.0", "Conversion functions to jpg type.")
>>> with open("jpg-plugin.toml", "w") as fw:
... jpg_plugin.write(fw)
Here it is what it looks like the written toml.
>>> with open("jpg-plugin.toml", "r") as fr:
... print(fr.read())
name = "image-jpg"
version = "1.0"
description = "Conversion functions to jpg type."
Preserve the in-memory representation of Python dataclasses after reading.
>>> from pprint import pprint
>>> @dataclass
... class Configuration(TomlDataClassIO):
... project_name: str
... plugin: Plugin
>>> config = Configuration("image-reader", jpg_plugin)
>>> with open("config.toml", "w") as fw:
... config.write(fw)
>>> with open("config.toml", "r") as fr:
... config_from_file = Configuration.read(fr)
>>> pprint(config_from_file)
Configuration(project_name='image-reader',
plugin=Plugin(name='image-jpg',
version='1.0',
description='Conversion functions to jpg type.'))
>>> pprint(f"Plugin name: {config_from_file.plugin.name}")
'Plugin name: image-jpg'
Notice how it differs from the ouptut of the toml
library.
>>> import toml
>>> pprint(toml.load("config.toml"))
{'plugin': {'description': 'Conversion functions to jpg type.',
'name': 'image-jpg',
'version': '1.0'},
'project_name': 'image-reader'}
Preserve in-memory representation with toml tables.
>>> from danoan.toml_dataclass import TomlTableDataClassIO
>>> from typing import List
>>> @dataclass
... class PluginTable(TomlTableDataClassIO):
... list_of_plugins: List[Plugin]
>>> png_plugin = Plugin("image-png", "1.0", "Conversion functions to png type.")
>>> plugin_table = PluginTable([jpg_plugin, png_plugin])
>>> with open("plugin-table.toml", "w") as fw:
... plugin_table.write(fw)
>>> with open("plugin-table.toml", "r") as fr:
... plugin_table_from_file = PluginTable.read(fr)
>>> pprint(plugin_table_from_file)
PluginTable(list_of_plugins=[Plugin(name='image-jpg',
version='1.0',
description='Conversion functions to jpg '
'type.'),
Plugin(name='image-png',
version='1.0',
description='Conversion functions to png '
'type.')])
Notice how it differs from the ouptut of the toml
library.
>>> pprint(toml.load("plugin-table.toml"))
{'list_of_plugins': [{'description': 'Conversion functions to jpg type.',
'name': 'image-jpg',
'version': '1.0'},
{'description': 'Conversion functions to png type.',
'name': 'image-png',
'version': '1.0'}]}
Here it is what looks like the written toml.
>>> with open("plugin-table.toml", "r") as f:
... print(f.read())
[[list_of_plugins]]
name = "image-jpg"
version = "1.0"
description = "Conversion functions to jpg type."
<BLANKLINE>
[[list_of_plugins]]
name = "image-png"
version = "1.0"
description = "Conversion functions to png type."
<BLANKLINE>
<BLANKLINE>
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
toml-dataclass-0.1.0.tar.gz
(5.6 kB
view details)
File details
Details for the file toml-dataclass-0.1.0.tar.gz
.
File metadata
- Download URL: toml-dataclass-0.1.0.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 64687a14e168c8b3100ed61589e0e1bd7d7f3bae0f7793053cd14e2876b0488a |
|
MD5 | 43b4fdc39bd906fd95759c7ac14420a1 |
|
BLAKE2b-256 | c0d977574c24d3aef0727a483c5dc3b5e66e8991f7c5e22b073ed4004658e0ba |