datamodel-code-generator icon indicating copy to clipboard operation
datamodel-code-generator copied to clipboard

Schemas with keywords names are not works

Open mtovt opened this issue 3 years ago • 0 comments
trafficstars

Describe the bug Generator crashing in case of bool keywords in a specification. Also, schema with the name None produces an invalid model code.

To Reproduce Try to generate models by the following specification.

Example schema:

openapi: 3.0.2
info:
  title: My Test API
  description: An API for testing openapi-python-client
  version: 0.1.0
paths:
  /foo:
    delete:
      responses:
        '200':
          description: OK
components:
  schemas:
    None:
      type: object
    false:
      type: object
    True:
      type: object

Used commandline:

$ datamodel-codegen --input ... --output ...

Expected behavior Since OAS is valid, expected valid models with a slightly changed name.

Version:

  • OS: macOS 12.3.1
  • Python version: 3.10.2
  • datamodel-code-generator version: 0.13.0

Additional context Traceback:

Traceback (most recent call last):
  File ".../datamodel-code-generator/datamodel_code_generator/__main__.py", line 541, in main
    generate(
  File ".../datamodel-code-generator/datamodel_code_generator/__init__.py", line 367, in generate
    results = parser.parse()
  File ".../datamodel-code-generator/datamodel_code_generator/parser/base.py", line 449, in parse
    self.parse_raw()
  File ".../datamodel-code-generator/datamodel_code_generator/parser/openapi.py", line 393, in parse_raw
    self.parse_raw_obj(
  File ".../datamodel-code-generator/datamodel_code_generator/parser/jsonschema.py", line 1149, in parse_raw_obj
    self.parse_obj(name, JsonSchemaObject.parse_obj(raw), path)
  File ".../datamodel-code-generator/datamodel_code_generator/parser/jsonschema.py", line 1164, in parse_obj
    self.parse_object(name, obj, path)
  File ".../datamodel-code-generator/datamodel_code_generator/parser/jsonschema.py", line 587, in parse_object
    reference = self.model_resolver.add(
  File ".../datamodel-code-generator/datamodel_code_generator/reference.py", line 476, in add
    name = self.get_class_name(
  File ".../datamodel-code-generator/datamodel_code_generator/reference.py", line 522, in get_class_name
    if '.' in name:
TypeError: argument of type 'bool' is not iterable

Also, if it will work None schema produces the following invalid code:

class None(BaseModel):
    pass

mtovt avatar Jun 24 '22 23:06 mtovt