Files
TJWaterServer/api/command.py
2022-10-26 20:42:53 +08:00

221 lines
6.0 KiB
Python

from .s1_title import *
from .s2_junctions import *
from .s3_reservoirs import *
from .s4_tanks import *
from .s5_pipes import *
from .s6_pumps import *
from .s7_valves import *
from .s9_demands import *
from .s10_status import *
from .s11_patterns import *
from .s12_curves import *
from .s16_emitters import *
from .s21_times import *
from .s23_options import *
def execute_add_command(name: str, cs: ChangeSet) -> ChangeSet:
type = cs.operations[0]['type']
if type == JUNCTION:
return add_junction(name, cs)
elif type == RESERVOIR:
return add_reservoir(name, cs)
elif type == TANK:
return add_tank(name, cs)
elif type == PIPE:
return add_pipe(name, cs)
elif type == PUMP:
return add_pump(name, cs)
elif type == VALVE:
return add_valve(name, cs)
return ChangeSet()
def execute_update_command(name: str, cs: ChangeSet) -> ChangeSet:
type = cs.operations[0]['type']
if type == 'title':
return set_title(name, cs)
if type == JUNCTION:
return set_junction(name, cs)
elif type == RESERVOIR:
return set_reservoir(name, cs)
elif type == TANK:
return set_tank(name, cs)
elif type == PIPE:
return set_pipe(name, cs)
elif type == PUMP:
return set_pump(name, cs)
elif type == VALVE:
return set_valve(name, cs)
elif type == 'demand':
return set_demand(name, cs)
elif type == 'status':
return set_status(name, cs)
elif type == PATTERN:
return set_pattern(name, cs)
elif type == CURVE:
return set_curve(name, cs)
elif type == 'emitter':
return set_emitter(name, cs)
elif type == 'time':
return set_time(name, cs)
elif type == 'option':
return set_option(name, cs)
return ChangeSet()
def execute_delete_command(name: str, cs: ChangeSet) -> ChangeSet:
type = cs.operations[0]['type']
if type == JUNCTION:
return delete_junction(name, cs)
elif type == RESERVOIR:
return delete_reservoir(name, cs)
elif type == TANK:
return delete_tank(name, cs)
elif type == PIPE:
return delete_pipe(name, cs)
elif type == PUMP:
return delete_pump(name, cs)
elif type == VALVE:
return delete_valve(name, cs)
return ChangeSet()
def execute_batch_commands(name: str, cs: ChangeSet) -> ChangeSet:
result = ChangeSet()
try:
for op in cs.operations:
operation = op['operation']
if operation == API_ADD:
result.merge(execute_add_command(name, ChangeSet(op)))
elif operation == API_UPDATE:
result.merge(execute_update_command(name, ChangeSet(op)))
elif operation == API_DELETE:
result.merge(execute_delete_command(name, ChangeSet(op)))
except:
pass
return result
def cache_add_command(name: str, cs: ChangeSet) -> SqlChangeSet | None:
type = cs.operations[0]['type']
if type == JUNCTION:
return add_junction_cache(name, cs)
elif type == RESERVOIR:
return add_reservoir_cache(name, cs)
elif type == TANK:
return add_tank_cache(name, cs)
elif type == PIPE:
return add_pipe_cache(name, cs)
elif type == PUMP:
return add_pump_cache(name, cs)
elif type == VALVE:
return add_valve_cache(name, cs)
return None
def cache_update_command(name: str, cs: ChangeSet) -> SqlChangeSet | None:
type = cs.operations[0]['type']
if type == 'title':
return set_title_cache(name, cs)
if type == JUNCTION:
return set_junction_cache(name, cs)
elif type == RESERVOIR:
return set_reservoir_cache(name, cs)
elif type == TANK:
return set_tank_cache(name, cs)
elif type == PIPE:
return set_pipe_cache(name, cs)
elif type == PUMP:
return set_pump_cache(name, cs)
elif type == VALVE:
return set_valve_cache(name, cs)
elif type == 'demand':
return set_demand_cache(name, cs)
elif type == 'status':
return set_status_cache(name, cs)
elif type == PATTERN:
return set_pattern_cache(name, cs)
elif type == CURVE:
return set_curve_cache(name, cs)
elif type == 'emitter':
return set_emitter_cache(name, cs)
elif type == 'time':
return set_time_cache(name, cs)
elif type == 'option':
return set_option_cache(name, cs)
return None
def cache_delete_command(name: str, cs: ChangeSet) -> SqlChangeSet | None:
type = cs.operations[0]['type']
if type == JUNCTION:
return delete_junction_cache(name, cs)
elif type == RESERVOIR:
return delete_reservoir_cache(name, cs)
elif type == TANK:
return delete_tank_cache(name, cs)
elif type == PIPE:
return delete_pipe_cache(name, cs)
elif type == PUMP:
return delete_pump_cache(name, cs)
elif type == VALVE:
return delete_valve_cache(name, cs)
return None
def execute_batch_command(name: str, cs: ChangeSet) -> ChangeSet:
redo_sql_s = []
undo_sql_s = []
redo_cs_s = []
undo_cs_s = []
try:
for op in cs.operations:
operation = op['operation']
r = None
if operation == API_ADD:
r = cache_add_command(name, ChangeSet(op))
elif operation == API_UPDATE:
r = cache_update_command(name, ChangeSet(op))
elif operation == API_DELETE:
r = cache_delete_command(name, ChangeSet(op))
if r == None:
return ChangeSet()
redo_sql_s.append(r.redo_sql)
undo_sql_s.append(r.undo_sql)
redo_cs_s.append(r.redo_cs)
undo_cs_s.append(r.undo_cs)
except:
pass
redo_sql = '\n'.join(redo_sql_s)
undo_sql_s.reverse()
undo_sql = '\n'.join(undo_sql_s)
undo_cs_s.reverse()
try:
return execute_batch(name, redo_sql, undo_sql, redo_cs_s, undo_cs_s)
except:
return ChangeSet()