-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathmain.py
79 lines (59 loc) · 2.14 KB
/
main.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
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import logging
import redis.asyncio as aioredis
import sentry_sdk
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fastapi_limiter import FastAPILimiter
from fastapi_pagination import add_pagination
from sqladmin import Admin
from src.admin.admin import admin_models
from src.admin.authentication_backend import authentication_backend
from src.config import LOGGING_CONFIG, settings
from src.database import engine, redis_pool
from src.routers import routers
# from sentry_sdk.integrations.asyncpg import AsyncPGIntegration
if not settings.ENVIRONMENT == "test":
logging.config.dictConfig(LOGGING_CONFIG)
sentry_sdk.init(
dsn=settings.SENTRY_DSN,
environment=settings.ENVIRONMENT,
# integrations=[
# AsyncPGIntegration(),
# ],
enable_tracing=True,
# Set traces_sample_rate to 1.0 to capture 100%
# of transactions for performance monitoring.
traces_sample_rate=1.0,
# Set profiles_sample_rate to 1.0 to profile 100%
# of sampled transactions.
# We recommend adjusting this value in production.
profiles_sample_rate=1.0,
)
logger = logging.getLogger(__name__)
app = FastAPI()
app.mount("/static", StaticFiles(directory="src/static"), name="static")
admin = Admin(app, engine, authentication_backend=authentication_backend)
for router in routers:
app.include_router(router)
allowed_origins = settings.ALLOWED_ORIGINS.split(",")
app.add_middleware(
CORSMiddleware,
allow_origins=allowed_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
add_pagination(app)
@app.on_event("startup")
async def startup():
logger.info("Application is started")
redis = aioredis.Redis(connection_pool=redis_pool)
await FastAPILimiter.init(redis)
# Error displayed on shutdown (will be fixed in later versions): https://github.com/python/cpython/issues/109538
@app.on_event("shutdown")
async def shutdown_event():
logger.info("Application is closed")
# register admin models
for model in admin_models:
admin.add_view(model)