Skip to content

Enhance OpenAPI Generator Pydantic Models with typings #10

@mridang

Description

@mridang

Title: Enhance OpenAPI Generator Pydantic Models with Explicit __init__ Signatures for Snake‑case Fields


What

Our generated Pydantic models only declare field aliases, not an explicit constructor signature, so MyPy reports errors when consuming code passes snake_case keyword arguments:

Minimal example

# Generated by OpenAPI Generator (no explicit __init__)
class V2SetHumanProfile(BaseModel):
    given_name: Annotated[str, Field(alias="givenName")]
    family_name: Annotated[str, Field(alias="familyName")]
    # … other fields …
# In test or client code:
profile = V2SetHumanProfile(
    given_name="John",
    family_name="Doe",
)
spec/sdk_test.py:35: error: Unexpected keyword argument "given_name" for "V2SetHumanProfile"; did you mean "givenName"?  [call-arg]

At runtime, Pydantic’s populate_by_name=True accepts given_name/family_name, but MyPy only “sees” the aliased fields and so flags the snake_case kwargs as invalid.


Why

  • Improved DX & autocompletion
    Developers expect Python‑style constructor arguments (given_name, not givenName).
  • Stronger static guarantees
    Eliminates the need for # type: ignore[call-arg] or hand‑written stubs.
  • Consistency
    Keeps runtime behavior and static types in sync.

How

  1. Inject explicit __init__ in the generator template
    Update the Jinja2 model template to emit a constructor exposing snake_case names:

  2. (Alternative) Generate .pyi stubs
    Produce companion stub files with explicit __init__ signatures.

  3. Regenerate the SDK & validate

    • Run the generator with the updated template.
    • Confirm constructors accept snake_case args.
    • Verify MyPy passes without ignores.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions