Skip to content

fix: Type annotations for optional dates and datetimes in multipart/form #580

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jan 29, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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]):
Expand All @@ -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
Expand All @@ -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):
Expand Down Expand Up @@ -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:
Expand All @@ -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)
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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,
Expand Down
10 changes: 10 additions & 0 deletions end_to_end_tests/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down