Skip to content
Closed
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
Expand Up @@ -867,6 +867,7 @@ private ModelsMap postProcessModelsMap(ModelsMap objs) {
TreeSet<String> datetimeImports = new TreeSet<>();
TreeSet<String> modelImports = new TreeSet<>();
TreeSet<String> postponedModelImports = new TreeSet<>();
TreeSet<String> discriminatorModelImports = new TreeSet<>();

for (ModelMap m : objs.getModels()) {
TreeSet<String> exampleImports = new TreeSet<>();
Expand Down Expand Up @@ -929,7 +930,7 @@ private ModelsMap postProcessModelsMap(ModelsMap objs) {
typingImports.add("Union");
Set<CodegenDiscriminator.MappedModel> discriminator = model.getDiscriminator().getMappedModels();
for (CodegenDiscriminator.MappedModel mappedModel : discriminator) {
postponedModelImports.add(mappedModel.getMappingName());
discriminatorModelImports.add(mappedModel.getMappingName());
}
}
}
Expand Down Expand Up @@ -1035,6 +1036,19 @@ private ModelsMap postProcessModelsMap(ModelsMap objs) {

model.getVendorExtensions().putIfAbsent("x-py-postponed-model-imports", modelsToImport);
}

if (!discriminatorModelImports.isEmpty()) {
Set<String> modelsToImport = new TreeSet<>();
for (String modelImport : discriminatorModelImports) {
if (modelImport.equals(model.classname)) {
// skip self import
continue;
}
modelsToImport.add("globals()[\"" + modelImport + "\"] = importlib.import_module(\"" + packageName + ".models." + underscore(modelImport) + "\")." + modelImport);
}

model.discriminator.getVendorExtensions().putIfAbsent("x-py-discriminator-model-imports", modelsToImport);
}
}

return objs;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ from __future__ import annotations
import pprint
import re # noqa: F401
import json
import importlib

{{#vendorExtensions.x-py-datetime-imports}}{{#-first}}from datetime import{{/-first}} {{{.}}}{{^-last}},{{/-last}}{{/vendorExtensions.x-py-datetime-imports}}
{{#vendorExtensions.x-py-typing-imports}}{{#-first}}from typing import{{/-first}} {{{.}}}{{^-last}},{{/-last}}{{/vendorExtensions.x-py-typing-imports}}
Expand Down Expand Up @@ -93,16 +94,28 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
__discriminator_property_name: ClassVar[List[str]] = '{{discriminator.propertyBaseName}}'

# discriminator mappings
__discriminator_value_class_map: ClassVar[Dict[str, str]] = {
{{#mappedModels}}'{{{mappingName}}}': '{{{modelName}}}'{{^-last}},{{/-last}}{{/mappedModels}}
}
__discriminator_value_class_map: ClassVar[Union[Dict[str, str], None]] = None

@classmethod
def _get_discriminator_value_class_map(cls) -> ClassVar[Dict[str, str]]:
if cls.__discriminator_value_class_map == None:
# Prevent circular imports caused by mutually referencing classes
{{#vendorExtensions.x-py-discriminator-model-imports}}
{{{.}}}
{{/vendorExtensions.x-py-discriminator-model-imports}}

cls.__discriminator_value_class_map = {
{{#mappedModels}}'{{{mappingName}}}': '{{{modelName}}}'{{^-last}},{{/-last}}{{/mappedModels}}
}
return cls.__discriminator_value_class_map

@classmethod
def get_discriminator_value(cls, obj: dict) -> str:
"""Returns the discriminator value (object type) of the data"""

discriminator_value = obj[cls.__discriminator_property_name]
if discriminator_value:
return cls.__discriminator_value_class_map.get(discriminator_value)
return cls._get_discriminator_value_class_map().get(discriminator_value)
else:
return None

Expand Down Expand Up @@ -250,7 +263,7 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
else:
raise ValueError("{{{classname}}} failed to lookup discriminator value from " +
json.dumps(obj) + ". Discriminator property name: " + cls.__discriminator_property_name +
", mapping: " + json.dumps(cls.__discriminator_value_class_map))
", mapping: " + json.dumps(cls._get_discriminator_value_class_map()))
{{/discriminator}}
{{/hasChildren}}
{{^hasChildren}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib

from datetime import datetime
from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import List, Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional, Union
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import List, Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import List, Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import List, Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib

from datetime import datetime
from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import List, Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional, Union
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import List, Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import List, Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import List, Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Dict, Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional, Union
Expand Down Expand Up @@ -45,16 +46,27 @@ class Animal(BaseModel):
__discriminator_property_name: ClassVar[List[str]] = 'className'

# discriminator mappings
__discriminator_value_class_map: ClassVar[Dict[str, str]] = {
'Cat': 'Cat','Dog': 'Dog'
}
__discriminator_value_class_map: ClassVar[Union[Dict[str, str], None]] = None

@classmethod
def _get_discriminator_value_class_map(cls) -> ClassVar[Dict[str, str]]:
if cls.__discriminator_value_class_map == None:
# Prevent circular imports caused by mutually referencing classes
globals()["Cat"] = importlib.import_module("petstore_api.models.cat").Cat
globals()["Dog"] = importlib.import_module("petstore_api.models.dog").Dog

cls.__discriminator_value_class_map = {
'Cat': 'Cat','Dog': 'Dog'
}
return cls.__discriminator_value_class_map

@classmethod
def get_discriminator_value(cls, obj: dict) -> str:
"""Returns the discriminator value (object type) of the data"""

discriminator_value = obj[cls.__discriminator_property_name]
if discriminator_value:
return cls.__discriminator_value_class_map.get(discriminator_value)
return cls._get_discriminator_value_class_map().get(discriminator_value)
else:
return None

Expand Down Expand Up @@ -101,13 +113,6 @@ def from_dict(cls, obj: dict) -> Union[Self, Self]:
else:
raise ValueError("Animal failed to lookup discriminator value from " +
json.dumps(obj) + ". Discriminator property name: " + cls.__discriminator_property_name +
", mapping: " + json.dumps(cls.__discriminator_value_class_map))

from petstore_api.models.cat import Cat
from petstore_api.models.dog import Dog
from typing import TYPE_CHECKING
if TYPE_CHECKING:
# TODO: pydantic v2
# Animal.model_rebuild()
pass
", mapping: " + json.dumps(cls._get_discriminator_value_class_map()))


Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import List, Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import List, Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import List, Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import List, Optional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import pprint
import re # noqa: F401
import json
import importlib



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import pprint
import re # noqa: F401
import json
import importlib


from typing import Optional
Expand Down
Loading