Endpoints are not created for routes with Pydantic model default values

Offen
#944 1 Kommentar 6 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
45/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
fastapi, python
Bereich
api, devtools

Rechercherichtung

Beginnen Sie in openapi_python_client/parser/properties/union.py etwa bei Zeile 87 und reproduzieren Sie den Fehler mit der bereitgestellten OpenAPI-Spezifikation oder dem FastAPI-Beispiel. Verfolgen Sie, wie der Standardwert der Union validiert wird, und überprüfen Sie anschließend, dass der Endpunkt erfolgreich generiert wird, anstatt weggelassen zu werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Describe the bug
When attempting to generate the client for an endpoint containing a route with a default value represented by a Pydantic model, the client generation fails. Specifically, the issue arises when the default value is set as a Pydantic model, such as the example below:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()
class Cake(BaseModel):
    slices: int

@app.post("/eat_cake")
async def eat_cake(cake: Cake | None = Cake(slices=20)):
    return {"message": f"Eating {cake.slices} slices of cake!"}

The generated client results in the following error message:

Warning(s) encountered while generating. Client was generated, but some pieces may be missing
WARNING parsing POST /graph_study/{customer_name}/distinct_identities/distinct_to_base/eat_cake within default. Endpoint will not be generated.
Value {'slices': 20} is not valid, only None is allowed

This issue is caused by a condition not being met in the union.py file.

To Reproduce

  1. Define a FastAPI app with a route containing a Pydantic model with a default value.
  2. Attempt to generate the client using openapi-python-client version 0.17.2.

OpenAPI Spec File

{
  "openapi": "3.0.2",
  "info": {
    "title": "FastAPI",
    "version": "1.0"
  },
  "paths": {
    "/cake_eater/eat_cake": {
      "post": {
        "summary": "Eat Cake",
        "operationId": "eat_cake_cake_eater___eat_cake_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/Cake"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Cake",
                "default": {
                  "slices": 20
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Cake": {
        "properties": {
          "slices": {
            "type": "integer",
            "title": "Slices"
          }
        },
        "type": "object",
        "required": [
          "slices"
        ],
        "title": "Cake"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      }
    }
  }
}

Desktop (please complete the following information):

  • OS: Windows 11
  • Python Version: 3.11.1
  • openapi-python-client version 0.17.2

Additional context

Vorherrschende Sprache
Python
Sterne
2k
Forks
293
Ø Merge
34 Min.
Gemergte PRs (30 T.)
1

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus openapi-generators/openapi-python-client

Alle Issues in openapi-generators/openapi-python-client

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.