Using Background Tasks Middleware

Example

from apidaora import (
    BackgroundTaskMiddleware,
    Middlewares,
    Response,
    appdaora,
    route,
    text,
)


class HelloCounter:
    counter = 1

    @classmethod
    def count(cls) -> None:
        cls.counter += 1


@route.get('/background-tasks')
async def background_tasks_controller(name: str) -> Response:
    return text(
        f'Hello {name}!\n{name} are the #{HelloCounter.counter}!',
        background_tasks=HelloCounter.count,
    )


app = appdaora(
    background_tasks_controller,
    middlewares=Middlewares(post_execution=BackgroundTaskMiddleware()),
)

Running

Running the server:

uvicorn myapp:app
INFO: Started server process [16220]
INFO: Waiting for application startup.
INFO: ASGI 'lifespan' protocol appears unsupported.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

Quering the server

curl -i localhost:8000/background-tasks?name=Me
echo && echo
curl -i localhost:8000/background-tasks?name=You
HTTP/1.1 200 OK
date: Thu, 1st January 1970 00:00:00 GMT
server: uvicorn
content-type: text/plain
content-length: 24

Hello Me!
Me are the #1!

HTTP/1.1 200 OK
date: Thu, 1st January 1970 00:00:00 GMT
server: uvicorn
content-type: text/plain
content-length: 26

Hello You!
You are the #2!