pythonasyncioapiasyncfastapiframeworkjsonjson-schemaopenapiopenapi3pydanticpython-typespython3redocreststarletteswaggerswagger-uiuvicornweb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
739 B
42 lines
739 B
from typing import Any
|
|
|
|
from fastapi import UploadFile
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class BasePayload(BaseModel):
|
|
kind: str
|
|
|
|
|
|
class FooPayload(BasePayload):
|
|
kind: str = "foo"
|
|
extra_foo: str
|
|
|
|
|
|
class BarPayload(BasePayload):
|
|
kind: str = "bar"
|
|
extra_bar: str
|
|
|
|
|
|
class FooFilePayload(BasePayload):
|
|
kind: str = "foo"
|
|
extra_foo: str
|
|
blob: UploadFile
|
|
|
|
|
|
class BarFilePayload(BasePayload):
|
|
kind: str = "bar"
|
|
extra_bar: str
|
|
blob: UploadFile
|
|
|
|
|
|
def openapi_request_body_schema_ref(
|
|
schema: dict[str, Any],
|
|
*,
|
|
path: str,
|
|
method: str = "post",
|
|
content_type: str,
|
|
) -> str:
|
|
return schema["paths"][path][method]["requestBody"]["content"][content_type][
|
|
"schema"
|
|
]["$ref"]
|
|
|