Created
June 22, 2019 07:33
-
-
Save Atheuz/075f4d8fe3b56d034741301ba2574ef1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from fastapi import FastAPI, Depends, Query | |
from starlette.requests import Request | |
from starlette.responses import JSONResponse | |
import starlette.status | |
from pydantic import BaseModel, validator | |
import datetime | |
from typing import List | |
from dataclasses import dataclass, field | |
app = FastAPI( | |
title="testapi", | |
version="1.0.0", | |
openapi_url="/api/v1/openapi.json", | |
docs_url="/api/v1/docs", | |
redoc_url="/api/v1/redocs", | |
) | |
@dataclass | |
class DataclassArgs: | |
dt: datetime.datetime = ... | |
to_sum: List[int] = Query(None) | |
@app.get("/api/v1/ping_dataclass", tags=["basic"]) | |
def ping_dataclass(args: DataclassArgs = Depends(DataclassArgs)): | |
"""Args defined in a dataclass. Works.""" | |
return JSONResponse( | |
status_code=starlette.status.HTTP_200_OK, | |
content={"detail": "pong", "dt": args.dt.isoformat(), "summed": sum(x for x in args.to_sum) if args.to_sum else 0}, | |
) | |
class PydanticArgs(BaseModel): | |
dt: datetime.datetime = ... | |
to_sum: List[int] = Query(None) | |
@app.get("/api/v1/ping_pydantic", tags=["basic"]) | |
def ping_pydantic(args: PydanticArgs = Depends(PydanticArgs)): | |
"""Args defined in a pydantic model. Does not work.""" | |
return JSONResponse( | |
status_code=starlette.status.HTTP_200_OK, | |
content={"detail": "pong", "dt": args.dt.isoformat(), "summed": sum(x for x in args.to_sum) if args.to_sum else 0}, | |
) | |
class ClassArgs: | |
def __init__(self, dt: datetime.datetime, to_sum: List[int] = Query(None)): | |
self.dt = dt | |
self.to_sum = to_sum | |
@app.get("/api/v1/ping_class", tags=["basic"]) | |
def ping_class(args: ClassArgs = Depends(ClassArgs)): | |
"""Args defined in a class. Works.""" | |
return JSONResponse( | |
status_code=starlette.status.HTTP_200_OK, | |
content={"detail": "pong", "dt": args.dt.isoformat(), "summed": sum(x for x in args.to_sum) if args.to_sum else 0}, | |
) | |
@app.get("/api/v1/ping_params", tags=["basic"]) | |
def ping_params(dt: datetime.datetime, to_sum: List[int] = Query(None)): | |
"""Args defined in argument list. Works.""" | |
return JSONResponse( | |
status_code=starlette.status.HTTP_200_OK, | |
content={"detail": "pong", "dt": dt.isoformat(), "summed": sum(x for x in to_sum) if to_sum else 0}, | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment