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

IndexError: string index out of range from openapi 3.0.0 yaml file

Open bkcsfi opened this issue 4 years ago • 2 comments
trafficstars

Describe the bug When I attempt to use either of the schemas in the attached zip file as --input, I get a traceback

To Reproduce

$ datamodel-codegen --input Parcel-Perform-PublicAPI-OAS3-v5.1.0-derefed.yaml
Traceback (most recent call last):
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/__main__.py", line 531, in main
    use_annotated=config.use_annotated,
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/__init__.py", line 353, in generate
    results = parser.parse()
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/parser/base.py", line 426, in parse
    self.parse_raw()
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/parser/openapi.py", line 388, in parse_raw
    [*path_parts, '#/components', 'schemas', obj_name],
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/parser/jsonschema.py", line 1122, in parse_raw_obj
    self.parse_obj(name, JsonSchemaObject.parse_obj(raw), path)
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/parser/jsonschema.py", line 1137, in parse_obj
    self.parse_object(name, obj, path)
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/parser/jsonschema.py", line 582, in parse_object
    obj, path, get_module_name(class_name, None)
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/parser/jsonschema.py", line 527, in parse_object_fields
    field_type = self.parse_item(modular_name, field, [*path, field_name])
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/parser/jsonschema.py", line 656, in parse_item
    name, item, object_path, singular_name=singular_name
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/parser/jsonschema.py", line 582, in parse_object
    obj, path, get_module_name(class_name, None)
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/parser/jsonschema.py", line 527, in parse_object_fields
    field_type = self.parse_item(modular_name, field, [*path, field_name])
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/parser/jsonschema.py", line 656, in parse_item
    name, item, object_path, singular_name=singular_name
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/parser/jsonschema.py", line 582, in parse_object
    obj, path, get_module_name(class_name, None)
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/parser/jsonschema.py", line 521, in parse_object_fields
    original_field_name, exclude_field_names
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/reference.py", line 571, in get_valid_field_name_and_alias
    field_name, excludes
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/reference.py", line 172, in get_valid_field_name_and_alias
    valid_name = self.get_valid_name(field_name, excludes=excludes)
  File "/home/bkc/.local/pipx/venvs/datamodel-code-generator/lib/python3.7/site-packages/datamodel_code_generator/reference.py", line 152, in get_valid_name
    if name[0].isnumeric():
IndexError: string index out of range

Example schema:

schemas.zip

Used commandline:

$ datamodel-codegen --input Parcel-Perform-PublicAPI-OAS3-v5.1.0-derefed.yaml

Expected behavior

I expect to get a pydantic model

Version:

  • OS: Ubuntu 16
  • Python version: 3.7.10
  • datamodel-code-generator version: 0.11.13

Additional context

installed via pipx

   package datamodel-code-generator 0.11.13, Python 3.7.10
    - activate-global-python-argcomplete
    - datamodel-codegen
    - isort
    - python-argcomplete-check-easy-install-script
    - python-argcomplete-tcsh
    - register-python-argcomplete

bkcsfi avatar Sep 21 '21 17:09 bkcsfi

problem possibly caused by a property name '#' as shown in this fragment below

    nested-field-validation-errors:
      description: Nested field level errors
      type: object
      properties:
        api_response:
          type: string
          minLength: 1
        message:
          type: string
          minLength: 1
        errors:
          type: object
          required:
            - object_name
          properties:
            object_name:
              type: object
              required:
                - '#'
              properties:
                '#':
                  type: object
                  required:
                    - field_name
                  properties:
                    field_name:
                      type: array
                      items: {}

bkcsfi avatar Sep 21 '21 17:09 bkcsfi

@bkcsfi Thank you for creating this issue.

problem possibly caused by a property name '#' as shown in this fragment below

I can reproduce the problem. OK, I will fix it.

koxudaxi avatar Sep 23 '21 16:09 koxudaxi