241 lines
5.5 KiB
Python
241 lines
5.5 KiB
Python
from fastapi import APIRouter, Depends
|
|
|
|
from app.api.v1.endpoints import (
|
|
access,
|
|
admin_metadata,
|
|
agent_auth,
|
|
audit,
|
|
burst_detection,
|
|
burst_location,
|
|
cache,
|
|
extension,
|
|
geocoding,
|
|
leakage,
|
|
meta,
|
|
misc,
|
|
model_import,
|
|
project,
|
|
project_data,
|
|
risk,
|
|
scada,
|
|
schemes,
|
|
sensor_placement,
|
|
simulation,
|
|
snapshots,
|
|
users,
|
|
web_search,
|
|
)
|
|
from app.api.v1.endpoints.components import (
|
|
controls,
|
|
curves,
|
|
options,
|
|
patterns,
|
|
quality,
|
|
visuals,
|
|
)
|
|
from app.api.v1.endpoints.network import (
|
|
demands,
|
|
general,
|
|
geometry,
|
|
junctions,
|
|
pipes,
|
|
pumps,
|
|
regions,
|
|
reservoirs,
|
|
tags,
|
|
tanks,
|
|
valves,
|
|
)
|
|
from app.api.v1.endpoints.timeseries import (
|
|
composite as ts_composite,
|
|
realtime as ts_realtime,
|
|
scada as ts_scada,
|
|
scheme as ts_scheme,
|
|
)
|
|
from app.auth.permissions import (
|
|
BURST_RUN,
|
|
OPTIMIZATION_RUN,
|
|
RISK_RUN,
|
|
SCADA_CLEAN,
|
|
SCADA_VIEW,
|
|
SIMULATION_RUN,
|
|
SIMULATION_VIEW,
|
|
WEBGIS_EDIT,
|
|
WEBGIS_VIEW,
|
|
require_method_permission,
|
|
require_permission,
|
|
)
|
|
|
|
api_router = APIRouter()
|
|
|
|
webgis_access = Depends(
|
|
require_method_permission(
|
|
read_permission=WEBGIS_VIEW,
|
|
write_permission=WEBGIS_EDIT,
|
|
)
|
|
)
|
|
scada_access = Depends(
|
|
require_method_permission(
|
|
read_permission=SCADA_VIEW,
|
|
write_permission=SCADA_CLEAN,
|
|
)
|
|
)
|
|
simulation_access = Depends(
|
|
require_method_permission(
|
|
read_permission=SIMULATION_VIEW,
|
|
write_permission=SIMULATION_RUN,
|
|
)
|
|
)
|
|
|
|
webgis_view_access = Depends(require_permission(WEBGIS_VIEW))
|
|
simulation_run_access = Depends(require_permission(SIMULATION_RUN))
|
|
burst_run_access = Depends(require_permission(BURST_RUN))
|
|
risk_run_access = Depends(require_permission(RISK_RUN))
|
|
optimization_run_access = Depends(require_permission(OPTIMIZATION_RUN))
|
|
|
|
# Core services
|
|
api_router.include_router(access.router, tags=["Access Control"])
|
|
api_router.include_router(agent_auth.router, tags=["Agent Auth"])
|
|
api_router.include_router(
|
|
admin_metadata.router,
|
|
prefix="/admin",
|
|
tags=["Metadata Admin"],
|
|
)
|
|
api_router.include_router(model_import.router, tags=["Model Administration"])
|
|
api_router.include_router(audit.router, prefix="/audit", tags=["Audit Logs"])
|
|
api_router.include_router(meta.router, tags=["Metadata"])
|
|
api_router.include_router(
|
|
project.router,
|
|
tags=["Project"],
|
|
dependencies=[webgis_access],
|
|
)
|
|
|
|
# WebGIS data
|
|
for endpoint_router, tag in (
|
|
(general.router, "Network General"),
|
|
(junctions.router, "Junctions"),
|
|
(reservoirs.router, "Reservoirs"),
|
|
(tanks.router, "Tanks"),
|
|
(pipes.router, "Pipes"),
|
|
(pumps.router, "Pumps"),
|
|
(valves.router, "Valves"),
|
|
(tags.router, "Tags"),
|
|
(demands.router, "Demands"),
|
|
(geometry.router, "Geometry & Coordinates"),
|
|
(regions.router, "Regions & DMAs"),
|
|
(curves.router, "Curves"),
|
|
(patterns.router, "Patterns"),
|
|
(controls.router, "Controls & Rules"),
|
|
(options.router, "Options"),
|
|
(quality.router, "Quality"),
|
|
(visuals.router, "Visuals"),
|
|
):
|
|
api_router.include_router(
|
|
endpoint_router,
|
|
tags=[tag],
|
|
dependencies=[webgis_access],
|
|
)
|
|
|
|
# Simulation and analysis
|
|
api_router.include_router(
|
|
simulation.router,
|
|
tags=["Simulation Control"],
|
|
dependencies=[simulation_run_access],
|
|
)
|
|
api_router.include_router(scada.router, dependencies=[scada_access])
|
|
api_router.include_router(
|
|
sensor_placement.router,
|
|
tags=["Sensor Placement"],
|
|
dependencies=[optimization_run_access],
|
|
)
|
|
api_router.include_router(
|
|
snapshots.router,
|
|
tags=["Snapshots"],
|
|
dependencies=[simulation_access],
|
|
)
|
|
api_router.include_router(
|
|
users.router,
|
|
tags=["Users"],
|
|
dependencies=[webgis_view_access],
|
|
)
|
|
api_router.include_router(
|
|
schemes.router,
|
|
tags=["Schemes"],
|
|
dependencies=[simulation_access],
|
|
)
|
|
api_router.include_router(
|
|
misc.router,
|
|
tags=["Misc"],
|
|
dependencies=[webgis_view_access],
|
|
)
|
|
api_router.include_router(
|
|
risk.router,
|
|
tags=["Risk"],
|
|
dependencies=[risk_run_access],
|
|
)
|
|
api_router.include_router(
|
|
cache.router,
|
|
tags=["Cache"],
|
|
dependencies=[simulation_run_access],
|
|
)
|
|
api_router.include_router(
|
|
web_search.router,
|
|
tags=["Web Search"],
|
|
dependencies=[webgis_view_access],
|
|
)
|
|
api_router.include_router(
|
|
geocoding.router,
|
|
tags=["Geocoding"],
|
|
dependencies=[webgis_view_access],
|
|
)
|
|
api_router.include_router(
|
|
leakage.router,
|
|
prefix="/leakage",
|
|
tags=["Leakage"],
|
|
dependencies=[burst_run_access],
|
|
)
|
|
api_router.include_router(
|
|
burst_detection.router,
|
|
prefix="/burst-detection",
|
|
tags=["Burst Detection"],
|
|
dependencies=[burst_run_access],
|
|
)
|
|
api_router.include_router(
|
|
burst_location.router,
|
|
prefix="/burst-location",
|
|
tags=["Burst Location"],
|
|
dependencies=[burst_run_access],
|
|
)
|
|
|
|
# TimescaleDB data
|
|
for endpoint_router, tag in (
|
|
(ts_realtime.router, "TimescaleDB - Realtime"),
|
|
(ts_scheme.router, "TimescaleDB - Scheme"),
|
|
):
|
|
api_router.include_router(
|
|
endpoint_router,
|
|
tags=[tag],
|
|
dependencies=[simulation_access],
|
|
)
|
|
|
|
for endpoint_router, tag in (
|
|
(ts_scada.router, "TimescaleDB - SCADA"),
|
|
(ts_composite.router, "TimescaleDB - Composite"),
|
|
):
|
|
api_router.include_router(
|
|
endpoint_router,
|
|
tags=[tag],
|
|
dependencies=[scada_access],
|
|
)
|
|
|
|
api_router.include_router(
|
|
project_data.router,
|
|
tags=["Project Data"],
|
|
dependencies=[webgis_view_access],
|
|
)
|
|
api_router.include_router(
|
|
extension.router,
|
|
tags=["Extension"],
|
|
dependencies=[webgis_access],
|
|
)
|