diff --git a/README.md b/README.md index 3baef9e..62656a9 100644 --- a/README.md +++ b/README.md @@ -148,3 +148,62 @@ app = VersionedFastAPI(app, ] ) ``` + + +## APP Decorators + +All app decorators should be decalared after creating a Versioned Fast API object + +```python +from fastapi import FastAPI, Request, Response +from fastapi_versioning import VersionedFastAPI, version +from starlette.middleware import Middleware +from starlette.middleware.sessions import SessionMiddleware + +app = FastAPI( + title='My App', + description='Greet uses with a nice message', + middleware=[ + Middleware(SessionMiddleware, secret_key='mysecretkey') + ] +) + +@app.get('/greet') +@version(1) +def greet(request: Request): + request.session['last_version_used'] = 1 + return 'Hello' + +@app.get('/greet') +@version(2) +def greet(request: Request): + request.session['last_version_used'] = 2 + return 'Hi' + +@app.get('/version') +def last_version(request: Request): + return f'Your last greeting was sent from version {request.session["last_version_used"]}' + +app = VersionedFastAPI(app, + version_format='{major}', + prefix_format='/v{major}', + description='Greet users with a nice message', + middleware=[ + Middleware(SessionMiddleware, secret_key='mysecretkey') + ] +) + +#Startup event +@app.on_event("startup") +async def startup_db_client(): + print("This runs on app Startup") + +#Custom Middlware +@app.middleware("http") +async def get_headers(request: Request, call_next): + from time import process_time + start = process_time() + response: Response = await call_next(request) + response.headers["X-Process-Time"] = str(process_time() - start) + return response +```