-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi.py
More file actions
72 lines (60 loc) · 2.01 KB
/
api.py
File metadata and controls
72 lines (60 loc) · 2.01 KB
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
from fastapi import FastAPI, APIRouter
from dotenv import load_dotenv
from sqladmin import Admin
from starlette.middleware.cors import CORSMiddleware
from starlette.middleware.sessions import SessionMiddleware
from apps.api.auth.controller import auth_router
from apps.api.user.controller import user_router
from apps.api.user.admin import UserAdmin
from apps.core.admin import AdminPageAuthentication
from apps.core.lifespan import application_lifespan
from apps.api.health import health_check_router
from apps.application_docs import document_router
from apps.containers import root_container
from apps.core.exception.base import root_exception_handler, RootException
load_dotenv()
# Disable docs_url and lock swagger ui (/swagger)
app = FastAPI(
title="Hoplin FastAPI Template",
description="Hoplin FastAPI Template",
version="0.0.1",
lifespan=application_lifespan,
docs_url=None,
openapi_url="/docs/openapi.json",
)
# Global Dependency Injection
root_container.wire(
packages=["apps.api", "apps.worker", "apps.core.auth", "apps.application_docs"],
)
# Admin Authentication & Admin Page: /admin
app.add_middleware(
SessionMiddleware, secret_key=root_container.config.get("ADMIN_SESSION_SECRET_KEY")
)
admin = Admin(
app=app,
engine=root_container.db().engine,
authentication_backend=AdminPageAuthentication(
secret_key=root_container.config.get("ADMIN_SESSION_SECRET_KEY"),
database=root_container.db(),
),
)
admin.add_view(UserAdmin)
# CORS Setting
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Exception Handler
app.add_exception_handler(RootException, root_exception_handler)
# API Application Entry Route
api_entry = APIRouter(prefix="/api")
# API Router
api_entry.include_router(health_check_router)
api_entry.include_router(user_router)
api_entry.include_router(auth_router)
# Global Application Router
app.include_router(document_router)
app.include_router(api_entry)