diff --git a/api/s1_title.py b/api/s1_title.py index 2f086c1..3d0e3a3 100644 --- a/api/s1_title.py +++ b/api/s1_title.py @@ -1,13 +1,14 @@ from psycopg.rows import dict_row from .operation import * from .connection import g_conn_dict as conn +from .change_set import ChangeSet def get_title(name: str) -> str: with conn[name].cursor(row_factory=dict_row) as cur: cur.execute(f"select * from title") return cur.fetchone()['value'] -def set_title(name: str, value: str) -> None: +def set_title(name: str, value: str) -> ChangeSet: old = get_title(name) with conn[name].cursor() as cur: @@ -17,3 +18,7 @@ def set_title(name: str, value: str) -> None: redo = sql.replace("'", '"') undo = f'update title set value = "{old}"' add_operation(name, redo, undo) + + change = ChangeSet() + change.update('title', 'null', 'value') + return change diff --git a/api/s2_junctions.py b/api/s2_junctions.py index 79301ce..0c77405 100644 --- a/api/s2_junctions.py +++ b/api/s2_junctions.py @@ -2,8 +2,9 @@ from psycopg.rows import dict_row, Row from .connection import g_conn_dict as conn from .s0_base import * from .operation import * +from .change_set import ChangeSet -def add_junction(name: str, id: str, x: float, y: float, elevation: float) -> None: +def add_junction(name: str, id: str, x: float, y: float, elevation: float) -> ChangeSet: if is_node(name, id): return @@ -19,7 +20,12 @@ def add_junction(name: str, id: str, x: float, y: float, elevation: float) -> No undo += f' delete from _node where id = "{id}";' add_operation(name, redo, undo) -def delete_junction(name: str, id: str) -> None: + change = ChangeSet() + change.add('junction', id) + return change + + +def delete_junction(name: str, id: str) -> ChangeSet: if not is_junction(name, id): return @@ -52,6 +58,11 @@ def delete_junction(name: str, id: str) -> None: undo += f" insert into coordinates (node, coord) values ('{id}', '{coord}');" add_operation(name, redo, undo) + change = ChangeSet() + change.delete('junction', id) + return change + + def _get_junction(name: str, id: str) -> Row | None: with conn[name].cursor(row_factory=dict_row) as cur: cur.execute(f"select elevation, demand, pattern from junctions where id = '{id}'") @@ -91,7 +102,7 @@ def get_junction_coord(name: str, id: str) -> dict[str, float] | None: coord = str(row['coord']) return _to_point(coord) -def set_junction_elevation(name: str, id: str, elevation: float) -> None: +def set_junction_elevation(name: str, id: str, elevation: float) -> ChangeSet: if not is_junction(name, id): return @@ -106,7 +117,12 @@ def set_junction_elevation(name: str, id: str, elevation: float) -> None: undo = f'update junctions set elevation = {old} where id = "{id}"' add_operation(name, redo, undo) -def set_junction_demand(name: str, id: str, demand: float) -> None: + change = ChangeSet() + change.update('junction', id, 'elevation') + return change + + +def set_junction_demand(name: str, id: str, demand: float) -> ChangeSet: if not is_junction(name, id): return @@ -121,7 +137,12 @@ def set_junction_demand(name: str, id: str, demand: float) -> None: undo = f'update junctions set demand = {old} where id = "{id}"' add_operation(name, redo, undo) -def set_junction_pattern(name: str, id: str, pattern: str) -> None: + change = ChangeSet() + change.update('junction', id, 'demand') + return change + + +def set_junction_pattern(name: str, id: str, pattern: str) -> ChangeSet: if not is_junction(name, id): return if not is_pattern(name, id): @@ -140,7 +161,12 @@ def set_junction_pattern(name: str, id: str, pattern: str) -> None: undo = f'update junctions set pattern = {old} where id = "{id}"' add_operation(name, redo, undo) -def set_junction_coord(name: str, id: str, x: float, y: float) -> None: + change = ChangeSet() + change.update('junction', id, 'pattern') + return change + + +def set_junction_coord(name: str, id: str, x: float, y: float) -> ChangeSet: if not is_junction(name, id): return @@ -156,3 +182,7 @@ def set_junction_coord(name: str, id: str, x: float, y: float) -> None: redo = sql.replace("'", '"') undo = f'update coordinates set coord = "({old_x},{old_y})" where node = "{id}"' add_operation(name, redo, undo) + + change = ChangeSet() + change.update('junction', id, 'coord') + return change diff --git a/tjnetwork_new.py b/tjnetwork_new.py index e3661a8..c47d573 100644 --- a/tjnetwork_new.py +++ b/tjnetwork_new.py @@ -1,3 +1,4 @@ +from msilib.schema import CheckBox import api @@ -128,7 +129,7 @@ def get_patterns(name: str) -> list[str]: # title 1.[TITLE] ############################################################ -def set_title(name: str, title: str) -> None: +def set_title(name: str, title: str) -> ChangeSet: return api.set_title(name, title) def get_title(name: str) -> str: @@ -139,10 +140,10 @@ def get_title(name: str) -> str: # junction 2.[JUNCTIONS] ############################################################ -def add_junction(name: str, junction_id: str, x: float, y: float, elevation: float) -> None: +def add_junction(name: str, junction_id: str, x: float, y: float, elevation: float) -> ChangeSet: return api.add_junction(name, junction_id, x, y, elevation) -def delete_junction(name: str, junction_id: str) -> None: +def delete_junction(name: str, junction_id: str) -> ChangeSet: return api.delete_junction(name, junction_id) def get_junction_elevation(name: str, junction_id: str) -> float | None: @@ -157,14 +158,14 @@ def get_junction_pattern(name: str, junction_id: str) -> str | None: def get_junction_coord(name: str, junction_id: str) -> dict[str, float] | None: return api.get_junction_coord(name, junction_id) -def set_junction_elevation(name: str, junction_id: str, elevation: float) -> None: +def set_junction_elevation(name: str, junction_id: str, elevation: float) -> ChangeSet: return api.set_junction_elevation(name, junction_id, elevation) -def set_junction_demand(name: str, junction_id: str, demand: float) -> None: +def set_junction_demand(name: str, junction_id: str, demand: float) -> ChangeSet: return api.set_junction_demand(name, junction_id, demand) -def set_junction_pattern(name: str, junction_id: str, pattern: str) -> None: +def set_junction_pattern(name: str, junction_id: str, pattern: str) -> ChangeSet: return api.set_junction_pattern(name, junction_id, pattern) -def set_junction_coord(name: str, junction_id: str, x: float, y: float) -> None: +def set_junction_coord(name: str, junction_id: str, x: float, y: float) -> ChangeSet: return api.set_junction_coord(name, junction_id, x, y)