From a61c488ee709b979af695a9ed7321f0564d4cb6d Mon Sep 17 00:00:00 2001 From: Andrey Berenda Date: Wed, 24 Jul 2019 19:14:07 +0700 Subject: [PATCH] Handle default factory in convert_dataclass (#128) --- tests/converters/test_converter.py | 10 +++++----- winter/__version__.py | 2 +- winter/converters/converter.py | 2 ++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/converters/test_converter.py b/tests/converters/test_converter.py index 7f35a3db..3ed2af60 100644 --- a/tests/converters/test_converter.py +++ b/tests/converters/test_converter.py @@ -54,8 +54,8 @@ class User: id: Id status: Status birthday: datetime.date - emails: typing.List[str] contact: Contact + emails: typing.List[str] = dataclasses.field(default_factory=list) created_at: typing.Optional[datetime.datetime] = None name: str = 'test name' @@ -83,8 +83,8 @@ class Profile: Id(1), Status.SUPER, datetime.date(year=2017, day=21, month=12), - ['test@test.ru'], Contact({123, 456}), + ['test@test.ru'], datetime.datetime(year=2001, month=2, day=3, hour=4, minute=5, second=6, tzinfo=tzutc()), 'name', ), @@ -94,7 +94,6 @@ class Profile: 'id': 1, 'status': 'super', 'birthday': '2017-12-21', - 'emails': ['test@test.ru'], 'contact': { 'phones': ['123', '456'], }, @@ -103,8 +102,9 @@ class Profile: Id(1), Status.SUPER, datetime.date(year=2017, day=21, month=12), - ['test@test.ru'], Contact({123, 456}), + [], + name='test name', ), ), ), @@ -303,7 +303,7 @@ def test_convert_dataclass(data, type_, expected_instance): }, User, { - 'non_field_error': 'Missing fields: "id", "status", "birthday", "emails"', + 'non_field_error': 'Missing fields: "id", "status", "birthday"', 'contact': { 'phones': 'Cannot convert "123" to set', }, diff --git a/winter/__version__.py b/winter/__version__.py index e4f2ad49..c162747f 100644 --- a/winter/__version__.py +++ b/winter/__version__.py @@ -1 +1 @@ -__version__ = '1.14.0' +__version__ = '1.14.1' diff --git a/winter/converters/converter.py b/winter/converters/converter.py index 11bd2253..73d03738 100644 --- a/winter/converters/converter.py +++ b/winter/converters/converter.py @@ -111,6 +111,8 @@ def _convert_dataclass_field(value, field: dataclasses.Field): return convert(value, field.type) if field.default is not dataclasses.MISSING: return field.default + if field.default_factory is not dataclasses.MISSING: + return field.default_factory() elif is_optional(field.type): return None else: