Dataclass Dict Convert
This library converts between python dataclasses and dicts (and json).
It was created because when using the dataclasses-json library for my use case, I ran into limitations and performance issues. (There's also typed-json-dataclass but I haven't evaluated that library.)
Since creating this library, I've discovered Pydentic, which is a much more professional library, that in 99% of cases will be much more suitable than this library.
So I strongly recommend using Pydentic. If you use dataclass-dict-convert, beware that it is poorly maintained, not very well documented, may contain some bugs, and has some strange edge cases where it doesn't work.
dataclass-dict-convert supports lists, optionals, dicts, enums, nested dataclasses, etc.
It handles dates using RFC3339 (and enforces timezones and timezone aware datetime).
Example:
from dataclasses import dataclass
from stringcase import camelcase
from typing import Optional, List
from dataclass_dict_convert import dataclass_dict_convert
@dataclass_dict_convert(dict_letter_case=camelcase)
@dataclass(frozen=True)
class TestB:
an_int: int
a_str: str
a_float: float
a_bool: bool
@dataclass_dict_convert(dict_letter_case=camelcase)
@dataclass(frozen=True)
class Test:
nestedClass: TestB
nestedInOpt: Optional[TestB]
nestedInList: List[TestB]
the_instanceB1 = TestB(1, 'foo', 0.1, True)
the_instanceB2 = TestB(2, 'bar', 0.2, False)
the_instanceB3 = TestB(3, 'baz', 0.3, True)
the_instanceB4 = TestB(4, 'huh', 0.4, False)
the_instance = Test(the_instanceB1, the_instanceB2, [the_instanceB3, the_instanceB4])
the_dict = {
'nestedClass': {'anInt': 1, 'aStr': 'foo', 'aFloat': 0.1, 'aBool': True, },
'nestedInOpt': {'anInt': 2, 'aStr': 'bar', 'aFloat': 0.2, 'aBool': False, },
'nestedInList': [
{'anInt': 3, 'aStr': 'baz', 'aFloat': 0.3, 'aBool': True, },
{'anInt': 4, 'aStr': 'huh', 'aFloat': 0.4, 'aBool': False, },
],
}
expected = the_dict
actual = the_instance.to_dict()
assert actual == expected
expected = the_instance
actual = Test.from_dict(the_dict)
assert actual == expected
The library also includes:
- RFC3339 tools (the default format for converting datetime to string),
- dataclass type checking tools
- dataclass copy method generator
- dataclass multiline repr (replace auto generated repr for dataclasses by a multiline version)
Links:
Release files for dataclass-dict-convert 1.7.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dataclass-dict-convert-1.7.1.tar.gz | 15.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dataclass_dict_convert-1.7.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 30.5 kB
Release files / dataclass-dict-convert-1.7.1.tar.gz
| Download URL | dataclass-dict-convert-1.7.1.tar.gz |
|---|---|
| Size | 15.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7b9a3846e5fe39565437d23fdb1c3c147476c75295188980bff53b6d1e9e6d47
|
|
BLAKE2b-256 checksum How to use checksums |
5df05e9c066557c40813be27106aaa51cc72050cc61dde168b9b4a4525eb82cd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.6
|
Release files / dataclass_dict_convert-1.7.1-py3-none-any.whl
| Download URL | dataclass_dict_convert-1.7.1-py3-none-any.whl |
|---|---|
| Size | 15.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d4c59884722e4bb6031c7c2c3d85bb4f656d46c90929a68ed44c700f2f6eb435
|
|
BLAKE2b-256 checksum How to use checksums |
8e837a741919cf7e99d53a9c8b1146c823a6ce0b884e01acd7603e10382ea9b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.6
|