Enum properties with nullable: true don't handle null values
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 58/100
Research direction
Start with the EnumProperty implementation and the generated model from_dict() path described in the issue. Trace how nullable string properties preserve None, then add equivalent handling for nullable enum properties while retaining enum validation. Confirm the reproduction accepts None without raising TypeError and still rejects unexpected non-null values.
Written by the indexing model from the issue text.
Description
Description
When an OpenAPI schema defines an enum property with nullable: true as a property attribute (rather than including null in the enum values), the generated Python code raises TypeError when deserializing null from the API.
OpenAPI Schema
conditionable_type:
type: string
enum:
- AlertField
nullable: true
Expected Behavior
Per OpenAPI v3.0.3 spec:
"If
nullableis true, thennullis allowed as a value regardless of any other constraints."
The generated code should accept None as a valid value.
Actual Behavior
The generated from_dict() method passes None directly to the enum check function, which raises:
TypeError: Unexpected value None. Expected one of {'AlertField'}
Generated Code (v0.28.2)
_conditionable_type = d.pop("conditionable_type", UNSET)
conditionable_type: SomeEnumType | Unset # Missing `| None`
if isinstance(_conditionable_type, Unset):
conditionable_type = UNSET
else:
# Passes None directly to check function - FAILS
conditionable_type = check_some_enum_type(_conditionable_type)
Expected Generated Code
Should be similar to how nullable string properties are handled:
def _parse_conditionable_type(data: object) -> SomeEnumType | None | Unset:
if data is None:
return data
if isinstance(data, Unset):
return data
return check_some_enum_type(data)
conditionable_type = _parse_conditionable_type(d.pop("conditionable_type", UNSET))
Root Cause
The EnumProperty class only checks for null in the enum values list:
unchecked_value_list = [value for value in enum if value is not None]
It does not check for nullable: true as a separate property attribute on the schema.
Related Issues
- #504, #512, #516 - Fixed
nullbeing in the enum values (enum: [value, null]) - This issue is about
nullable: trueas a property attribute (enum: [value]+nullable: true)
Both are valid per OpenAPI spec, but only the first case is currently handled.
Reproduction
Minimal OpenAPI spec:
openapi: "3.0.3"
info:
title: Test
version: "1.0"
paths: {}
components:
schemas:
TestModel:
type: object
properties:
my_enum:
type: string
enum:
- value1
nullable: true
Generate client, then:
from my_client.models import TestModel
TestModel.from_dict({"my_enum": None}) # Raises TypeError
Version
- openapi-python-client: 0.28.2
- Dominant language
- Python
- Stars
- 2k
- Forks
- 293
- Avg merge
- 34m
- Merged PRs (30d)
- 1
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from openapi-generators/openapi-python-client
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
-
Difficulty 3/5 1-2 days Newbie friendliness 72/100
openapi-generators/openapi-python-client#1451 · 1 comment ·
-
Difficulty 3/5 1-2 days Newbie friendliness 52/100
-
Difficulty 3/5 1-2 days Newbie friendliness 64/100
openapi-generators/openapi-python-client#1435 · 1 comment ·
All issues in openapi-generators/openapi-python-client
Similar issues
-
essnmx good first issue
Difficulty 1/5 Under an hour Newbie friendliness 95/100
-
[Feature] 奇物选择添加优先级 Open
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
syfoud/Simulated_Scepter#174 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Giskard-AI/giskard-oss#2840 · 1 comment ·
-
A claim comment carrying the issue number is silently declined while the workflow reports success Openarea: repo bug perceived difficulty: 2
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
yeti-platform/yeti#1380 ·