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

Attempted to generate duplicate models with name "TypenameFieldnameItem"

Open
#1,375 0 comments 0 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

Describe the bug
I stumbled on a weirdly specific bug that causes the generator to attempt to generate duplicate models.

Apparently we need:

  • a OneOf type (A), which references an Object type (B)
  • An object type (B) with an array-of-object field
  • An Object type (C) for the array-of-object field
  • array-of-C and C must be declared inline inside B

OpenAPI Spec File

This works

openapi: 3.0.3
info:
  title: Minimal example for error "Attempted to generate duplicate models"
  version: 1.0.0

components:
  schemas:
    Result:
      oneOf:
        - $ref: "#/components/schemas/ResultA"
      discriminator:
        propertyName: type
        mapping:
          "A": "#/components/schemas/ResultA"

    ResultA:
      type: object
      properties:
        things:
          type: array
          items:
            $ref: "#/components/schemas/ResultAThingsItem"

    ResultAThingsItem:
      type: object
      properties:
        name:
          type: string

paths:
  /something:
    get:
      summary: Returns a list of users.
      responses:
        '200':
          description: A successful response returning the list of users.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Result'

This should be the same, but doesn't work:

openapi: 3.0.3
info:
  title: Minimal example for error "Attempted to generate duplicate models"
  version: 1.0.0

components:
  schemas:
    Result:
      oneOf:
        - $ref: "#/components/schemas/ResultA"
      discriminator:
        propertyName: type
        mapping:
          "A": "#/components/schemas/ResultA"

    ResultA:
      type: object
      properties:
        things:
          type: array
          items:
            type: object
            properties:
              name:
                type: string

paths:
  /something:
    get:
      summary: Returns a list of users.
      responses:
        '200':
          description: A successful response returning the list of users.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Result'

Output:

$ pipx run openapi-python-client generate --path=example.yaml --overwrite
Generating <...>/minimal-example-for-error-attempted-to-generate-duplicate-models-client
Warning(s) encountered while generating. Client was generated, but some pieces may be missing

WARNING parsing GET /something within default.

Cannot parse response for status code 200 (Could not find reference in parsed models or enums), response will be omitted from generated client

Reference(ref='#/components/schemas/Result')

Unable to process schema /components/schemas/Result:

Attempted to generate duplicate models with name "ResultAThingsItem"

Failure to process schema has resulted in the removal of:
/components/schemas/ResultA
/components/schemas/Result

Schema(title=None, multipleOf=None, maximum=None, exclusiveMaximum=None, minimum=None, exclusiveMinimum=None, maxLength=None, minLength=None, pattern=None, maxItems=None, minItems=None, uniqueItems=None, maxProperties=None, minProperties=None, required=None, enum=None, const=None, type=<DataType.OBJECT: 'object'>, allOf=[], oneOf=[], anyOf=[], schema_not=None, items=None, prefixItems=[], properties={'name': Schema(title=None, multipleOf=None, maximum=None, exclusiveMaximum=None, minimum=None, exclusiveMinimum=None, maxLength=None, minLength=None, pattern=None, maxItems=None, minItems=None, uniqueItems=None, maxProperties=None, minProperties=None, required=None, enum=None, const=None, type=<DataType.STRING: 'string'>, allOf=[], oneOf=[], anyOf=[], schema_not=None, items=None, prefixItems=[], properties=None, additionalProperties=None, description=None, schema_format=None, default=None, nullable=False, discriminator=None, readOnly=None, writeOnly=None, xml=None, externalDocs=None, example=None, deprecated=None)}, additionalProperties=None, description=None, schema_format=None, default=None, nullable=False, discriminator=None, readOnly=None, writeOnly=None, xml=None, externalDocs=None, example=None, deprecated=None)

If you believe this was a mistake or this tool is missing a feature you need, please open an issue at https://github.com/openapi-generators/openapi-python-client/issues/new/choose



**Desktop (please complete the following information):**
 - OS: Ubuntu 25.04
 - Python Version: 3.12.3
 - openapi-python-client version: 0.28.0

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 by running openapi-python-client generate --path=example.yaml --overwrite with the two schemas in the issue, then trace the model-generation entry point that handles the inline array item and the referenced model. Done means the inline form no longer reports a duplicate ResultAThingsItem model and the GET response is retained in the generated client.

Written by the indexing model from the issue text.

Assessment

Tech stack
openapi, python
Domain
api, tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.