Skip to content

Commit 7391c9f

Browse files
Support optional model
1 parent 0b9a99a commit 7391c9f

File tree

2 files changed

+39
-3
lines changed

2 files changed

+39
-3
lines changed

end_to_end_tests/openapi.json

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,7 @@
622622
"schemas": {
623623
"AModel": {
624624
"title": "AModel",
625-
"required": ["an_enum_value", "aCamelDateTime", "a_date", "a_nullable_date", "required_nullable", "required_not_nullable"],
625+
"required": ["an_enum_value", "aCamelDateTime", "a_date", "a_nullable_date", "required_nullable", "required_not_nullable", "model", "nullable_model"],
626626
"type": "object",
627627
"properties": {
628628
"an_enum_value": {
@@ -686,6 +686,42 @@
686686
"title": "NOT Required AND NOT Nullable",
687687
"type": "string",
688688
"nullable": false
689+
},
690+
"model": {
691+
"type": "object",
692+
"allOf": [
693+
{
694+
"ref": "#/components/schemas/ModelWithUnionProperty"
695+
}
696+
],
697+
"nullable": false
698+
},
699+
"nullable_model": {
700+
"type": "object",
701+
"allOf": [
702+
{
703+
"ref": "#/components/schemas/ModelWithUnionProperty"
704+
}
705+
],
706+
"nullable": true
707+
},
708+
"not_required_model": {
709+
"type": "object",
710+
"allOf": [
711+
{
712+
"ref": "#/components/schemas/ModelWithUnionProperty"
713+
}
714+
],
715+
"nullable": false
716+
},
717+
"not_required_nullable_model": {
718+
"type": "object",
719+
"allOf": [
720+
{
721+
"ref": "#/components/schemas/ModelWithUnionProperty"
722+
}
723+
],
724+
"nullable": true
689725
}
690726
},
691727
"description": "A Model for testing all the ways custom objects can be used ",

openapi_python_client/templates/property_templates/model_property.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{% macro construct(property, source, initial_value=None) %}
2-
{% if property.required %}
2+
{% if property.required and not property.nullable %}
33
{{ property.python_name }} = {{ property.reference.class_name }}.from_dict({{ source }})
44
{% else %}
55
{% if initial_value != None %}
@@ -10,7 +10,7 @@
1010
{{ property.python_name }}: {{ property.get_type_string() }} = UNSET
1111
{% endif %}
1212
_{{ property.python_name }} = {{source}}
13-
if _{{ property.python_name }} is not None and not isinstance(_{{ property.python_name }}, Unset):
13+
if {% if property.nullable %}_{{ property.python_name }} is not None{% endif %}{% if property.nullable and not property.required %} and {% endif %}{% if not property.required %}not isinstance(_{{ property.python_name }}, Unset){% endif %}:
1414
{{ property.python_name }} = {{ property.reference.class_name }}.from_dict(cast(Dict[str, Any], _{{ property.python_name }}))
1515
{% endif %}
1616
{% endmacro %}

0 commit comments

Comments
 (0)