Skip to main content

Manipulate requests before FastAPI processes them, and responses once finished.

Project description

Routes Manager for FastAPI

Manipulate requests before FastAPI processes them (even before middlewares), and responses once finished.

Installation

$ pip install fastapi-routesmanager

Example

Using example HeadersLogger from this package.

from typing import Union

from fastapi import FastAPI

from fastapi_routesmanager import HeadersLogger, RouteManagersRegistry, ManagedAPIRouter
import logging

logging.basicConfig(level=logging.DEBUG)  # Needed to get DEBUG output

RouteManagersRegistry.register_route_manager(HeadersLogger)  # Register manager

app = FastAPI()

router = ManagedAPIRouter()


@router.get("/")  # Use router instead of app
def read_root():
    return {"Hello": "World"}


@router.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}


app.include_router(router)  # Include the router to the app
Or you can register multiple managers at once
RouteManagersRegistry.register_route_managers([
    HeadersLogger,
    ExceptionLogger
])

Run it

$ uvicorn main:app --reload

Check it

Browse to http://127.0.0.1:8000 and check the server console. You should see something like this showing the headers

# DEBUG:headers_logger:Requests headers: Headers({'host': 'localhost:8000', 'user-agent': 'Mozilla Firefox', 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'accept-language': 'es-AR,es;q=0.8,en-US;q=0.5,en;q=0.3', 'accept-encoding': 'gzip', 'dnt': '1', 'connection': 'keep-alive', 'upgrade-insecure-requests': '1', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none'})
# DEBUG:headers_logger:Response headers: MutableHeaders({'content-length': '17', 'content-type': 'application/json'})
# INFO:     127.0.0.1:49370 - "GET /1 HTTP/1.1" 200 OK

Creating custom Manager

In order to create a custom manager you need to extend RouteManager and declare an async def run(...) method.

Within this method you can access the request, execute it and get the response.

from fastapi_routesmanager import RouteManager
from starlette.requests import Request
from starlette.responses import Response
from typing import Callable, List, Type, Optional


class CustomManager(RouteManager):
    async def run(
            self,
            request: Request,
            call_next: Callable,
            remaining_managers: List[Type[RouteManager]],
    ) -> Optional[Response]:
        # This will run the request through FastAPI  
        response: Response = await call_next(request, remaining_managers)
        return response

In the remaining_managers list you will find all remaining managers to be run. You can modify this list to add or remove managers dynamically.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastapi_routesmanager-0.0.3.tar.gz (3.7 kB view details)

Uploaded Source

Built Distribution

fastapi_routesmanager-0.0.3-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

File details

Details for the file fastapi_routesmanager-0.0.3.tar.gz.

File metadata

  • Download URL: fastapi_routesmanager-0.0.3.tar.gz
  • Upload date:
  • Size: 3.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for fastapi_routesmanager-0.0.3.tar.gz
Algorithm Hash digest
SHA256 ef2a258c0c70061de03a982c01f463d63d15e76eea114a20e9a1ac6759d96b8d
MD5 c01322f4fb60b1dee263a2ab25e7a221
BLAKE2b-256 c273118fdfb80eb93be64e5efdaa9a3630e9e916f9017732f4e4ca1b522cf4ea

See more details on using hashes here.

File details

Details for the file fastapi_routesmanager-0.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_routesmanager-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2f7055c702c1883442b1985b10454cd5dc68866962a3c568f39b11333ace86a9
MD5 c53ddcac33435bb8bc8f60a05c79762b
BLAKE2b-256 996f780038c28bbc788d60751e4c59219bc59ab914530b8964f0ec5465d4e321

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page