69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
from typing import Any
|
|
from datetime import datetime
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from pydantic import BaseModel
|
|
|
|
from app.auth.dependencies import get_current_user
|
|
from app.domain.schemas.user import UserInDB
|
|
from app.services.leakage_identifier import (
|
|
get_leakage_identify_scheme_detail,
|
|
list_leakage_identify_schemes,
|
|
run_leakage_identification,
|
|
)
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
class LeakageIdentifyRequest(BaseModel):
|
|
network: str
|
|
observed_pressure_data: str | dict[str, list[Any]] | list[dict[str, Any]] | None = (
|
|
None
|
|
)
|
|
start_time: float = 0
|
|
duration: float = 24
|
|
timestep: float = 5
|
|
q_sum: float = 0.2
|
|
q_sum_unit: str = "m3/s"
|
|
output_dir: str = "db_inp"
|
|
pop_size: int = 50
|
|
max_gen: int = 100
|
|
output_flow_unit: str = "m3/s"
|
|
dma_count: int | None = None
|
|
scada_start: datetime | None = None
|
|
scada_end: datetime | None = None
|
|
sensor_nodes: list[str] | None = None
|
|
scheme_name: str | None = None
|
|
|
|
|
|
@router.post("/identify/")
|
|
async def identify_leakage(
|
|
data: LeakageIdentifyRequest, current_user: UserInDB = Depends(get_current_user)
|
|
) -> dict[str, Any]:
|
|
try:
|
|
return run_leakage_identification(
|
|
**data.model_dump(), username=current_user.username
|
|
)
|
|
except Exception as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc))
|
|
|
|
|
|
@router.get("/schemes/")
|
|
async def query_leakage_schemes(
|
|
network: str, query_date: datetime | None = None
|
|
) -> list[dict[str, Any]]:
|
|
try:
|
|
return list_leakage_identify_schemes(network=network, query_date=query_date)
|
|
except Exception as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc))
|
|
|
|
|
|
@router.get("/schemes/{scheme_name}")
|
|
async def query_leakage_scheme_detail(network: str, scheme_name: str) -> dict[str, Any]:
|
|
try:
|
|
return get_leakage_identify_scheme_detail(
|
|
network=network, scheme_name=scheme_name
|
|
)
|
|
except Exception as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc))
|