"""Application-facing water-network service boundary. The native WNDB package is organized by responsibility. This module only combines operations that need more than one native module and re-exports the small set of operations used by HTTP and algorithm services. """ from typing import Any import app.infra.epanet as epanet from app.algorithms.water_demand import ( calculate_demand_to_network, calculate_demand_to_nodes, calculate_demand_to_region, ) from app.infra.db.postgresql.scada_assets import ( get_all_scada_info, get_scada_info, get_scada_info_schema, ) from app.native.wndb.commands.api import ( delete_curve_cascade as delete_curve, delete_junction_cascade as delete_junction, delete_pattern_cascade as delete_pattern, delete_pipe_cascade as delete_pipe, delete_pump_cascade as delete_pump, delete_reservoir_cascade as delete_reservoir, delete_tank_cascade as delete_tank, delete_valve_cascade as delete_valve, set_option_ex as set_option, set_option_v3_ex as set_option_v3, ) from app.native.wndb.core.database import ChangeSet, read_all from app.native.wndb.core.projects import ( copy_project, create_project, delete_project, have_project, list_project, ) from app.native.wndb.gis.backdrop import ( get_backdrop, get_backdrop_schema, set_backdrop, ) from app.native.wndb.gis.coordinates import get_node_coord from app.native.wndb.gis.labels import ( add_label, delete_label, get_label, get_label_schema, set_label, ) from app.native.wndb.gis.network_views import ( get_major_node_coords, get_major_pipe_nodes, get_network_link_nodes, get_network_node_coords, ) from app.native.wndb.gis.region_geometry import get_nodes_in_region from app.native.wndb.gis.regions import ( add_region, delete_region, get_region, get_region_schema, set_region, ) from app.native.wndb.gis.vertices import ( add_vertex, delete_vertex, get_all_vertex_links, get_all_vertices, get_vertex, get_vertex_schema, set_vertex, ) from app.native.wndb.inp.exporter import dump_inp, export_inp from app.native.wndb.inp.importer import convert_inp_v3_to_v2, read_inp from app.native.wndb.model.controls import ( get_control, get_control_schema, set_control, ) from app.native.wndb.model.curves import ( add_curve, get_curve, get_curve_schema, set_curve, ) from app.native.wndb.model.demands import get_demand, get_demand_schema, set_demand from app.native.wndb.model.elements import ( get_curves, get_element_type, get_element_type_value, get_link_type, get_links, get_node_links, get_node_type, get_nodes, get_patterns, get_regions, is_curve, is_junction, is_link, is_node, is_pattern, is_pipe, is_pump, is_reservoir, is_tank, is_valve, ) from app.native.wndb.model.emitters import ( get_emitter, get_emitter_schema, set_emitter, ) from app.native.wndb.model.energy import ( get_energy, get_energy_schema, get_pump_energy, get_pump_energy_schema, set_energy, set_pump_energy, ) from app.native.wndb.model.junctions import ( add_junction, get_all_junctions, get_junction, get_junction_schema, set_junction, ) from app.native.wndb.model.mixing import ( add_mixing, delete_mixing, get_mixing, get_mixing_schema, set_mixing, ) from app.native.wndb.model.options import ( OPTION_DEMAND_MODEL_PDA, OPTION_QUALITY_CHEMICAL, get_option, get_option_v3, get_option_v3_schema, ) from app.native.wndb.model.patterns import ( add_pattern, get_pattern, get_pattern_schema, set_pattern, ) from app.native.wndb.model.pipes import ( PIPE_STATUS_OPEN, add_pipe, get_all_pipes, get_pipe, get_pipe_schema, set_pipe, ) from app.native.wndb.model.pumps import ( add_pump, get_all_pumps, get_pump, get_pump_schema, set_pump, ) from app.native.wndb.model.quality import ( get_quality, get_quality_schema, set_quality, ) from app.native.wndb.model.reactions import ( get_pipe_reaction, get_pipe_reaction_schema, get_reaction, get_reaction_schema, get_tank_reaction, get_tank_reaction_schema, set_pipe_reaction, set_reaction, set_tank_reaction, ) from app.native.wndb.model.reservoirs import ( add_reservoir, get_all_reservoirs, get_reservoir, get_reservoir_schema, set_reservoir, ) from app.native.wndb.model.rules import get_rule, get_rule_schema, set_rule from app.native.wndb.model.sources import ( SOURCE_TYPE_SETPOINT, add_source, delete_source, get_source, get_source_schema, set_source, ) from app.native.wndb.model.status import ( get_status, get_status_schema, set_status, ) from app.native.wndb.model.tags import get_tag, get_tag_schema, get_tags, set_tag from app.native.wndb.model.tanks import ( add_tank, get_all_tanks, get_tank, get_tank_schema, set_tank, ) from app.native.wndb.model.times import get_time, get_time_schema, set_time from app.native.wndb.model.title import get_title, get_title_schema, set_title from app.native.wndb.model.valves import ( VALVES_TYPE_PRV, add_valve, get_all_valves, get_valve, get_valve_schema, set_valve, ) def run_project_return_dict(name: str) -> dict[str, Any]: return epanet.run_project_return_dict(name, True) def run_project(name: str) -> str: return epanet.run_project(name) def run_inp(name: str) -> str: return epanet.run_inp(name) def dump_output(path: str) -> str: return epanet.dump_output(path) def get_node_properties(name: str, node_id: str) -> dict[str, Any]: if is_junction(name, node_id): return get_junction(name, node_id) if is_reservoir(name, node_id): return get_reservoir(name, node_id) if is_tank(name, node_id): return get_tank(name, node_id) return {} def get_link_properties(name: str, link_id: str) -> dict[str, Any]: if is_pipe(name, link_id): return get_pipe(name, link_id) if is_pump(name, link_id): return get_pump(name, link_id) if is_valve(name, link_id): return get_valve(name, link_id) return {} def get_element_properties_with_type( name: str, element_type: str, element_id: str ) -> dict[str, Any]: if element_type == "node": return get_node_properties(name, element_id) if element_type == "link": return get_link_properties(name, element_id) if element_type == "scada": return get_scada_info(name, element_id) return {} def get_element_properties(name: str, element_id: str) -> dict[str, Any]: if is_node(name, element_id): return get_node_properties(name, element_id) if is_link(name, element_id): return get_link_properties(name, element_id) return get_scada_info(name, element_id) def get_network_in_extent( name: str, x1: float, y1: float, x2: float, y2: float ) -> dict[str, Any]: # Kept as the existing API placeholder; spatial filtering belongs in GIS. return {}