koxudaxi/datamodel-code-generator

AttributeError: 'NoneType' object has no attribute 'is_list'

comic31 opened this issue · 0 comments

Describe the bug

Fail to generate python code with an array of $ref from an allof, an AttributeError has been raised by the lib.

If this is not a bug, please let me know if I'm doing something wrong.

To Reproduce

Example schema:

    PetOpts:
      type: string
    ProjectedPet:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        tag:
          type: string
        opts:
          type: array
          items:
            $ref: "#/components/schemas/PetOpts"
    Pet:
      allOf:
        - $ref: "#/components/schemas/ProjectedPet"
      required:
          - id
          - name
          - opts

Used commandline:

datamodel-codegen --input api.yaml --output model.py --input-file-type openapi --use-annotated --collapse-root-models  --use-standard-collections --capitalize-enum-members  --target-python-version 3.10 --output-model-type pydantic_v2.BaseModel

Actual behavior

AttributeError: 'NoneType' object has no attribute 'is_list'

Expected behavior

class ProjectedPet(BaseModel):
    id: Optional[int] = None
    name: Optional[str] = None
    tag: Optional[str] = None
    opts: Optional[list[str]] = None


class Pet(ProjectedPet):
    id: int
    name: str
    opts: list[str]

Version:

  • OS: MacOS 14.6.1
  • Python version: 3.11
  • datamodel-code-generator version: 0.25.9

Additional context

The traceback

Traceback (most recent call last):
  File "/Users/user/work/issue-datamodel-code-generator/.venv/lib/python3.11/site-packages/datamodel_code_generator/__main__.py", line 445, in main
    generate(
  File "/Users/user/work/issue-datamodel-code-generator/.venv/lib/python3.11/site-packages/datamodel_code_generator/__init__.py", line 473, in generate
    results = parser.parse()
              ^^^^^^^^^^^^^^
  File "/Users/user/work/issue-datamodel-code-generator/.venv/lib/python3.11/site-packages/datamodel_code_generator/parser/base.py", line 1366, in parse
    self.__collapse_root_models(
  File "/Users/user/work/issue-datamodel-code-generator/.venv/lib/python3.11/site-packages/datamodel_code_generator/parser/base.py", line 1015, in __collapse_root_models
    elif data_type.parent.is_list:
         ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'is_list'