Convert a python dictionary into a dataclass
Project description
just-use-dataclass
Simple function to convert a python dict to a dataclass.
If you want to know how the library works, the best place to look at is in the tests
In short: it converts a dictionary to a dataclass by looking at the annotations in the dataclass and converting the data in the dictionary to it.
Installation
pip install just-use-dataclass
Usage and examples
Simple data type conversion
from dataclasses import dataclass
import typing
from just_use_dataclass import dict_to_dataclass
@dataclass
class Simple:
a: str
b: int
c: float
d: bool
e: typing.Optional[str]
f: typing.Optional[str]
data = {
"a": 1,
"b": "1",
"c": "2.0",
"d": True,
"e": None,
"f": 42,
}
simple = dict_to_dataclass(data, Simple)
print(simple)
# Output:
# Simple(a='1', b=1, c=2.0, d=True, e=None, f='42')
Nested dataclass conversion
from dataclasses import dataclass
from decimal import Decimal
from just_use_dataclass import dict_to_dataclass
@dataclass
class C:
value: str
@dataclass
class B:
value: int
c: C
@dataclass
class A:
value_1: Decimal
value_2: Decimal
b: B
data = {
"value_1": "23.23",
"value_2": 49.0001,
"b": {
"value": 1,
"c": {"value": "test"},
},
}
nested = dict_to_dataclass(data, A)
print(nested)
# Output:
# A(value_1=Decimal('23.23'), value_2=Decimal('49.0001'), b=B(value=1, c=C(value='test'))
Deeply nested typing conversion
from dataclasses import dataclass
import typing
from just_use_dataclass import dict_to_dataclass
@dataclass
class Crazy:
value: dict[str, dict[int, list[typing.Optional[str]]]]
data = {"value": {"test": {1: ["hey", None, 42]}}}
crazy = dict_to_dataclass(data, Crazy)
print(crazy)
# Output:
# Crazy(value={'test': {1: ['hey', None, '42']}})
Development
-
Fork and clone the repo
-
Install poetry or just pytest, mypy and black
poetry install
# or
pip install -U pytest mypy black
- Run tests
poetry run pytest .
- Linting / Formatting
poetry run mypy .
poetry run black .
Use in production
The library is really new. if you want to contribute feel welcome. Otherwise don't use it in production (yet) :)
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
Built Distribution
Close
Hashes for just_use_dataclass-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e95b8527b63d3858a8710861975ac75a7e5181bb7d40ef5fa2dfc01b40b3a6a6 |
|
MD5 | 21c3e512586f98ad8bcf9bedc787e5a5 |
|
BLAKE2b-256 | 411e36115ca08fad16cd5d33b523b0862554f54bb00b92955742665d988d2d28 |