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

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

Aberta
#1,405 0 comentários 2 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Linguagem predominante
Python
Estrelas
2k
Forks
293
Merge médio
34min
PRs com merge (30d)
1

Descrição

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

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece pela implementação de EnumProperty e pelo caminho from_dict() do modelo gerado descrito na issue. Rastreie como as propriedades string nullable preservam None e, em seguida, adicione um tratamento equivalente para propriedades enum nullable, mantendo a validação do enum. Confirme que a reprodução aceita None sem gerar TypeError e ainda rejeita valores non-null inesperados.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
python
Domínio
api
Tipo de issue
Bug
Dificuldade
3/5
Tempo estimado
1-2 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
58/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.