File size: 1,853 Bytes
bbfde3f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
from typing import Annotated, Any, Callable

from annotated_doc import Doc
from starlette.background import BackgroundTasks as StarletteBackgroundTasks
from typing_extensions import ParamSpec

P = ParamSpec("P")


class BackgroundTasks(StarletteBackgroundTasks):
    """

    A collection of background tasks that will be called after a response has been

    sent to the client.



    Read more about it in the

    [FastAPI docs for Background Tasks](https://fastapi.tiangolo.com/tutorial/background-tasks/).



    ## Example



    ```python

    from fastapi import BackgroundTasks, FastAPI



    app = FastAPI()





    def write_notification(email: str, message=""):

        with open("log.txt", mode="w") as email_file:

            content = f"notification for {email}: {message}"

            email_file.write(content)





    @app.post("/send-notification/{email}")

    async def send_notification(email: str, background_tasks: BackgroundTasks):

        background_tasks.add_task(write_notification, email, message="some notification")

        return {"message": "Notification sent in the background"}

    ```

    """

    def add_task(

        self,

        func: Annotated[

            Callable[P, Any],

            Doc(

                """

                The function to call after the response is sent.



                It can be a regular `def` function or an `async def` function.

                """

            ),

        ],

        *args: P.args,

        **kwargs: P.kwargs,

    ) -> None:
        """

        Add a function to be called in the background after the response is sent.



        Read more about it in the

        [FastAPI docs for Background Tasks](https://fastapi.tiangolo.com/tutorial/background-tasks/).

        """
        return super().add_task(func, *args, **kwargs)