diff --git a/end_to_end_tests/golden-record/my_test_api_client/models/body_upload_file_tests_upload_post.py b/end_to_end_tests/golden-record/my_test_api_client/models/body_upload_file_tests_upload_post.py index 85bd57118..4863298fc 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/models/body_upload_file_tests_upload_post.py +++ b/end_to_end_tests/golden-record/my_test_api_client/models/body_upload_file_tests_upload_post.py @@ -1,8 +1,10 @@ +import datetime import json from io import BytesIO from typing import Any, Dict, List, Optional, Tuple, Type, TypeVar, Union, cast import attr +from dateutil.parser import isoparse from ..models.body_upload_file_tests_upload_post_additional_property import ( BodyUploadFileTestsUploadPostAdditionalProperty, @@ -28,6 +30,8 @@ class BodyUploadFileTestsUploadPost: some_object (BodyUploadFileTestsUploadPostSomeObject): some_optional_file (Union[Unset, File]): some_string (Union[Unset, str]): Default: 'some_default_string'. + a_datetime (Union[Unset, datetime.datetime]): + a_date (Union[Unset, datetime.date]): some_number (Union[Unset, float]): some_array (Union[Unset, List[float]]): some_optional_object (Union[Unset, BodyUploadFileTestsUploadPostSomeOptionalObject]): @@ -40,6 +44,8 @@ class BodyUploadFileTestsUploadPost: some_nullable_object: Optional[BodyUploadFileTestsUploadPostSomeNullableObject] some_optional_file: Union[Unset, File] = UNSET some_string: Union[Unset, str] = "some_default_string" + a_datetime: Union[Unset, datetime.datetime] = UNSET + a_date: Union[Unset, datetime.date] = UNSET some_number: Union[Unset, float] = UNSET some_array: Union[Unset, List[float]] = UNSET some_optional_object: Union[Unset, BodyUploadFileTestsUploadPostSomeOptionalObject] = UNSET @@ -58,6 +64,14 @@ def to_dict(self) -> Dict[str, Any]: some_optional_file = self.some_optional_file.to_tuple() some_string = self.some_string + a_datetime: Union[Unset, str] = UNSET + if not isinstance(self.a_datetime, Unset): + a_datetime = self.a_datetime.isoformat() + + a_date: Union[Unset, str] = UNSET + if not isinstance(self.a_date, Unset): + a_date = self.a_date.isoformat() + some_number = self.some_number some_array: Union[Unset, List[float]] = UNSET if not isinstance(self.some_array, Unset): @@ -88,6 +102,10 @@ def to_dict(self) -> Dict[str, Any]: field_dict["some_optional_file"] = some_optional_file if some_string is not UNSET: field_dict["some_string"] = some_string + if a_datetime is not UNSET: + field_dict["a_datetime"] = a_datetime + if a_date is not UNSET: + field_dict["a_date"] = a_date if some_number is not UNSET: field_dict["some_number"] = some_number if some_array is not UNSET: @@ -113,6 +131,14 @@ def to_multipart(self) -> Dict[str, Any]: if isinstance(self.some_string, Unset) else (None, str(self.some_string).encode(), "text/plain") ) + a_datetime: Union[Unset, bytes] = UNSET + if not isinstance(self.a_datetime, Unset): + a_datetime = self.a_datetime.isoformat().encode() + + a_date: Union[Unset, bytes] = UNSET + if not isinstance(self.a_date, Unset): + a_date = self.a_date.isoformat().encode() + some_number = ( self.some_number if isinstance(self.some_number, Unset) @@ -152,6 +178,10 @@ def to_multipart(self) -> Dict[str, Any]: field_dict["some_optional_file"] = some_optional_file if some_string is not UNSET: field_dict["some_string"] = some_string + if a_datetime is not UNSET: + field_dict["a_datetime"] = a_datetime + if a_date is not UNSET: + field_dict["a_date"] = a_date if some_number is not UNSET: field_dict["some_number"] = some_number if some_array is not UNSET: @@ -179,6 +209,20 @@ def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: some_string = d.pop("some_string", UNSET) + _a_datetime = d.pop("a_datetime", UNSET) + a_datetime: Union[Unset, datetime.datetime] + if isinstance(_a_datetime, Unset): + a_datetime = UNSET + else: + a_datetime = isoparse(_a_datetime) + + _a_date = d.pop("a_date", UNSET) + a_date: Union[Unset, datetime.date] + if isinstance(_a_date, Unset): + a_date = UNSET + else: + a_date = isoparse(_a_date).date() + some_number = d.pop("some_number", UNSET) some_array = cast(List[float], d.pop("some_array", UNSET)) @@ -209,6 +253,8 @@ def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: some_object=some_object, some_optional_file=some_optional_file, some_string=some_string, + a_datetime=a_datetime, + a_date=a_date, some_number=some_number, some_array=some_array, some_optional_object=some_optional_object, diff --git a/end_to_end_tests/openapi.json b/end_to_end_tests/openapi.json index 22e095511..b958e530b 100644 --- a/end_to_end_tests/openapi.json +++ b/end_to_end_tests/openapi.json @@ -1309,6 +1309,16 @@ "type": "string", "default": "some_default_string" }, + "a_datetime": { + "title": "A Datetime", + "type": "string", + "format": "date-time" + }, + "a_date": { + "title": "A Date", + "type": "string", + "format": "date" + }, "some_number": { "title": "Some Number", "type": "number" diff --git a/openapi_python_client/templates/property_templates/date_property.py.jinja b/openapi_python_client/templates/property_templates/date_property.py.jinja index f0dd00ba9..2107c5cb5 100644 --- a/openapi_python_client/templates/property_templates/date_property.py.jinja +++ b/openapi_python_client/templates/property_templates/date_property.py.jinja @@ -18,7 +18,13 @@ isoparse({{ source }}).date() {% if property.required %} {{ destination }} = {{ transformed }} {% if property.nullable %}if {{ source }} else None {%endif%} {% else %} -{{ destination }}{% if declare_type %}: {{ property.get_type_string(json=True) }}{% endif %} = UNSET +{% if declare_type %} +{% set type_annotation = property.get_type_string(json=True) %} +{% if multipart %}{% set type_annotation = type_annotation | replace("str", "bytes") %}{% endif %} +{{ destination }}: {{ type_annotation }} = UNSET +{% else %} +{{ destination }} = UNSET +{% endif %} if not isinstance({{ source }}, Unset): {% if property.nullable %} {{ destination }} = {{ transformed }} if {{ source }} else None diff --git a/openapi_python_client/templates/property_templates/datetime_property.py.jinja b/openapi_python_client/templates/property_templates/datetime_property.py.jinja index 6653a6134..29a2b417d 100644 --- a/openapi_python_client/templates/property_templates/datetime_property.py.jinja +++ b/openapi_python_client/templates/property_templates/datetime_property.py.jinja @@ -22,7 +22,13 @@ isoparse({{ source }}) {{ destination }} = {{ transformed }} {% endif %} {% else %} -{{ destination }}{% if declare_type %}: {{ property.get_type_string(json=True) }}{% endif %} = UNSET +{% if declare_type %} +{% set type_annotation = property.get_type_string(json=True) %} +{% if multipart %}{% set type_annotation = type_annotation | replace("str", "bytes") %}{% endif %} +{{ destination }}: {{ type_annotation }} = UNSET +{% else %} +{{ destination }} = UNSET +{% endif %} if not isinstance({{ source }}, Unset): {% if property.nullable %} {{ destination }} = {{ transformed }} if {{ source }} else None