From 9203aff4b02f30c96f6398490a219efeb6fa56c4 Mon Sep 17 00:00:00 2001 From: Simon Guigui Date: Tue, 15 Dec 2020 11:41:04 +0100 Subject: [PATCH 1/2] Add a nullable date property --- end_to_end_tests/openapi.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/end_to_end_tests/openapi.json b/end_to_end_tests/openapi.json index 1cbfd9597..05009e355 100644 --- a/end_to_end_tests/openapi.json +++ b/end_to_end_tests/openapi.json @@ -622,7 +622,7 @@ "schemas": { "AModel": { "title": "AModel", - "required": ["an_enum_value", "aCamelDateTime", "a_date", "required_nullable", "required_not_nullable"], + "required": ["an_enum_value", "aCamelDateTime", "a_date", "a_nullable_date", "required_nullable", "required_not_nullable"], "type": "object", "properties": { "an_enum_value": { @@ -657,6 +657,12 @@ "type": "string", "format": "date" }, + "a_nullable_date": { + "title": "A Nullable Date", + "type": "string", + "format": "date", + "nullable": true + }, "1_leading_digit": { "title": "Leading Digit", "type": "string" From 48a2ac636e6e7fc983f78f9bad8c02b13c31db51 Mon Sep 17 00:00:00 2001 From: Simon Guigui Date: Tue, 15 Dec 2020 12:01:24 +0100 Subject: [PATCH 2/2] Bug fix for nullable date/datetime properties --- .../golden-record-custom/custom_e2e/models/a_model.py | 8 ++++++++ .../golden-record/my_test_api_client/models/a_model.py | 8 ++++++++ .../templates/property_templates/date_property.pyi | 5 +++++ .../templates/property_templates/datetime_property.pyi | 5 +++++ 4 files changed, 26 insertions(+) diff --git a/end_to_end_tests/golden-record-custom/custom_e2e/models/a_model.py b/end_to_end_tests/golden-record-custom/custom_e2e/models/a_model.py index fc857027a..74a31a394 100644 --- a/end_to_end_tests/golden-record-custom/custom_e2e/models/a_model.py +++ b/end_to_end_tests/golden-record-custom/custom_e2e/models/a_model.py @@ -17,6 +17,7 @@ class AModel: a_camel_date_time: Union[datetime.datetime, datetime.date] a_date: datetime.date required_not_nullable: str + a_nullable_date: Optional[datetime.date] required_nullable: Optional[str] nested_list_of_enums: Union[Unset, List[List[DifferentEnum]]] = UNSET attr_1_leading_digit: Union[Unset, str] = UNSET @@ -47,6 +48,8 @@ def to_dict(self) -> Dict[str, Any]: nested_list_of_enums.append(nested_list_of_enums_item) + a_nullable_date = self.a_nullable_date.isoformat() if self.a_nullable_date else None + attr_1_leading_digit = self.attr_1_leading_digit required_nullable = self.required_nullable not_required_nullable = self.not_required_nullable @@ -59,6 +62,7 @@ def to_dict(self) -> Dict[str, Any]: "aCamelDateTime": a_camel_date_time, "a_date": a_date, "required_not_nullable": required_not_nullable, + "a_nullable_date": a_nullable_date, "required_nullable": required_nullable, } ) @@ -109,6 +113,9 @@ def _parse_a_camel_date_time(data: Any) -> Union[datetime.datetime, datetime.dat nested_list_of_enums.append(nested_list_of_enums_item) + a_nullable_date = d.pop("a_nullable_date") + a_nullable_date = isoparse(a_nullable_date).date() if a_nullable_date else None + attr_1_leading_digit = d.pop("1_leading_digit", UNSET) required_nullable = d.pop("required_nullable") @@ -123,6 +130,7 @@ def _parse_a_camel_date_time(data: Any) -> Union[datetime.datetime, datetime.dat a_date=a_date, required_not_nullable=required_not_nullable, nested_list_of_enums=nested_list_of_enums, + a_nullable_date=a_nullable_date, attr_1_leading_digit=attr_1_leading_digit, required_nullable=required_nullable, not_required_nullable=not_required_nullable, diff --git a/end_to_end_tests/golden-record/my_test_api_client/models/a_model.py b/end_to_end_tests/golden-record/my_test_api_client/models/a_model.py index fc857027a..74a31a394 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/models/a_model.py +++ b/end_to_end_tests/golden-record/my_test_api_client/models/a_model.py @@ -17,6 +17,7 @@ class AModel: a_camel_date_time: Union[datetime.datetime, datetime.date] a_date: datetime.date required_not_nullable: str + a_nullable_date: Optional[datetime.date] required_nullable: Optional[str] nested_list_of_enums: Union[Unset, List[List[DifferentEnum]]] = UNSET attr_1_leading_digit: Union[Unset, str] = UNSET @@ -47,6 +48,8 @@ def to_dict(self) -> Dict[str, Any]: nested_list_of_enums.append(nested_list_of_enums_item) + a_nullable_date = self.a_nullable_date.isoformat() if self.a_nullable_date else None + attr_1_leading_digit = self.attr_1_leading_digit required_nullable = self.required_nullable not_required_nullable = self.not_required_nullable @@ -59,6 +62,7 @@ def to_dict(self) -> Dict[str, Any]: "aCamelDateTime": a_camel_date_time, "a_date": a_date, "required_not_nullable": required_not_nullable, + "a_nullable_date": a_nullable_date, "required_nullable": required_nullable, } ) @@ -109,6 +113,9 @@ def _parse_a_camel_date_time(data: Any) -> Union[datetime.datetime, datetime.dat nested_list_of_enums.append(nested_list_of_enums_item) + a_nullable_date = d.pop("a_nullable_date") + a_nullable_date = isoparse(a_nullable_date).date() if a_nullable_date else None + attr_1_leading_digit = d.pop("1_leading_digit", UNSET) required_nullable = d.pop("required_nullable") @@ -123,6 +130,7 @@ def _parse_a_camel_date_time(data: Any) -> Union[datetime.datetime, datetime.dat a_date=a_date, required_not_nullable=required_not_nullable, nested_list_of_enums=nested_list_of_enums, + a_nullable_date=a_nullable_date, attr_1_leading_digit=attr_1_leading_digit, required_nullable=required_nullable, not_required_nullable=not_required_nullable, diff --git a/openapi_python_client/templates/property_templates/date_property.pyi b/openapi_python_client/templates/property_templates/date_property.pyi index 22624c7e5..9bec811fa 100644 --- a/openapi_python_client/templates/property_templates/date_property.pyi +++ b/openapi_python_client/templates/property_templates/date_property.pyi @@ -1,6 +1,11 @@ {% macro construct(property, source, initial_value="None") %} {% if property.required %} +{% if property.nullable %} +{{ property.python_name }} = {{ source }} +{{ property.python_name }} = isoparse({{ property.python_name }}).date() if {{ property.python_name }} else None +{% else %} {{ property.python_name }} = isoparse({{ source }}).date() +{% endif %} {% else %} {{ property.python_name }} = {{ initial_value }} _{{ property.python_name }} = {{ source }} diff --git a/openapi_python_client/templates/property_templates/datetime_property.pyi b/openapi_python_client/templates/property_templates/datetime_property.pyi index 353978fa0..b8e1b8ff0 100644 --- a/openapi_python_client/templates/property_templates/datetime_property.pyi +++ b/openapi_python_client/templates/property_templates/datetime_property.pyi @@ -1,6 +1,11 @@ {% macro construct(property, source, initial_value="None") %} {% if property.required %} +{% if property.nullable %} +{{ property.python_name }} = {{ source }} +{{ property.python_name }} = isoparse({{ property.python_name }}) if {{ property.python_name }} else None +{% else %} {{ property.python_name }} = isoparse({{ source }}) +{% endif %} {% else %} {{ property.python_name }} = {{ initial_value }} _{{ property.python_name }} = {{ source }}