From f2b0c22522d31fb617a09f4898b0e649551c51f4 Mon Sep 17 00:00:00 2001 From: CatBraaain <84499939+CatBraaain@users.noreply.github.com> Date: Wed, 13 Aug 2025 15:47:17 +0900 Subject: [PATCH 1/3] feat!(python): remove client-side default values applying defaults on the client side is incorrect, so this change removes them. ref: https://swagger.io/docs/specification/v3_0/describing-parameters/#default-parameter-values --- .../codegen/languages/AbstractPythonCodegen.java | 12 +----------- .../src/main/resources/python/model_generic.mustache | 7 +------ 2 files changed, 2 insertions(+), 17 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java index c8c76e394692..3b21b00a47e1 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java @@ -2157,17 +2157,7 @@ private String finalizeType(CodegenProperty cp, PythonType pt) { //String defaultValue = null; if (!cp.required) { //optional - if (cp.defaultValue == null) { - pt.setDefaultValue("None"); - } else { - if (cp.isArray || cp.isMap) { - // TODO handle default value for array/map - pt.setDefaultValue("None"); - } else { - //defaultValue = ; - pt.setDefaultValue(cp.defaultValue); - } - } + pt.setDefaultValue("None"); } String typeConstraint = pt.asTypeConstraint(moduleImports); diff --git a/modules/openapi-generator/src/main/resources/python/model_generic.mustache b/modules/openapi-generator/src/main/resources/python/model_generic.mustache index 9fa35c84fab4..b83443eb16d2 100644 --- a/modules/openapi-generator/src/main/resources/python/model_generic.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_generic.mustache @@ -370,16 +370,11 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}} "{{{baseName}}}": {{{dataType}}}.from_dict(obj["{{{baseName}}}"]) if obj.get("{{{baseName}}}") is not None else None{{^-last}},{{/-last}} {{/isEnumOrRef}} {{#isEnumOrRef}} - "{{{baseName}}}": obj.get("{{{baseName}}}"){{#defaultValue}} if obj.get("{{baseName}}") is not None else {{defaultValue}}{{/defaultValue}}{{^-last}},{{/-last}} + "{{{baseName}}}": obj.get("{{{baseName}}}"){{^-last}},{{/-last}} {{/isEnumOrRef}} {{/isPrimitiveType}} {{#isPrimitiveType}} - {{#defaultValue}} - "{{{baseName}}}": obj.get("{{{baseName}}}") if obj.get("{{{baseName}}}") is not None else {{{defaultValue}}}{{^-last}},{{/-last}} - {{/defaultValue}} - {{^defaultValue}} "{{{baseName}}}": obj.get("{{{baseName}}}"){{^-last}},{{/-last}} - {{/defaultValue}} {{/isPrimitiveType}} {{/isContainer}} {{/allVars}} From ccb714c36a3d4c336122fca1e7567faf44b22555 Mon Sep 17 00:00:00 2001 From: CatBraaain <84499939+CatBraaain@users.noreply.github.com> Date: Wed, 13 Aug 2025 15:48:47 +0900 Subject: [PATCH 2/3] chore: regenerate samples --- .../python-aiohttp/petstore_api/models/animal.py | 2 +- .../python-aiohttp/petstore_api/models/cat.py | 2 +- .../python-aiohttp/petstore_api/models/category.py | 2 +- .../python-aiohttp/petstore_api/models/dog.py | 2 +- .../python-aiohttp/petstore_api/models/enum_test.py | 12 ++++++------ .../python-aiohttp/petstore_api/models/foo.py | 4 ++-- .../models/object_to_test_additional_properties.py | 4 ++-- .../python-aiohttp/petstore_api/models/order.py | 4 ++-- .../models/test_model_with_enum_default.py | 12 ++++++------ .../petstore/python/petstore_api/models/animal.py | 2 +- .../petstore/python/petstore_api/models/cat.py | 2 +- .../petstore/python/petstore_api/models/category.py | 2 +- .../petstore/python/petstore_api/models/dog.py | 2 +- .../petstore/python/petstore_api/models/enum_test.py | 12 ++++++------ .../petstore/python/petstore_api/models/foo.py | 4 ++-- .../models/object_to_test_additional_properties.py | 4 ++-- .../petstore/python/petstore_api/models/order.py | 4 ++-- .../models/test_model_with_enum_default.py | 12 ++++++------ .../client/petstore/python/tests/test_model.py | 6 +++--- .../src/openapi_server/models/order.py | 2 +- 20 files changed, 48 insertions(+), 48 deletions(-) diff --git a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/animal.py b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/animal.py index 56bec73a9ccd..cd17f30862f5 100644 --- a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/animal.py +++ b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/animal.py @@ -33,7 +33,7 @@ class Animal(BaseModel): Animal """ # noqa: E501 class_name: StrictStr = Field(alias="className") - color: Optional[StrictStr] = 'red' + color: Optional[StrictStr] = None __properties: ClassVar[List[str]] = ["className", "color"] model_config = ConfigDict( diff --git a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/cat.py b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/cat.py index 0c2c9788dca3..9d815888f46d 100644 --- a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/cat.py +++ b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/cat.py @@ -82,7 +82,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "className": obj.get("className"), - "color": obj.get("color") if obj.get("color") is not None else 'red', + "color": obj.get("color"), "declawed": obj.get("declawed") }) return _obj diff --git a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/category.py b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/category.py index dcc6247b5ac7..1cf6d4bbc0e2 100644 --- a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/category.py +++ b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/category.py @@ -82,7 +82,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "id": obj.get("id"), - "name": obj.get("name") if obj.get("name") is not None else 'default-name' + "name": obj.get("name") }) return _obj diff --git a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/dog.py b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/dog.py index a0f4ed786b4e..8c8f6306f74a 100644 --- a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/dog.py +++ b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/dog.py @@ -82,7 +82,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "className": obj.get("className"), - "color": obj.get("color") if obj.get("color") is not None else 'red', + "color": obj.get("color"), "breed": obj.get("breed") }) return _obj diff --git a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/enum_test.py b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/enum_test.py index b7e6ec36230f..8bb5407cf769 100644 --- a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/enum_test.py +++ b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/enum_test.py @@ -34,15 +34,15 @@ class EnumTest(BaseModel): """ # noqa: E501 enum_string: Optional[StrictStr] = None enum_string_required: StrictStr - enum_integer_default: Optional[StrictInt] = 5 + enum_integer_default: Optional[StrictInt] = None enum_integer: Optional[StrictInt] = None enum_number: Optional[float] = None enum_string_single_member: Optional[StrictStr] = None enum_integer_single_member: Optional[StrictInt] = None outer_enum: Optional[OuterEnum] = Field(default=None, alias="outerEnum") outer_enum_integer: Optional[OuterEnumInteger] = Field(default=None, alias="outerEnumInteger") - outer_enum_default_value: Optional[OuterEnumDefaultValue] = Field(default=OuterEnumDefaultValue.PLACED, alias="outerEnumDefaultValue") - outer_enum_integer_default_value: Optional[OuterEnumIntegerDefaultValue] = Field(default=OuterEnumIntegerDefaultValue.NUMBER_0, alias="outerEnumIntegerDefaultValue") + outer_enum_default_value: Optional[OuterEnumDefaultValue] = Field(default=None, alias="outerEnumDefaultValue") + outer_enum_integer_default_value: Optional[OuterEnumIntegerDefaultValue] = Field(default=None, alias="outerEnumIntegerDefaultValue") enum_number_vendor_ext: Optional[EnumNumberVendorExt] = Field(default=None, alias="enumNumberVendorExt") enum_string_vendor_ext: Optional[EnumStringVendorExt] = Field(default=None, alias="enumStringVendorExt") __properties: ClassVar[List[str]] = ["enum_string", "enum_string_required", "enum_integer_default", "enum_integer", "enum_number", "enum_string_single_member", "enum_integer_single_member", "outerEnum", "outerEnumInteger", "outerEnumDefaultValue", "outerEnumIntegerDefaultValue", "enumNumberVendorExt", "enumStringVendorExt"] @@ -172,15 +172,15 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "enum_string": obj.get("enum_string"), "enum_string_required": obj.get("enum_string_required"), - "enum_integer_default": obj.get("enum_integer_default") if obj.get("enum_integer_default") is not None else 5, + "enum_integer_default": obj.get("enum_integer_default"), "enum_integer": obj.get("enum_integer"), "enum_number": obj.get("enum_number"), "enum_string_single_member": obj.get("enum_string_single_member"), "enum_integer_single_member": obj.get("enum_integer_single_member"), "outerEnum": obj.get("outerEnum"), "outerEnumInteger": obj.get("outerEnumInteger"), - "outerEnumDefaultValue": obj.get("outerEnumDefaultValue") if obj.get("outerEnumDefaultValue") is not None else OuterEnumDefaultValue.PLACED, - "outerEnumIntegerDefaultValue": obj.get("outerEnumIntegerDefaultValue") if obj.get("outerEnumIntegerDefaultValue") is not None else OuterEnumIntegerDefaultValue.NUMBER_0, + "outerEnumDefaultValue": obj.get("outerEnumDefaultValue"), + "outerEnumIntegerDefaultValue": obj.get("outerEnumIntegerDefaultValue"), "enumNumberVendorExt": obj.get("enumNumberVendorExt"), "enumStringVendorExt": obj.get("enumStringVendorExt") }) diff --git a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/foo.py b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/foo.py index 67b29f1ab87c..801c2c1a751d 100644 --- a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/foo.py +++ b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/foo.py @@ -26,7 +26,7 @@ class Foo(BaseModel): """ Foo """ # noqa: E501 - bar: Optional[StrictStr] = 'bar' + bar: Optional[StrictStr] = None __properties: ClassVar[List[str]] = ["bar"] model_config = ConfigDict( @@ -80,7 +80,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return cls.model_validate(obj) _obj = cls.model_validate({ - "bar": obj.get("bar") if obj.get("bar") is not None else 'bar' + "bar": obj.get("bar") }) return _obj diff --git a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/object_to_test_additional_properties.py b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/object_to_test_additional_properties.py index 22b8bd401a1c..65ca4dc2df80 100644 --- a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/object_to_test_additional_properties.py +++ b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/object_to_test_additional_properties.py @@ -26,7 +26,7 @@ class ObjectToTestAdditionalProperties(BaseModel): """ Minimal object """ # noqa: E501 - var_property: Optional[StrictBool] = Field(default=False, description="Property", alias="property") + var_property: Optional[StrictBool] = Field(default=None, description="Property", alias="property") __properties: ClassVar[List[str]] = ["property"] model_config = ConfigDict( @@ -80,7 +80,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return cls.model_validate(obj) _obj = cls.model_validate({ - "property": obj.get("property") if obj.get("property") is not None else False + "property": obj.get("property") }) return _obj diff --git a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/order.py b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/order.py index f742027e088a..5bece023bc84 100644 --- a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/order.py +++ b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/order.py @@ -32,7 +32,7 @@ class Order(BaseModel): quantity: Optional[StrictInt] = None ship_date: Optional[datetime] = Field(default=None, alias="shipDate") status: Optional[StrictStr] = Field(default=None, description="Order Status") - complete: Optional[StrictBool] = False + complete: Optional[StrictBool] = None __properties: ClassVar[List[str]] = ["id", "petId", "quantity", "shipDate", "status", "complete"] @field_validator('status') @@ -101,7 +101,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "quantity": obj.get("quantity"), "shipDate": obj.get("shipDate"), "status": obj.get("status"), - "complete": obj.get("complete") if obj.get("complete") is not None else False + "complete": obj.get("complete") }) return _obj diff --git a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/test_model_with_enum_default.py b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/test_model_with_enum_default.py index 218fa8f16d22..c2817a21400b 100644 --- a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/test_model_with_enum_default.py +++ b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/test_model_with_enum_default.py @@ -30,9 +30,9 @@ class TestModelWithEnumDefault(BaseModel): """ # noqa: E501 test_enum: TestEnum test_string: Optional[StrictStr] = None - test_enum_with_default: Optional[TestEnumWithDefault] = TestEnumWithDefault.ZWEI - test_string_with_default: Optional[StrictStr] = 'ahoy matey' - test_inline_defined_enum_with_default: Optional[StrictStr] = 'B' + test_enum_with_default: Optional[TestEnumWithDefault] = None + test_string_with_default: Optional[StrictStr] = None + test_inline_defined_enum_with_default: Optional[StrictStr] = None __properties: ClassVar[List[str]] = ["test_enum", "test_string", "test_enum_with_default", "test_string_with_default", "test_inline_defined_enum_with_default"] @field_validator('test_inline_defined_enum_with_default') @@ -98,9 +98,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "test_enum": obj.get("test_enum"), "test_string": obj.get("test_string"), - "test_enum_with_default": obj.get("test_enum_with_default") if obj.get("test_enum_with_default") is not None else TestEnumWithDefault.ZWEI, - "test_string_with_default": obj.get("test_string_with_default") if obj.get("test_string_with_default") is not None else 'ahoy matey', - "test_inline_defined_enum_with_default": obj.get("test_inline_defined_enum_with_default") if obj.get("test_inline_defined_enum_with_default") is not None else 'B' + "test_enum_with_default": obj.get("test_enum_with_default"), + "test_string_with_default": obj.get("test_string_with_default"), + "test_inline_defined_enum_with_default": obj.get("test_inline_defined_enum_with_default") }) return _obj diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/animal.py b/samples/openapi3/client/petstore/python/petstore_api/models/animal.py index 131ad8d0ed60..fed00332add7 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/animal.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/animal.py @@ -33,7 +33,7 @@ class Animal(BaseModel): Animal """ # noqa: E501 class_name: StrictStr = Field(alias="className") - color: Optional[StrictStr] = 'red' + color: Optional[StrictStr] = None additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["className", "color"] diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/cat.py b/samples/openapi3/client/petstore/python/petstore_api/models/cat.py index 86002178c904..ae8825336f11 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/cat.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/cat.py @@ -90,7 +90,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "className": obj.get("className"), - "color": obj.get("color") if obj.get("color") is not None else 'red', + "color": obj.get("color"), "declawed": obj.get("declawed") }) # store additional fields in additional_properties diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/category.py b/samples/openapi3/client/petstore/python/petstore_api/models/category.py index c659f1845726..d56496d08c4e 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/category.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/category.py @@ -90,7 +90,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "id": obj.get("id"), - "name": obj.get("name") if obj.get("name") is not None else 'default-name' + "name": obj.get("name") }) # store additional fields in additional_properties for _key in obj.keys(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/dog.py b/samples/openapi3/client/petstore/python/petstore_api/models/dog.py index cde0f5d27e0c..66c29c1f186a 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/dog.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/dog.py @@ -90,7 +90,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "className": obj.get("className"), - "color": obj.get("color") if obj.get("color") is not None else 'red', + "color": obj.get("color"), "breed": obj.get("breed") }) # store additional fields in additional_properties diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/enum_test.py b/samples/openapi3/client/petstore/python/petstore_api/models/enum_test.py index d39c2c95775e..fda1c28bc813 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/enum_test.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/enum_test.py @@ -34,15 +34,15 @@ class EnumTest(BaseModel): """ # noqa: E501 enum_string: Optional[StrictStr] = None enum_string_required: StrictStr - enum_integer_default: Optional[StrictInt] = 5 + enum_integer_default: Optional[StrictInt] = None enum_integer: Optional[StrictInt] = None enum_number: Optional[StrictFloat] = None enum_string_single_member: Optional[StrictStr] = None enum_integer_single_member: Optional[StrictInt] = None outer_enum: Optional[OuterEnum] = Field(default=None, alias="outerEnum") outer_enum_integer: Optional[OuterEnumInteger] = Field(default=None, alias="outerEnumInteger") - outer_enum_default_value: Optional[OuterEnumDefaultValue] = Field(default=OuterEnumDefaultValue.PLACED, alias="outerEnumDefaultValue") - outer_enum_integer_default_value: Optional[OuterEnumIntegerDefaultValue] = Field(default=OuterEnumIntegerDefaultValue.NUMBER_0, alias="outerEnumIntegerDefaultValue") + outer_enum_default_value: Optional[OuterEnumDefaultValue] = Field(default=None, alias="outerEnumDefaultValue") + outer_enum_integer_default_value: Optional[OuterEnumIntegerDefaultValue] = Field(default=None, alias="outerEnumIntegerDefaultValue") enum_number_vendor_ext: Optional[EnumNumberVendorExt] = Field(default=None, alias="enumNumberVendorExt") enum_string_vendor_ext: Optional[EnumStringVendorExt] = Field(default=None, alias="enumStringVendorExt") additional_properties: Dict[str, Any] = {} @@ -180,15 +180,15 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "enum_string": obj.get("enum_string"), "enum_string_required": obj.get("enum_string_required"), - "enum_integer_default": obj.get("enum_integer_default") if obj.get("enum_integer_default") is not None else 5, + "enum_integer_default": obj.get("enum_integer_default"), "enum_integer": obj.get("enum_integer"), "enum_number": obj.get("enum_number"), "enum_string_single_member": obj.get("enum_string_single_member"), "enum_integer_single_member": obj.get("enum_integer_single_member"), "outerEnum": obj.get("outerEnum"), "outerEnumInteger": obj.get("outerEnumInteger"), - "outerEnumDefaultValue": obj.get("outerEnumDefaultValue") if obj.get("outerEnumDefaultValue") is not None else OuterEnumDefaultValue.PLACED, - "outerEnumIntegerDefaultValue": obj.get("outerEnumIntegerDefaultValue") if obj.get("outerEnumIntegerDefaultValue") is not None else OuterEnumIntegerDefaultValue.NUMBER_0, + "outerEnumDefaultValue": obj.get("outerEnumDefaultValue"), + "outerEnumIntegerDefaultValue": obj.get("outerEnumIntegerDefaultValue"), "enumNumberVendorExt": obj.get("enumNumberVendorExt"), "enumStringVendorExt": obj.get("enumStringVendorExt") }) diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/foo.py b/samples/openapi3/client/petstore/python/petstore_api/models/foo.py index 81e3839ea17c..3a4a7d91678d 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/foo.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/foo.py @@ -26,7 +26,7 @@ class Foo(BaseModel): """ Foo """ # noqa: E501 - bar: Optional[StrictStr] = 'bar' + bar: Optional[StrictStr] = None additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["bar"] @@ -88,7 +88,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return cls.model_validate(obj) _obj = cls.model_validate({ - "bar": obj.get("bar") if obj.get("bar") is not None else 'bar' + "bar": obj.get("bar") }) # store additional fields in additional_properties for _key in obj.keys(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/object_to_test_additional_properties.py b/samples/openapi3/client/petstore/python/petstore_api/models/object_to_test_additional_properties.py index 097bdd34e2be..c4fc1fdd6ccf 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/object_to_test_additional_properties.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/object_to_test_additional_properties.py @@ -26,7 +26,7 @@ class ObjectToTestAdditionalProperties(BaseModel): """ Minimal object """ # noqa: E501 - var_property: Optional[StrictBool] = Field(default=False, description="Property", alias="property") + var_property: Optional[StrictBool] = Field(default=None, description="Property", alias="property") additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["property"] @@ -88,7 +88,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return cls.model_validate(obj) _obj = cls.model_validate({ - "property": obj.get("property") if obj.get("property") is not None else False + "property": obj.get("property") }) # store additional fields in additional_properties for _key in obj.keys(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/order.py b/samples/openapi3/client/petstore/python/petstore_api/models/order.py index 12dd1ef117d2..a1d2b31a48c7 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/order.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/order.py @@ -32,7 +32,7 @@ class Order(BaseModel): quantity: Optional[StrictInt] = None ship_date: Optional[datetime] = Field(default=None, alias="shipDate") status: Optional[StrictStr] = Field(default=None, description="Order Status") - complete: Optional[StrictBool] = False + complete: Optional[StrictBool] = None additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["id", "petId", "quantity", "shipDate", "status", "complete"] @@ -109,7 +109,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "quantity": obj.get("quantity"), "shipDate": obj.get("shipDate"), "status": obj.get("status"), - "complete": obj.get("complete") if obj.get("complete") is not None else False + "complete": obj.get("complete") }) # store additional fields in additional_properties for _key in obj.keys(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/test_model_with_enum_default.py b/samples/openapi3/client/petstore/python/petstore_api/models/test_model_with_enum_default.py index 4bff5e699a37..c9794cb9fe40 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/test_model_with_enum_default.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/test_model_with_enum_default.py @@ -30,9 +30,9 @@ class TestModelWithEnumDefault(BaseModel): """ # noqa: E501 test_enum: TestEnum test_string: Optional[StrictStr] = None - test_enum_with_default: Optional[TestEnumWithDefault] = TestEnumWithDefault.ZWEI - test_string_with_default: Optional[StrictStr] = 'ahoy matey' - test_inline_defined_enum_with_default: Optional[StrictStr] = 'B' + test_enum_with_default: Optional[TestEnumWithDefault] = None + test_string_with_default: Optional[StrictStr] = None + test_inline_defined_enum_with_default: Optional[StrictStr] = None additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["test_enum", "test_string", "test_enum_with_default", "test_string_with_default", "test_inline_defined_enum_with_default"] @@ -106,9 +106,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "test_enum": obj.get("test_enum"), "test_string": obj.get("test_string"), - "test_enum_with_default": obj.get("test_enum_with_default") if obj.get("test_enum_with_default") is not None else TestEnumWithDefault.ZWEI, - "test_string_with_default": obj.get("test_string_with_default") if obj.get("test_string_with_default") is not None else 'ahoy matey', - "test_inline_defined_enum_with_default": obj.get("test_inline_defined_enum_with_default") if obj.get("test_inline_defined_enum_with_default") is not None else 'B' + "test_enum_with_default": obj.get("test_enum_with_default"), + "test_string_with_default": obj.get("test_string_with_default"), + "test_inline_defined_enum_with_default": obj.get("test_inline_defined_enum_with_default") }) # store additional fields in additional_properties for _key in obj.keys(): diff --git a/samples/openapi3/client/petstore/python/tests/test_model.py b/samples/openapi3/client/petstore/python/tests/test_model.py index 6049def8b885..e5a1bf390c3e 100644 --- a/samples/openapi3/client/petstore/python/tests/test_model.py +++ b/samples/openapi3/client/petstore/python/tests/test_model.py @@ -32,10 +32,10 @@ def setUp(self): def test_cat(self): self.cat = petstore_api.Cat(className="cat") self.assertEqual("cat", self.cat.class_name) - self.assertEqual("red", self.cat.color) + self.assertEqual(None, self.cat.color) cat_str = ("{'additional_properties': {},\n" " 'className': 'cat',\n" - " 'color': 'red',\n" + " 'color': None,\n" " 'declawed': None}") self.assertEqual(cat_str, self.cat.to_str()) @@ -525,7 +525,7 @@ def test_nullable(self): def test_inline_enum_default(self): enum_test = petstore_api.EnumTest(enum_string_required="lower") - self.assertEqual(enum_test.enum_integer_default, 5) + self.assertEqual(enum_test.enum_integer_default, None) def test_object_with_optional_dict(self): # for https://github.com/OpenAPITools/openapi-generator/issues/14913 diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/order.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/order.py index 7a5a38cdb7b4..588280eb3bbd 100644 --- a/samples/server/petstore/python-fastapi/src/openapi_server/models/order.py +++ b/samples/server/petstore/python-fastapi/src/openapi_server/models/order.py @@ -37,7 +37,7 @@ class Order(BaseModel): quantity: Optional[StrictInt] = None ship_date: Optional[datetime] = Field(default=None, alias="shipDate") status: Optional[StrictStr] = Field(default=None, description="Order Status") - complete: Optional[StrictBool] = False + complete: Optional[StrictBool] = None __properties: ClassVar[List[str]] = ["id", "petId", "quantity", "shipDate", "status", "complete"] @field_validator('status') From eb37b1a289f518fbb1c4fb755c7ac23c4d12cf87 Mon Sep 17 00:00:00 2001 From: CatBraaain <84499939+CatBraaain@users.noreply.github.com> Date: Wed, 13 Aug 2025 21:29:53 +0900 Subject: [PATCH 3/3] test: remove default value from `.to_json()` result --- .../client/petstore/python/tests/test_deserialization.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/openapi3/client/petstore/python/tests/test_deserialization.py b/samples/openapi3/client/petstore/python/tests/test_deserialization.py index c8ae1a90c77d..827bfa10813f 100644 --- a/samples/openapi3/client/petstore/python/tests/test_deserialization.py +++ b/samples/openapi3/client/petstore/python/tests/test_deserialization.py @@ -291,7 +291,7 @@ def test_deserialize_animal(self): self.assertTrue(isinstance(deserialized, petstore_api.Cat)) self.assertEqual(deserialized.class_name, "Cat") self.assertEqual(deserialized.declawed, True) - self.assertEqual(deserialized.to_json(), '{"className": "Cat", "color": "red", "declawed": true}') + self.assertEqual(deserialized.to_json(), '{"className": "Cat", "declawed": true}') # test from json json_str = '{"className": "Cat", "color": "red", "declawed": true}'