synth-net / src /main.py
github-actions
Sync from GitHub (CI)
6ca4b94
from datetime import datetime
from fastapi import FastAPI, Request
from fastapi.staticfiles import StaticFiles
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from starlette.middleware.trustedhost import TrustedHostMiddleware
from src.api.endpoints import demo
from src.api.endpoints import search
from src.config import config
from src.lifespan import lifespan, DEV_MODE
# Import bibliography utilities
from src.utils.bibliography import format_citation, format_bibliography, get_bibtex_entry
app = FastAPI(title=config.app.name, version=config.app.version, lifespan=lifespan)
# Trust HuggingFace Spaces proxy
@app.middleware("http")
async def proxy_headers_middleware(request: Request, call_next):
if "x-forwarded-proto" in request.headers:
request.scope["scheme"] = request.headers["x-forwarded-proto"]
response = await call_next(request)
return response
app.mount("/static", StaticFiles(directory="./public"), name="static")
app.include_router(demo.router, prefix="/api/v1/demo", tags=["demo"])
app.include_router(search.router, prefix="/api/v1/search", tags=["search"])
templates = Jinja2Templates(directory="./src/templates")
templates.env.globals["config"] = config
templates.env.globals["DEV_MODE"] = DEV_MODE
templates.env.globals["current_year"] = datetime.now().year
if DEV_MODE:
templates.env.globals["hot_reload"] = lambda: getattr(app.state, 'hot_reload', None)
else:
templates.env.globals["hot_reload"] = lambda: None
templates.env.filters["cite"] = format_citation
templates.env.filters["bibliography"] = format_bibliography
templates.env.filters["bibtex"] = get_bibtex_entry
@app.get("/", response_class=HTMLResponse)
async def read_root(request: Request):
return templates.TemplateResponse(
"pages/index.jinja", {
"request": request,
"title": "Home",
"search_result": [],
"queries": [],
}
)
@app.get("/demo", response_class=HTMLResponse)
async def read_demo(request: Request):
return templates.TemplateResponse(
"pages/demo/demo.jinja", {"request": request, "title": "Taylor-Russell Model Calculator"}
)