diff --git a/api/command.py b/api/command.py index 82d72fb..0c3ae5a 100644 --- a/api/command.py +++ b/api/command.py @@ -149,8 +149,8 @@ def execute_update_command(name: str, cs: ChangeSet) -> ChangeSet: return set_valve(name, cs) elif type == _s8_tag: return set_tag(name, cs) - elif type == _s9_demand: # exception, batch command ... - return ChangeSet() + elif type == _s9_demand: + return set_demand(name, cs) elif type == _s10_status: return set_status(name, cs) elif type == _s11_pattern: diff --git a/api/parser.py b/api/parser.py index f3835f5..32cf36b 100644 --- a/api/parser.py +++ b/api/parser.py @@ -171,6 +171,10 @@ def _read_inp(inp: str) -> ChangeSet: elif name == 'END': pass # :) + # if demand section is empty, fill it with junction data + demands_cs = fill_demand(file_cs['JUNCTIONS'], file_cs['DEMANDS']) + file_cs['DEMANDS'].merge(demands_cs) + # release file file = {} diff --git a/api/s9_demands.py b/api/s9_demands.py index 8a01848..ea46fea 100644 --- a/api/s9_demands.py +++ b/api/s9_demands.py @@ -5,7 +5,7 @@ def get_demand_schema(name: str) -> dict[str, dict[str, Any]]: return { 'junction' : {'type': 'str' , 'optional': False , 'readonly': True }, 'demands' : {'type': 'list' , 'optional': False , 'readonly': False, 'element': { 'demand' : {'type': 'float' , 'optional': False , 'readonly': False }, - 'patten' : {'type': 'str' , 'optional': True , 'readonly': False }, + 'pattern' : {'type': 'str' , 'optional': True , 'readonly': False }, 'category': {'type': 'str' , 'optional': True , 'readonly': False }}}} @@ -120,13 +120,37 @@ def inp_in_demand(section: list[str]) -> ChangeSet: return cs +def fill_demand(junction_cs : ChangeSet, demand_cs : ChangeSet) -> ChangeSet: + cs = ChangeSet() + + for j_cs in junction_cs.operations: + if 'demand' not in j_cs: + continue + + in_demand = False + for d_cs in demand_cs.operations: + if j_cs['id'] == d_cs['junction']: + in_demand = True + break + + if not in_demand: + obj_cs : dict[str, Any] = g_update_prefix | {'type': 'demand', 'junction' : j_cs['id'], 'demands' : []} + j_demand = j_cs['demand'] + j_pattern = j_cs['pattern'] if 'pattern' in j_cs else None + obj_cs['demands'].append({'demand': j_demand, 'pattern' : j_pattern, 'category': None}) + cs.append(obj_cs) + + return cs + + def inp_out_demand(name: str) -> list[str]: lines = [] objs = read_all(name, f"select * from demands order by _order") for obj in objs: junction = obj['junction'] demand = obj['demand'] - patten = obj['patten'] if obj['patten'] != None else '' + pattern = obj['pattern'] if obj['pattern'] != None else '' category = f";{obj['category']}" if obj['category'] != None else ';' - lines.append(f'{junction} {demand} {patten} {category}') + lines.append(f'{junction} {demand} {pattern} {category}') + print(lines[-1]) return lines