-
-
Notifications
You must be signed in to change notification settings - Fork 94
/
Copy pathlifespan.py
33 lines (22 loc) · 798 Bytes
/
lifespan.py
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
from contextlib import asynccontextmanager
from typing import AsyncIterator
import pytest
import sqlalchemy
from fastapi import FastAPI
def lifespan(config):
@asynccontextmanager
async def do_lifespan(_: FastAPI) -> AsyncIterator[None]:
if not config.database.is_connected:
await config.database.connect()
yield
if config.database.is_connected:
await config.database.disconnect()
return do_lifespan
def init_tests(config, scope="module"):
@pytest.fixture(autouse=True, scope=scope)
def create_database():
config.engine = sqlalchemy.create_engine(config.database.url._url)
config.metadata.create_all(config.engine)
yield
config.metadata.drop_all(config.engine)
return create_database