Skip to content

Commit

Permalink
CTOOLS-373: Circular dependency fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Matt-Storey-Finbourne committed Sep 20, 2024
1 parent 417aecb commit 9571e39
Showing 1 changed file with 27 additions and 31 deletions.
58 changes: 27 additions & 31 deletions generate/templates/model_generic.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,17 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
"""
{{#description}}{{{description}}} # noqa: E501{{/description}}{{^description}}{{{classname}}}{{/description}}
"""
{{#vars}}
{{name}}: {{{vendorExtensions.x-py-typing}}}
{{/vars}}
{{#isAdditionalPropertiesTrue}}
additional_properties: Dict[str, Any] = {}
{{/isAdditionalPropertiesTrue}}
__properties = [{{#allVars}}"{{baseName}}"{{^-last}}, {{/-last}}{{/allVars}}]
{{#vars}}
{{#vendorExtensions.x-regex}}

@validator('{{{name}}}',allow_reuse=True,check_fields=False)
@validator('{{{name}}}')
def {{{name}}}_validate_regular_expression(cls, value):
"""Validates the regular expression"""
{{^required}}
Expand Down Expand Up @@ -120,17 +124,8 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
return cls.from_dict(json.loads(json_str))

def to_dict(self):

"""Returns the dictionary representation of the model using alias"""
{{#vendorExtensions.x-py-postponed-model-imports}}
{{{.}}}
{{/vendorExtensions.x-py-postponed-model-imports}}

{{#vars}}
{{name}}: {{{vendorExtensions.x-py-typing}}}
{{/vars}}
__properties = [{{#allVars}}"{{baseName}}"{{^-last}}, {{/-last}}{{/allVars}}]
_dict = dict(by_alias=True,
_dict = self.dict(by_alias=True,
exclude={
{{#vendorExtensions.x-py-readonly}}
"{{{.}}}",
Expand All @@ -147,8 +142,8 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
{{^items.items.isPrimitiveType}}
# override the default output from pydantic by calling `to_dict()` of each item in {{{name}}} (list of list)
_items = []
if {{{name}}}:
for _item in {{{name}}}:
if self.{{{name}}}:
for _item in self.{{{name}}}:
if _item:
_items.append(
[_inner_item.to_dict() for _inner_item in _item if _inner_item is not None]
Expand All @@ -161,8 +156,8 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
{{^items.isEnumOrRef}}
# override the default output from pydantic by calling `to_dict()` of each item in {{{name}}} (list)
_items = []
if {{{name}}}:
for _item in {{{name}}}:
if self.{{{name}}}:
for _item in self.{{{name}}}:
if _item:
_items.append(_item.to_dict())
_dict['{{{baseName}}}'] = _items
Expand All @@ -174,11 +169,11 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
{{#items.isArray}}
# override the default output from pydantic by calling `to_dict()` of each value in {{{name}}} (dict of array)
_field_dict_of_array = {}
if {{{name}}}:
for _key in {{{name}}}:
if {{{name}}}[_key]:
if self.{{{name}}}:
for _key in self.{{{name}}}:
if self.{{{name}}}[_key]:
_field_dict_of_array[_key] = [
_item.to_dict() for _item in {{{name}}}[_key]
_item.to_dict() for _item in self.{{{name}}}[_key]
]
_dict['{{{baseName}}}'] = _field_dict_of_array
{{/items.isArray}}
Expand All @@ -187,10 +182,10 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
{{^items.isEnumOrRef}}
# override the default output from pydantic by calling `to_dict()` of each value in {{{name}}} (dict)
_field_dict = {}
if {{{name}}}:
for _key in {{{name}}}:
if {{{name}}}[_key]:
_field_dict[_key] = {{{name}}}[_key].to_dict()
if self.{{{name}}}:
for _key in self.{{{name}}}:
if self.{{{name}}}[_key]:
_field_dict[_key] = self.{{{name}}}[_key].to_dict()
_dict['{{{baseName}}}'] = _field_dict
{{/items.isEnumOrRef}}
{{/items.isPrimitiveType}}
Expand All @@ -201,24 +196,24 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
{{^isPrimitiveType}}
{{^isEnumOrRef}}
# override the default output from pydantic by calling `to_dict()` of {{{name}}}
if {{{name}}}:
_dict['{{{baseName}}}'] = {{{name}}}.to_dict()
if self.{{{name}}}:
_dict['{{{baseName}}}'] = self.{{{name}}}.to_dict()
{{/isEnumOrRef}}
{{/isPrimitiveType}}
{{/isContainer}}
{{/allVars}}
{{#isAdditionalPropertiesTrue}}
# puts key-value pairs in additional_properties in the top level
if additional_properties is not None:
for _key, _value in additional_properties.items():
if self.additional_properties is not None:
for _key, _value in self.additional_properties.items():
_dict[_key] = _value

{{/isAdditionalPropertiesTrue}}
{{#allVars}}
{{#isNullable}}
# set to None if {{{name}}} (nullable) is None
# and __fields_set__ contains the field
if {{name}} is None and "{{{name}}}" in __fields_set__:
if self.{{name}} is None and "{{{name}}}" in self.__fields_set__:
_dict['{{{baseName}}}'] = None

{{/isNullable}}
Expand All @@ -228,9 +223,6 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
@classmethod
def from_dict(cls, obj: dict) -> {{^hasChildren}}{{{classname}}}{{/hasChildren}}{{#hasChildren}}{{#discriminator}}Union({{#children}}{{{classname}}}{{^-last}}, {{/-last}}{{/children}}){{/discriminator}}{{^discriminator}}{{{classname}}}{{/discriminator}}{{/hasChildren}}:
"""Create an instance of {{{classname}}} from a dict"""
{{#vendorExtensions.x-py-postponed-model-imports}}
{{{.}}}
{{/vendorExtensions.x-py-postponed-model-imports}}
{{#hasChildren}}
{{#discriminator}}
# look up the object type based on discriminator mapping
Expand Down Expand Up @@ -365,3 +357,7 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
{{/isAdditionalPropertiesTrue}}
return _obj
{{/hasChildren}}

{{#vendorExtensions.x-py-postponed-model-imports}}
{{{.}}}
{{/vendorExtensions.x-py-postponed-model-imports}}

0 comments on commit 9571e39

Please sign in to comment.