-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfactory.py
More file actions
43 lines (31 loc) · 1.33 KB
/
Copy pathfactory.py
File metadata and controls
43 lines (31 loc) · 1.33 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
"""Montagem do FastAPI: lifespan, templates com path absoluto, routers."""
from __future__ import annotations
import logging
from contextlib import asynccontextmanager
from pathlib import Path
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from api.routes import router
from app.state import AppServices
log = logging.getLogger("kernelbots.app")
def create_app(services: AppServices) -> FastAPI:
templates_dir = Path(__file__).resolve().parent.parent / "templates"
templates = Jinja2Templates(directory=str(templates_dir))
@asynccontextmanager
async def lifespan(app: FastAPI):
log.info("🚀 ACL iniciado e pronto para receber requisições.")
yield
log.info("🛑 Servidor finalizado.")
app = FastAPI(title="ACL — Agente de Contexto Local", lifespan=lifespan)
app.state.services = services
app.state.templates = templates
frontend_dir = Path(__file__).resolve().parent.parent / "frontend"
assets_dir = frontend_dir / "assets"
src_dir = frontend_dir / "src"
if assets_dir.is_dir():
app.mount("/assets", StaticFiles(directory=str(assets_dir)), name="assets")
if src_dir.is_dir():
app.mount("/src", StaticFiles(directory=str(src_dir)), name="src")
app.include_router(router)
return app