Skip to content

Commit 47e316e

Browse files
committed
fix(generator): Bad class·name for components/schemas without titles (fixes #397)
1 parent 36dbecc commit 47e316e

File tree

5 files changed

+21
-25
lines changed

5 files changed

+21
-25
lines changed

end_to_end_tests/golden-record/my_test_api_client/models/__init__.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77
from .an_int_enum import AnIntEnum
88
from .another_all_of_sub_model import AnotherAllOfSubModel
99
from .body_upload_file_tests_upload_post import BodyUploadFileTestsUploadPost
10-
from .componentsschemas_model_with_additional_properties_inlined_additional_property import (
11-
ComponentsschemasModelWithAdditionalPropertiesInlinedAdditionalProperty,
12-
)
1310
from .different_enum import DifferentEnum
1411
from .free_form_model import FreeFormModel
1512
from .http_validation_error import HTTPValidationError
1613
from .model_from_all_of import ModelFromAllOf
1714
from .model_name import ModelName
1815
from .model_with_additional_properties_inlined import ModelWithAdditionalPropertiesInlined
16+
from .model_with_additional_properties_inlined_additional_property import (
17+
ModelWithAdditionalPropertiesInlinedAdditionalProperty,
18+
)
1919
from .model_with_additional_properties_refed import ModelWithAdditionalPropertiesRefed
2020
from .model_with_any_json_properties import ModelWithAnyJsonProperties
2121
from .model_with_any_json_properties_additional_property_type_0 import ModelWithAnyJsonPropertiesAdditionalPropertyType0

end_to_end_tests/golden-record/my_test_api_client/models/model_with_additional_properties_inlined.py

+6-10
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import attr
44

5-
from ..models.componentsschemas_model_with_additional_properties_inlined_additional_property import (
6-
ComponentsschemasModelWithAdditionalPropertiesInlinedAdditionalProperty,
5+
from ..models.model_with_additional_properties_inlined_additional_property import (
6+
ModelWithAdditionalPropertiesInlinedAdditionalProperty,
77
)
88
from ..types import UNSET, Unset
99

@@ -15,7 +15,7 @@ class ModelWithAdditionalPropertiesInlined:
1515
""" """
1616

1717
a_number: Union[Unset, float] = UNSET
18-
additional_properties: Dict[str, ComponentsschemasModelWithAdditionalPropertiesInlinedAdditionalProperty] = attr.ib(
18+
additional_properties: Dict[str, ModelWithAdditionalPropertiesInlinedAdditionalProperty] = attr.ib(
1919
init=False, factory=dict
2020
)
2121

@@ -43,9 +43,7 @@ def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
4343

4444
additional_properties = {}
4545
for prop_name, prop_dict in d.items():
46-
additional_property = ComponentsschemasModelWithAdditionalPropertiesInlinedAdditionalProperty.from_dict(
47-
prop_dict
48-
)
46+
additional_property = ModelWithAdditionalPropertiesInlinedAdditionalProperty.from_dict(prop_dict)
4947

5048
additional_properties[prop_name] = additional_property
5149

@@ -56,12 +54,10 @@ def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
5654
def additional_keys(self) -> List[str]:
5755
return list(self.additional_properties.keys())
5856

59-
def __getitem__(self, key: str) -> ComponentsschemasModelWithAdditionalPropertiesInlinedAdditionalProperty:
57+
def __getitem__(self, key: str) -> ModelWithAdditionalPropertiesInlinedAdditionalProperty:
6058
return self.additional_properties[key]
6159

62-
def __setitem__(
63-
self, key: str, value: ComponentsschemasModelWithAdditionalPropertiesInlinedAdditionalProperty
64-
) -> None:
60+
def __setitem__(self, key: str, value: ModelWithAdditionalPropertiesInlinedAdditionalProperty) -> None:
6561
self.additional_properties[key] = value
6662

6763
def __delitem__(self, key: str) -> None:
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
from ..types import UNSET, Unset
66

7-
T = TypeVar("T", bound="ComponentsschemasModelWithAdditionalPropertiesInlinedAdditionalProperty")
7+
T = TypeVar("T", bound="ModelWithAdditionalPropertiesInlinedAdditionalProperty")
88

99

1010
@attr.s(auto_attribs=True)
11-
class ComponentsschemasModelWithAdditionalPropertiesInlinedAdditionalProperty:
11+
class ModelWithAdditionalPropertiesInlinedAdditionalProperty:
1212
""" """
1313

1414
extra_props_prop: Union[Unset, str] = UNSET
@@ -30,12 +30,12 @@ def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
3030
d = src_dict.copy()
3131
extra_props_prop = d.pop("extra_props_prop", UNSET)
3232

33-
componentsschemas_model_with_additional_properties_inlined_additional_property = cls(
33+
model_with_additional_properties_inlined_additional_property = cls(
3434
extra_props_prop=extra_props_prop,
3535
)
3636

37-
componentsschemas_model_with_additional_properties_inlined_additional_property.additional_properties = d
38-
return componentsschemas_model_with_additional_properties_inlined_additional_property
37+
model_with_additional_properties_inlined_additional_property.additional_properties = d
38+
return model_with_additional_properties_inlined_additional_property
3939

4040
@property
4141
def additional_keys(self) -> List[str]:

openapi_python_client/parser/properties/model_property.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -180,18 +180,18 @@ def build_model_property(
180180
parent_name: The name of the property that this property is inside of (affects class naming)
181181
config: Config data for this run of the generator, used to modifying names
182182
"""
183-
class_name = data.title or name
183+
class_string = data.title or name
184184
if parent_name:
185-
class_name = f"{utils.pascal_case(parent_name)}{utils.pascal_case(class_name)}"
186-
class_info = Class.from_string(string=class_name, config=config)
185+
class_string = f"{utils.pascal_case(parent_name)}{utils.pascal_case(class_string)}"
186+
class_info = Class.from_string(string=class_string, config=config)
187187

188-
property_data = _process_properties(data=data, schemas=schemas, class_name=class_name, config=config)
188+
property_data = _process_properties(data=data, schemas=schemas, class_name=class_info.name, config=config)
189189
if isinstance(property_data, PropertyError):
190190
return property_data, schemas
191191
schemas = property_data.schemas
192192

193193
additional_properties, schemas = _get_additional_properties(
194-
schema_additional=data.additionalProperties, schemas=schemas, class_name=class_name, config=config
194+
schema_additional=data.additionalProperties, schemas=schemas, class_name=class_info.name, config=config
195195
)
196196
if isinstance(additional_properties, Property):
197197
property_data.relative_imports.update(additional_properties.get_imports(prefix=".."))

tests/test_parser/test_properties/test_model_property.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ def test_bad_props_return_error(self):
178178
assert err == PropertyError(detail="unknown type not_real", data=oai.Schema(type="not_real"))
179179

180180
def test_bad_additional_props_return_error(self):
181-
from openapi_python_client.parser.properties import Schemas, build_model_property
181+
from openapi_python_client.parser.properties import Config, Schemas, build_model_property
182182

183183
additional_properties = oai.Schema(
184184
type="object",
@@ -190,7 +190,7 @@ def test_bad_additional_props_return_error(self):
190190
schemas = Schemas()
191191

192192
err, new_schemas = build_model_property(
193-
data=data, name="prop", schemas=schemas, required=True, parent_name=None, config=MagicMock()
193+
data=data, name="prop", schemas=schemas, required=True, parent_name=None, config=Config()
194194
)
195195

196196
assert new_schemas == schemas

0 commit comments

Comments
 (0)