def _lazily_create_namedtuple(data: Any, target_type: Type[NamedTuple],
depth: int, max_depth: int) -> Generator:
+ # pylint: disable=protected-access
""" Lazily create NamedTuple from a dict """
field_values = {}
for field, field_type in zip(target_type._fields,
except StopIteration:
return
else:
- # If the field is missing assign None
- field_values[field] = None
+ field_values[field] = target_type._field_defaults.get(field)
namedtuple_instance = target_type(**field_values) # type: ignore
yield namedtuple_instance
pass
+class ModelWithDefaultParam(NamedTuple):
+ a: str
+ b: str = 'iamdefault'
+
+
@pytest.fixture(name="person_func")
def fixture_person_func():
@convert_to_model(Boy)
result = get_adult()
assert result == {'name': 'Charlie', 'age': 40, "children": [], 'hobby': None}
+ def test_fields_default_value(self, disable_message_to_dict):
+ # pylint: disable=unused-argument
+ @convert_to_model(ModelWithDefaultParam)
+ def get() -> dict:
+ return {"a": "bla"}
+
+ result = get()
+ assert result == {'a': 'bla', 'b': "iamdefault"}
+
+ # pylint: disable=unused-argument
+ @convert_to_model(ModelWithDefaultParam)
+ def get2() -> dict:
+ return {"a": "bla", "b": 'notdefault'}
+
+ result = get2()
+ assert result == {'a': 'bla', 'b': "notdefault"}
+
def test_nested_fields(self, disable_message_to_dict):
# pylint: disable=unused-argument
@convert_to_model(Adult)