Skip to content

Instantly share code, notes, and snippets.

@encryptblockr
Forked from md2perpe/.gitignore
Created August 21, 2021 17:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save encryptblockr/a2d80adb6a3aa80e7fff137d128113e1 to your computer and use it in GitHub Desktop.
Save encryptblockr/a2d80adb6a3aa80e7fff137d128113e1 to your computer and use it in GitHub Desktop.
StackOverflow 64497615
from fastapi import FastAPI, Request
from pydantic import BaseModel
class SampleModel(BaseModel):
name: str
age: int
app = FastAPI()
def do_something_with_request_object(request: Request):
print(request)
def auth_required(handler):
async def wrapper(request: Request, *args, **kwargs):
do_something_with_request_object(request)
return await handler(*args, **kwargs)
# Fix signature of wrapper
import inspect
wrapper.__signature__ = inspect.Signature(
parameters = [
# Use all parameters from handler
*inspect.signature(handler).parameters.values(),
# Skip *args and **kwargs from wrapper parameters:
*filter(
lambda p: p.kind not in (inspect.Parameter.VAR_POSITIONAL, inspect.Parameter.VAR_KEYWORD),
inspect.signature(wrapper).parameters.values()
)
],
return_annotation = inspect.signature(handler).return_annotation,
)
return wrapper
@app.post("/")
@auth_required # Custom decorator
async def root(payload: SampleModel):
return {"message": f"Hello {payload.name}, {payload.age} years old!"}
venv/:
python3 -m venv venv
. venv/bin/activate && \
pip install --upgrade pip && \
pip install uvicorn pydantic fastapi
.PHONY: run
run: venv/
. venv/bin/activate && \
uvicorn --host 0.0.0.0 --port 8000 main:app
.PHONY: clean
clean:
rm -rf venv/
POST http://localhost:8000/
{
"name": "Douglas Adams",
"age": 42
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment