Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] [Python-Fastapi] Enum parameters typed as string instead of enum #20180

Open
5 of 6 tasks
reyescabello opened this issue Nov 25, 2024 · 0 comments
Open
5 of 6 tasks

Comments

@reyescabello
Copy link

Bug Report Checklist

  • Have you provided a full/minimal spec to reproduce the issue?
  • Have you validated the input using an OpenAPI validator (example)?
  • Have you tested with the latest master to confirm the issue still exists?
  • Have you searched for related issues/PRs?
  • What's the actual output vs expected output?
  • [Optional] Sponsorship to speed up the bug fix or feature request (example)
Description

When generating a FastAPI endpoint that receives an enum parameter, the value is not properly validated before being passed to the implementation. Currently, the parameter is typed as a string instead of using an enum class, and the enum class is not generated.

openapi-generator version

v7.9.0

OpenAPI declaration file content or url

https://gist.github.com/reyescabello/6cd965708fd0b03e8eadb9f3c0c0a899#file-query_param_example-yml

Generation Details

Generated with jar:

java -jar openapi-generator-cli.jar generate -i openapi.yml -g python-fastapi -o openapi_server

Steps to reproduce

The generated code is:

@router.get(
    "/example",
    responses={
        200: {"model": QuizPaged, "description": "OK"},
        400: {"description": ""},
        401: {"description": ""},
        403: {"description": ""},
        500: {"description": ""},
    },
    tags=["Example"],
    summary="Example endpoint",
    response_model_by_alias=True,
)
async def example_get(
    status: str = Query(None, description="", alias="status"),
) -> QuizPaged:
    
    return await BaseExampleApi.subclasses[0]().example_get(status)

The expected code is something like this:

class StatusEnum(str, Enum):
    CANDIDATE = 'CANDIDATE'
    DRAFT = 'DRAFT'
    COMPLETED = 'COMPLETED'
    REVIEW_REQUIRED = 'REVIEW_REQUIRED'
    WITHDRAWN = 'WITHDRAWN'

@router.get(
    "/example",
    responses={
        200: {"model": QuizPaged, "description": "OK"},
        400: {"description": ""},
        401: {"description": ""},
        403: {"description": ""},
        500: {"description": ""},
    },
    tags=["Example"],
    summary="Example endpoint",
    response_model_by_alias=True,
)
async def example_get(
    status: StatusEnum = Query(None, description="", alias="status"),
) -> QuizPaged:
    
    return await BaseExampleApi.subclasses[0]().example_get(status)
Related issues/PRs

I think this may be related to this other issue about query params typing:

#20115

Suggest a fix
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant