dataclass: DataClass.tranform(): handle Optional dict/Munch items
This commit is contained in:
parent
adcdf38c14
commit
7b7caf3f37
1 changed files with 6 additions and 4 deletions
10
dataclass.py
10
dataclass.py
|
@ -34,15 +34,17 @@ class DataClass(Munch):
|
||||||
type_hints = cls._type_hints
|
type_hints = cls._type_hints
|
||||||
if key in type_hints:
|
if key in type_hints:
|
||||||
_classes = tuple[type](resolve_type_hint(type_hints[key]))
|
_classes = tuple[type](resolve_type_hint(type_hints[key]))
|
||||||
|
optional = type(None) in _classes
|
||||||
if issubclass(_classes[0], dict):
|
if issubclass(_classes[0], dict):
|
||||||
assert isinstance(value, dict)
|
assert isinstance(value, dict) or optional
|
||||||
target_class = _classes[0]
|
target_class = _classes[0]
|
||||||
if target_class is dict:
|
if target_class is dict:
|
||||||
target_class = Munch
|
target_class = Munch
|
||||||
if not isinstance(value, target_class):
|
if not isinstance(value, target_class):
|
||||||
assert issubclass(target_class, Munch)
|
if not (optional and value is None):
|
||||||
# despite the above assert, mypy doesn't seem to understand target_class is a Munch here
|
assert issubclass(target_class, Munch)
|
||||||
value = target_class.fromDict(value, validate=validate) # type:ignore[attr-defined]
|
# despite the above assert, mypy doesn't seem to understand target_class is a Munch here
|
||||||
|
value = target_class.fromDict(value, validate=validate) # type:ignore[attr-defined]
|
||||||
# handle numerics
|
# handle numerics
|
||||||
elif set(_classes).intersection([int, float]) and isinstance(value, str) and str not in _classes:
|
elif set(_classes).intersection([int, float]) and isinstance(value, str) and str not in _classes:
|
||||||
parsed_number = None
|
parsed_number = None
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue