From a29be49f014c111a3ad066bb370b08c78742bb11 Mon Sep 17 00:00:00 2001 From: Keith Ray <14852877+kmray@users.noreply.github.com> Date: Thu, 23 Dec 2021 15:59:44 -0600 Subject: [PATCH] Add datetime to RESERVED_WORDS --- .../my_test_api_client/models/__init__.py | 1 + .../models/model_with_date_time_property.py | 66 +++++++++++++++++++ end_to_end_tests/openapi.json | 9 +++ openapi_python_client/utils.py | 2 +- 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 end_to_end_tests/golden-record/my_test_api_client/models/model_with_date_time_property.py diff --git a/end_to_end_tests/golden-record/my_test_api_client/models/__init__.py b/end_to_end_tests/golden-record/my_test_api_client/models/__init__.py index 40baca7b9..e6e8275f8 100644 --- a/end_to_end_tests/golden-record/my_test_api_client/models/__init__.py +++ b/end_to_end_tests/golden-record/my_test_api_client/models/__init__.py @@ -30,6 +30,7 @@ from .model_with_additional_properties_refed import ModelWithAdditionalPropertiesRefed from .model_with_any_json_properties import ModelWithAnyJsonProperties from .model_with_any_json_properties_additional_property_type_0 import ModelWithAnyJsonPropertiesAdditionalPropertyType0 +from .model_with_date_time_property import ModelWithDateTimeProperty from .model_with_primitive_additional_properties import ModelWithPrimitiveAdditionalProperties from .model_with_primitive_additional_properties_a_date_holder import ModelWithPrimitiveAdditionalPropertiesADateHolder from .model_with_property_ref import ModelWithPropertyRef diff --git a/end_to_end_tests/golden-record/my_test_api_client/models/model_with_date_time_property.py b/end_to_end_tests/golden-record/my_test_api_client/models/model_with_date_time_property.py new file mode 100644 index 000000000..1dfc6d406 --- /dev/null +++ b/end_to_end_tests/golden-record/my_test_api_client/models/model_with_date_time_property.py @@ -0,0 +1,66 @@ +import datetime +from typing import Any, Dict, List, Type, TypeVar, Union + +import attr +from dateutil.parser import isoparse + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="ModelWithDateTimeProperty") + + +@attr.s(auto_attribs=True) +class ModelWithDateTimeProperty: + """ + Attributes: + datetime_ (Union[Unset, datetime.datetime]): + """ + + datetime_: Union[Unset, datetime.datetime] = UNSET + additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + datetime_: Union[Unset, str] = UNSET + if not isinstance(self.datetime_, Unset): + datetime_ = self.datetime_.isoformat() + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if datetime_ is not UNSET: + field_dict["datetime"] = datetime_ + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() + _datetime_ = d.pop("datetime", UNSET) + datetime_: Union[Unset, datetime.datetime] + if isinstance(_datetime_, Unset): + datetime_ = UNSET + else: + datetime_ = isoparse(_datetime_) + + model_with_date_time_property = cls( + datetime_=datetime_, + ) + + model_with_date_time_property.additional_properties = d + return model_with_date_time_property + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/end_to_end_tests/openapi.json b/end_to_end_tests/openapi.json index 0cb28e6f9..ef1e9d392 100644 --- a/end_to_end_tests/openapi.json +++ b/end_to_end_tests/openapi.json @@ -1696,6 +1696,15 @@ } } }, + "ModelWithDateTimeProperty" : { + "type": "object", + "properties": { + "datetime": { + "type": "string", + "format": "date-time" + } + } + }, "AnArrayOfEnum": { "type": "array", "items": { diff --git a/openapi_python_client/utils.py b/openapi_python_client/utils.py index 4c47855d2..223739011 100644 --- a/openapi_python_client/utils.py +++ b/openapi_python_client/utils.py @@ -48,7 +48,7 @@ def split_words(value: str) -> List[str]: return re.findall(rf"[^{DELIMITERS}]+", value) -RESERVED_WORDS = (set(dir(builtins)) | {"self", "true", "false"}) - {"type", "id"} +RESERVED_WORDS = (set(dir(builtins)) | {"self", "true", "false", "datetime"}) - {"type", "id"} def fix_reserved_words(value: str) -> str: