124-webapp/main.py

63 lines
1.8 KiB
Python
Raw Normal View History

2025-09-11 16:01:32 +02:00
# main.py
import os
import shutil
from fastapi import FastAPI, UploadFile, File, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
from cost_calculator import allowed_file, analyze_pdf, get_rate_black, get_rate_color, UPLOAD_FOLDER
app = FastAPI()
templates = Jinja2Templates(directory="templates")
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.get("/", response_class=HTMLResponse)
async def welcome(request: Request):
return templates.TemplateResponse("landing.html", {"request": request})
@app.get("/about", response_class=HTMLResponse)
async def about(request: Request):
return templates.TemplateResponse("about.html", {"request": request})
@app.get("/cost", response_class=HTMLResponse)
async def cost_dashboard(request: Request):
return templates.TemplateResponse(
"cost-calculator.html",
{
"request": request,
"rate_black": get_rate_black(),
"rate_color": get_rate_color()
}
)
@app.post("/upload")
async def upload_file(request: Request, file: UploadFile = File(...)):
if not allowed_file(file.filename):
return templates.TemplateResponse(
"cost-calculator.html",
{"request": request, "error": "Unsupported file type. Only PDF allowed."},
)
path = os.path.join(UPLOAD_FOLDER, file.filename)
with open(path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
result = analyze_pdf(path)
return templates.TemplateResponse(
"result.html",
{
"request": request,
"result": result,
"rate_black": get_rate_black(),
"rate_color": get_rate_color()
},
)