Implement distribution management API and UI forms; add distribution model and tests

This commit is contained in:
2025-10-20 18:51:23 +02:00
parent 4533a4c166
commit 0b19a93e0d
10 changed files with 229 additions and 2 deletions

44
routes/distributions.py Normal file
View File

@@ -0,0 +1,44 @@
from fastapi import APIRouter, HTTPException, Depends
from sqlalchemy.orm import Session
from typing import List
from pydantic import BaseModel
from config.database import SessionLocal
from models.distribution import Distribution
router = APIRouter(prefix="/api/distributions", tags=["Distributions"])
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
class DistributionCreate(BaseModel):
name: str
distribution_type: str
parameters: dict
class DistributionRead(DistributionCreate):
id: int
class Config:
orm_mode = True
@router.post("/", response_model=DistributionRead)
async def create_distribution(dist: DistributionCreate, db: Session = Depends(get_db)):
db_dist = Distribution(**dist.dict())
db.add(db_dist)
db.commit()
db.refresh(db_dist)
return db_dist
@router.get("/", response_model=List[DistributionRead])
async def list_distributions(db: Session = Depends(get_db)):
dists = db.query(Distribution).all()
return dists

20
routes/ui.py Normal file
View File

@@ -0,0 +1,20 @@
from fastapi import APIRouter, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
router = APIRouter()
# Set up Jinja2 templates directory
templates = Jinja2Templates(directory="templates")
@router.get("/ui/scenarios", response_class=HTMLResponse)
async def scenario_form(request: Request):
"""Render the scenario creation form."""
return templates.TemplateResponse("ScenarioForm.html", {"request": request})
@router.get("/ui/parameters", response_class=HTMLResponse)
async def parameter_form(request: Request):
"""Render the parameter input form."""
return templates.TemplateResponse("ParameterInput.html", {"request": request})