-
Notifications
You must be signed in to change notification settings - Fork 78
Expand file tree
/
Copy path__init__.py
More file actions
69 lines (59 loc) · 1.94 KB
/
__init__.py
File metadata and controls
69 lines (59 loc) · 1.94 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
"""
Sugar-AI application package.
"""
from fastapi import FastAPI
from fastapi.middleware.trustedhost import TrustedHostMiddleware
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
import os
import logging
from app.auth import setup_oauth
from app.config import settings
from app.database import create_tables
# setup logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler("sugar_ai.log"),
logging.StreamHandler()
]
)
logger = logging.getLogger("sugar-ai")
def create_app() -> FastAPI:
app = FastAPI()
# apply middlewares
app = setup_oauth(app)
app.add_middleware(
TrustedHostMiddleware,
allowed_hosts=["localhost", "127.0.0.1", "*"]
)
# Browsers reject allow_credentials + "*", so pin to the explicit list.
app.add_middleware(
CORSMiddleware,
allow_origins=settings.allowed_origins_list,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# ensure DB tables exist
create_tables()
# mount static files
static_dir = "static"
if os.path.exists(static_dir):
app.mount("/static", StaticFiles(directory=static_dir), name="static")
else:
logger.warning(f"Static directory '{static_dir}' does not exist")
# register routers
from app.routes.api import router as api_router
from app.routes.admin import router as admin_router
from app.routes.auth import router as auth_router
from app.routes.web import router as web_router
from app.routes.webhook import router as webhook_router
app.include_router(api_router)
app.include_router(admin_router)
app.include_router(auth_router)
app.include_router(web_router)
app.include_router(webhook_router)
return app