Skip to content

don't declare unused variable if model has no properties #1109

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 3 commits into from
Sep 2, 2024
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
7 changes: 7 additions & 0 deletions .changeset/no_properties_fix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
default: patch
---

# Produce valid code for an object that has no properties at all

Fixed by PR #1109. Thanks @eli-bl!
5 changes: 5 additions & 0 deletions end_to_end_tests/baseline_openapi_3.0.json
Original file line number Diff line number Diff line change
Expand Up @@ -2219,6 +2219,11 @@
}
]
},
"ModelWithNoProperties": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"AllOfSubModel": {
"title": "AllOfSubModel",
"type": "object",
Expand Down
5 changes: 5 additions & 0 deletions end_to_end_tests/baseline_openapi_3.1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2213,6 +2213,11 @@ info:
}
]
},
"ModelWithNoProperties": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"AllOfSubModel": {
"title": "AllOfSubModel",
"type": "object",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
from .model_with_circular_ref_in_additional_properties_b import ModelWithCircularRefInAdditionalPropertiesB
from .model_with_date_time_property import ModelWithDateTimeProperty
from .model_with_discriminated_union import ModelWithDiscriminatedUnion
from .model_with_no_properties import ModelWithNoProperties
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
Expand Down Expand Up @@ -137,6 +138,7 @@
"ModelWithCircularRefInAdditionalPropertiesB",
"ModelWithDateTimeProperty",
"ModelWithDiscriminatedUnion",
"ModelWithNoProperties",
"ModelWithPrimitiveAdditionalProperties",
"ModelWithPrimitiveAdditionalPropertiesADateHolder",
"ModelWithPropertyRef",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from typing import Any, Dict, Type, TypeVar

from attrs import define as _attrs_define

T = TypeVar("T", bound="ModelWithNoProperties")


@_attrs_define
class ModelWithNoProperties:
""" """

def to_dict(self) -> Dict[str, Any]:
field_dict: Dict[str, Any] = {}

return field_dict

@classmethod
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
model_with_no_properties = cls()

return model_with_no_properties
2 changes: 2 additions & 0 deletions openapi_python_client/templates/model.py.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ return field_dict
{% for lazy_import in model.lazy_imports %}
{{ lazy_import }}
{% endfor %}
{% if (model.required_properties or model.optional_properties or model.additional_properties) %}
d = src_dict.copy()
{% for property in model.required_properties + model.optional_properties %}
{% if property.required %}
Expand All @@ -153,6 +154,7 @@ return field_dict
{% endif %}

{% endfor %}
{% endif %}
{{ module_name }} = cls(
{% for property in model.required_properties + model.optional_properties %}
{{ property.python_name }}={{ property.python_name }},
Expand Down
Loading