Missing lazy_import in model to_multipart()
kgutwin opened this issue · comments
Describe the bug
In the end-to-end tests, the file golden-record/my_test_api_client/models/body_upload_file_tests_upload_post.py
passes type checking, but would fail in a runtime call in a call to BodyUploadFileTestsUploadPost.to_multipart()
at the following point:
def to_multipart(self) -> Dict[str, Any]:
some_file = self.some_file.to_tuple()
some_object = (None, json.dumps(self.some_object.to_dict()).encode(), "application/json")
some_nullable_object: Union[None, Tuple[None, bytes, str]]
if isinstance(self.some_nullable_object, BodyUploadFileTestsUploadPostSomeNullableObject): # raises NameError
some_nullable_object = (None, json.dumps(self.some_nullable_object.to_dict()).encode(), "application/json")
else:
some_nullable_object = self.some_nullable_object
The exception raised is NameError: name 'BodyUploadFileTestsUploadPostSomeNullableObject' is not defined
.
The analogous point in to_dict()
is avoided because the required model is imported:
def to_dict(self) -> Dict[str, Any]:
from ..models.body_upload_file_tests_upload_post_some_nullable_object import (
BodyUploadFileTestsUploadPostSomeNullableObject,
)
some_file = self.some_file.to_tuple()
some_object = self.some_object.to_dict()
some_nullable_object: Union[Dict[str, Any], None]
if isinstance(self.some_nullable_object, BodyUploadFileTestsUploadPostSomeNullableObject):
some_nullable_object = self.some_nullable_object.to_dict()
else:
some_nullable_object = self.some_nullable_object
It appears that model.py.jinja
needs to be updated to include the necessary lazy imports:
def to_dict(self) -> Dict[str, Any]:
"""Convert to a dict"""
{% for lazy_import in model.lazy_imports | sort %}
{{ lazy_import }}
{% endfor %}
{{ _to_dict() | indent(8) }}
{% if model.is_multipart_body %}
def to_multipart(self) -> Dict[str, Any]:
{{ _to_dict(multipart=True) | indent(8) }}
{% endif %}
Looking again, is there a reason why the check for if TYPE_CHECKING:
is present at the top of model.py.jinja
when importing the model's lazy imports?