feat(projects): automate project infrastructure provisioning
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Any
|
||||
from uuid import UUID
|
||||
@@ -10,7 +9,7 @@ import pandas as pd
|
||||
from app.algorithms.burst_localization import run_burst_location
|
||||
from app.infra.db.postgresql.scada import get_all_scada_info
|
||||
from app.infra.db.timescaledb.internal_queries import InternalQueries
|
||||
from app.native.wndb.inp.exporter import dump_inp
|
||||
from app.services.project_inp import temporary_project_inp
|
||||
from app.services.scheme_management import (
|
||||
get_analysis_run,
|
||||
store_scheme_info,
|
||||
@@ -300,20 +299,20 @@ def run_burst_location_by_network(
|
||||
burst_flow_samples = 1 if burst_flow_series is not None else 0
|
||||
normal_flow_samples = 1 if normal_flow_series is not None else 0
|
||||
|
||||
inp_path = _prepare_burst_inp(network)
|
||||
result = run_burst_location(
|
||||
wn_inp_path=inp_path,
|
||||
pressure_scada_ids=selected_pressure_ids,
|
||||
burst_pressure=burst_pressure_series,
|
||||
normal_pressure=normal_pressure_series,
|
||||
burst_leakage=burst_leakage,
|
||||
flow_scada_ids=selected_flow_ids,
|
||||
burst_flow=burst_flow_series,
|
||||
normal_flow=normal_flow_series,
|
||||
min_dpressure=min_dpressure,
|
||||
basic_pressure=basic_pressure,
|
||||
visualize_partition=False,
|
||||
)
|
||||
with temporary_project_inp(network, purpose="burst-location") as inp_path:
|
||||
result = run_burst_location(
|
||||
wn_inp_path=str(inp_path),
|
||||
pressure_scada_ids=selected_pressure_ids,
|
||||
burst_pressure=burst_pressure_series,
|
||||
normal_pressure=normal_pressure_series,
|
||||
burst_leakage=burst_leakage,
|
||||
flow_scada_ids=selected_flow_ids,
|
||||
burst_flow=burst_flow_series,
|
||||
normal_flow=normal_flow_series,
|
||||
min_dpressure=min_dpressure,
|
||||
basic_pressure=basic_pressure,
|
||||
visualize_partition=False,
|
||||
)
|
||||
|
||||
payload: dict[str, Any] = {
|
||||
**result,
|
||||
@@ -775,16 +774,3 @@ def _normalize_timeseries_by_id(
|
||||
|
||||
def _to_datetime(value: datetime | str) -> datetime:
|
||||
return parse_utc_time(value)
|
||||
|
||||
|
||||
def _prepare_burst_inp(network: str) -> str:
|
||||
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))
|
||||
db_inp_dir = os.path.join(project_root, "db_inp")
|
||||
os.makedirs(db_inp_dir, exist_ok=True)
|
||||
inp_path = os.path.join(db_inp_dir, f"{network}.burst.inp")
|
||||
if os.path.isfile(inp_path) and os.path.getsize(inp_path) > 0:
|
||||
return inp_path
|
||||
dump_inp(network, inp_path, "2")
|
||||
if not os.path.isfile(inp_path) or os.path.getsize(inp_path) <= 0:
|
||||
raise ValueError(f"爆管定位 INP 文件无效: {inp_path}")
|
||||
return inp_path
|
||||
|
||||
Reference in New Issue
Block a user