An unexpected model is generated when server returns dictionary

Ouverte
#610 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
38/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
fastapi, python
Domaine
api, tooling

Piste de recherche

Commencez par reproduire la route FastAPI get_clipon_metadata_by_clip_name_list avec response_model=Dict[str, CliponMetadata] et inspectez le modèle de réponse généré ainsi que les additional_properties analysées. Comparez cela avec le cas de réponse List[CliponMetadata]. C’est terminé lorsque les réponses de type dictionary génèrent le modèle CliponMetadata attendu sans le modèle wrapper au nom inutilement long.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

🐞bug

Describe the bug
I have a web API implementer with fastAPI. I have a function that make a POST request to the server I work with. This function returns dictionary that maps string to an object called "Clipon".

@router.get("/clipon/{version}", tags=["clipon"], status_code=status.HTTP_200_OK, response_model=Dict[str, CliponMetadata])
async def get_clipon_metadata_by_clip_name_list(version: str, clip_list: List[str]):
    try:
        res = await db_client.get_by_clip_name_list(clip_list=clip_list, version=version)
    except AssertionError as ex:
        raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(ex))
    return {clip.clip_name: clip for clip in res}

When generating the models with openapi-python-client, what is generated is a model names "clipon_metadata" (as expected), and also another unexpected model with a long name:
image
It's full name is "GetCliponMetadataByClipNameListCliponVersionPostResponseGetCliponMetadataByClipNameListCliponVersionPost".

I don't understand why this model is created. For example, when I change this function to return List[CliponMetadata], only the "clipon_metadata" model is created.

In this behavior, when the client make this POST request, what it gets is A response object (also generated automatically), which in it's "parsed" attribute contains the unwanted object, and the "additional_properties" attribute of "parsed" holds the desired dictionary:

image

Expected behavior
I'd like that only the "clipon"metadata" model will be generated.

Desktop:

  • OS: Linux (Ubuntu)
  • Python Version: 3.9.1
  • openapi-python-client version: 0.11.1
Langage dominant
Python
Étoiles
2k
Forks
293
Merge moyen
34 min
PR mergées (30 j)
1

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de openapi-generators/openapi-python-client

Toutes les issues de openapi-generators/openapi-python-client

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.