openapi-generators / openapi-generators/openapi-python-client

Enum properties with nullable: true don't handle null values

Open
#1,405 0 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
2k
Forks
293
Avg merge
34m
Merged PRs (30d)
1

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 nullable is true, then null is 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 null being in the enum values (enum: [value, null])
  • This issue is about nullable: true as 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

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

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.

Assessment

Tech stack
python
Domain
api
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
58/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.