299 lines
9.7 KiB
Python
299 lines
9.7 KiB
Python
from .sections import *
|
|
from .database import API_ADD, API_UPDATE, API_DELETE, ChangeSet, DbChangeSet, execute_command
|
|
from .s1_title import set_title_cmd
|
|
from .s2_junctions import set_junction_cmd, add_junction_cmd, delete_junction_cmd
|
|
from .s3_reservoirs import set_reservoir_cmd, add_reservoir_cmd, delete_reservoir_cmd
|
|
from .s4_tanks import set_tank_cmd, add_tank_cmd, delete_tank_cmd
|
|
from .s5_pipes import set_pipe_cmd, add_pipe_cmd, delete_pipe_cmd
|
|
from .s6_pumps import set_pump_cmd, add_pump_cmd, delete_pump_cmd
|
|
from .s7_valves import set_valve_cmd, add_valve_cmd, delete_valve_cmd
|
|
from .s8_tags import set_tag_cmd
|
|
from .s9_demands import set_demand_cmd
|
|
from .s10_status import set_status_cmd
|
|
from .s11_patterns import set_pattern_cmd, add_pattern_cmd, delete_pattern_cmd
|
|
from .s12_curves import set_curve_cmd, add_curve_cmd, delete_curve_cmd
|
|
from .s13_controls import set_control_cmd
|
|
from .s14_rules import set_rule_cmd
|
|
from .s15_energy import set_energy_cmd, set_pump_energy_cmd
|
|
from .s16_emitters import set_emitter_cmd
|
|
from .s17_quality import set_quality_cmd
|
|
from .s18_sources import set_source_cmd, add_source_cmd, delete_source_cmd
|
|
from .s19_reactions import set_reaction_cmd, set_pipe_reaction_cmd, set_tank_reaction_cmd
|
|
from .s20_mixing import set_mixing_cmd, add_mixing_cmd, delete_mixing_cmd
|
|
from .s21_times import set_time_cmd
|
|
#from .s22_report import *
|
|
from .s23_options import set_option_cmd
|
|
#from .s24_coordinates import *
|
|
from .s25_vertices import set_vertex_cmd, add_vertex_cmd, delete_vertex_cmd
|
|
from .s26_labels import set_label_cmd, add_label_cmd, delete_label_cmd
|
|
from .s27_backdrop import set_backdrop_cmd
|
|
# from .s28_end import *
|
|
from .s29_scada_device import set_scada_device_cmd, add_scada_device_cmd, delete_scada_device_cmd
|
|
from .s30_scada_device_data import set_scada_device_data_cmd, add_scada_device_data_cmd, delete_scada_device_data_cmd
|
|
from .s31_scada_element import set_scada_element_cmd, add_scada_element_cmd, delete_scada_element_cmd
|
|
from .del_cmd_raw import del_cascade_cmd
|
|
|
|
|
|
def add_cmd(name: str, cs: ChangeSet) -> DbChangeSet | None:
|
|
type = cs.operations[0]['type']
|
|
|
|
if type == s1_title:
|
|
return None
|
|
if type == s2_junction:
|
|
return add_junction_cmd(name, cs)
|
|
elif type == s3_reservoir:
|
|
return add_reservoir_cmd(name, cs)
|
|
elif type == s4_tank:
|
|
return add_tank_cmd(name, cs)
|
|
elif type == s5_pipe:
|
|
return add_pipe_cmd(name, cs)
|
|
elif type == s6_pump:
|
|
return add_pump_cmd(name, cs)
|
|
elif type == s7_valve:
|
|
return add_valve_cmd(name, cs)
|
|
elif type == s8_tag:
|
|
return None
|
|
elif type == s9_demand:
|
|
return None
|
|
elif type == s10_status:
|
|
return None
|
|
elif type == s11_pattern:
|
|
return add_pattern_cmd(name, cs)
|
|
elif type == s12_curve:
|
|
return add_curve_cmd(name, cs)
|
|
elif type == s13_control:
|
|
return None
|
|
elif type == s14_rule:
|
|
return None
|
|
elif type == s15_energy:
|
|
return None
|
|
elif type == s15_pump_energy:
|
|
return None
|
|
elif type == s16_emitter:
|
|
return None
|
|
elif type == s17_quality:
|
|
return None
|
|
elif type == s18_source:
|
|
return add_source_cmd(name, cs)
|
|
elif type == s19_reaction:
|
|
return None
|
|
elif type == s19_pipe_reaction:
|
|
return None
|
|
elif type == s19_tank_reaction:
|
|
return None
|
|
elif type == s20_mixing:
|
|
return add_mixing_cmd(name, cs)
|
|
elif type == s21_time:
|
|
return None
|
|
elif type == s22_report:
|
|
return None
|
|
elif type == s23_option:
|
|
return None
|
|
elif type == s24_coordinate:
|
|
return None
|
|
elif type == s25_vertex:
|
|
return add_vertex_cmd(name, cs)
|
|
elif type == s26_label:
|
|
return add_label_cmd(name, cs)
|
|
elif type == s27_backdrop:
|
|
return None
|
|
elif type == s28_end:
|
|
return None
|
|
elif type == s29_scada_device:
|
|
return add_scada_device_cmd(name, cs)
|
|
elif type == s30_scada_device_data:
|
|
return add_scada_device_data_cmd(name, cs)
|
|
elif type == s31_scada_element:
|
|
return add_scada_element_cmd(name, cs)
|
|
|
|
return None
|
|
|
|
|
|
def set_cmd(name: str, cs: ChangeSet) -> DbChangeSet | None:
|
|
type = cs.operations[0]['type']
|
|
|
|
if type == s1_title:
|
|
return set_title_cmd(name, cs)
|
|
if type == s2_junction:
|
|
return set_junction_cmd(name, cs)
|
|
elif type == s3_reservoir:
|
|
return set_reservoir_cmd(name, cs)
|
|
elif type == s4_tank:
|
|
return set_tank_cmd(name, cs)
|
|
elif type == s5_pipe:
|
|
return set_pipe_cmd(name, cs)
|
|
elif type == s6_pump:
|
|
return set_pump_cmd(name, cs)
|
|
elif type == s7_valve:
|
|
return set_valve_cmd(name, cs)
|
|
elif type == s8_tag:
|
|
return set_tag_cmd(name, cs)
|
|
elif type == s9_demand:
|
|
return set_demand_cmd(name, cs)
|
|
elif type == s10_status:
|
|
return set_status_cmd(name, cs)
|
|
elif type == s11_pattern:
|
|
return set_pattern_cmd(name, cs)
|
|
elif type == s12_curve:
|
|
return set_curve_cmd(name, cs)
|
|
elif type == s13_control:
|
|
return set_control_cmd(name, cs)
|
|
elif type == s14_rule:
|
|
return set_rule_cmd(name, cs)
|
|
elif type == s15_energy:
|
|
return set_energy_cmd(name, cs)
|
|
elif type == s15_pump_energy:
|
|
return set_pump_energy_cmd(name, cs)
|
|
elif type == s16_emitter:
|
|
return set_emitter_cmd(name, cs)
|
|
elif type == s17_quality:
|
|
return set_quality_cmd(name, cs)
|
|
elif type == s18_source:
|
|
return set_source_cmd(name, cs)
|
|
elif type == s19_reaction:
|
|
return set_reaction_cmd(name, cs)
|
|
elif type == s19_pipe_reaction:
|
|
return set_pipe_reaction_cmd(name, cs)
|
|
elif type == s19_tank_reaction:
|
|
return set_tank_reaction_cmd(name, cs)
|
|
elif type == s20_mixing:
|
|
return set_mixing_cmd(name, cs)
|
|
elif type == s21_time:
|
|
return set_time_cmd(name, cs)
|
|
elif type == s22_report: # no api now
|
|
return None
|
|
elif type == s23_option:
|
|
return set_option_cmd(name, cs)
|
|
elif type == s24_coordinate: # do not support update here
|
|
return None
|
|
elif type == s25_vertex:
|
|
return set_vertex_cmd(name, cs)
|
|
elif type == s26_label:
|
|
return set_label_cmd(name, cs)
|
|
elif type == s27_backdrop:
|
|
return set_backdrop_cmd(name, cs)
|
|
elif type == s28_end: # end
|
|
return None
|
|
elif type == s29_scada_device:
|
|
return set_scada_device_cmd(name, cs)
|
|
elif type == s30_scada_device_data:
|
|
return set_scada_device_data_cmd(name, cs)
|
|
elif type == s31_scada_element:
|
|
return set_scada_element_cmd(name, cs)
|
|
|
|
return None
|
|
|
|
|
|
def del_cmd(name: str, cs: ChangeSet) -> DbChangeSet | None:
|
|
type = cs.operations[0]['type']
|
|
|
|
if type == s1_title:
|
|
return None
|
|
if type == s2_junction:
|
|
return delete_junction_cmd(name, cs)
|
|
elif type == s3_reservoir:
|
|
return delete_reservoir_cmd(name, cs)
|
|
elif type == s4_tank:
|
|
return delete_tank_cmd(name, cs)
|
|
elif type == s5_pipe:
|
|
return delete_pipe_cmd(name, cs)
|
|
elif type == s6_pump:
|
|
return delete_pump_cmd(name, cs)
|
|
elif type == s7_valve:
|
|
return delete_valve_cmd(name, cs)
|
|
elif type == s8_tag:
|
|
return None
|
|
elif type == s9_demand:
|
|
return None
|
|
elif type == s10_status:
|
|
return None
|
|
elif type == s11_pattern:
|
|
return delete_pattern_cmd(name, cs)
|
|
elif type == s12_curve:
|
|
return delete_curve_cmd(name, cs)
|
|
elif type == s13_control:
|
|
return None
|
|
elif type == s14_rule:
|
|
return None
|
|
elif type == s15_energy:
|
|
return None
|
|
elif type == s15_pump_energy:
|
|
return None
|
|
elif type == s16_emitter:
|
|
return None
|
|
elif type == s17_quality:
|
|
return None
|
|
elif type == s18_source:
|
|
return delete_source_cmd(name, cs)
|
|
elif type == s19_reaction:
|
|
return None
|
|
elif type == s19_pipe_reaction:
|
|
return None
|
|
elif type == s19_tank_reaction:
|
|
return None
|
|
elif type == s20_mixing:
|
|
return delete_mixing_cmd(name, cs)
|
|
elif type == s21_time:
|
|
return None
|
|
elif type == s22_report:
|
|
return None
|
|
elif type == s23_option:
|
|
return None
|
|
elif type == s24_coordinate:
|
|
return None
|
|
elif type == s25_vertex:
|
|
return delete_vertex_cmd(name, cs)
|
|
elif type == s26_label:
|
|
return delete_label_cmd(name, cs)
|
|
elif type == s27_backdrop:
|
|
return None
|
|
elif type == s28_end:
|
|
return None
|
|
elif type == s29_scada_device:
|
|
return delete_scada_device_cmd(name, cs)
|
|
elif type == s30_scada_device_data:
|
|
return delete_scada_device_data_cmd(name, cs)
|
|
elif type == s31_scada_element:
|
|
return delete_scada_element_cmd(name, cs)
|
|
|
|
return None
|
|
|
|
|
|
def execute_batch_command(name: str, cs: ChangeSet) -> ChangeSet:
|
|
css: list[DbChangeSet] = []
|
|
|
|
# for delete, generate cascade command
|
|
new_cs = ChangeSet()
|
|
for op in cs.operations:
|
|
if op['operation'] == API_DELETE:
|
|
new_cs.merge(del_cascade_cmd(name, ChangeSet(op)))
|
|
else:
|
|
new_cs.merge(ChangeSet(op))
|
|
|
|
try:
|
|
for op in new_cs.operations:
|
|
operation = op['operation']
|
|
|
|
r = None
|
|
|
|
if operation == API_ADD:
|
|
r = add_cmd(name, ChangeSet(op))
|
|
elif operation == API_UPDATE:
|
|
r = set_cmd(name, ChangeSet(op))
|
|
elif operation == API_DELETE:
|
|
r = del_cmd(name, ChangeSet(op))
|
|
|
|
if r == None:
|
|
print(f'ERROR: Build [{op}] returns None')
|
|
return ChangeSet()
|
|
|
|
css.append(r)
|
|
|
|
except:
|
|
return ChangeSet()
|
|
|
|
try:
|
|
return execute_command(name, DbChangeSet.from_list(css))
|
|
except:
|
|
return ChangeSet()
|