diff --git a/api/__init__.py b/api/__init__.py index 59c1a33..b5a6b78 100644 --- a/api/__init__.py +++ b/api/__init__.py @@ -4,6 +4,7 @@ from .project import copy_project from .change_set import ChangeSet +from .operation import get_current_operation from .operation import execute_undo as undo from .operation import execute_redo as redo from .operation import have_snapshot, take_snapshot, pick_snapshot diff --git a/api/operation.py b/api/operation.py index ac457f3..ef7e081 100644 --- a/api/operation.py +++ b/api/operation.py @@ -29,7 +29,7 @@ def _get_parents(name: str, id: int) -> list[int]: ids.append(int(cur.fetchone()['parent'])) return ids -def _get_current_operation(name: str) -> int: +def get_current_operation(name: str) -> int: with conn[name].cursor(row_factory=dict_row) as cur: cur.execute(f"select id from current_operation") return int(cur.fetchone()['id']) @@ -40,7 +40,7 @@ def _update_current_operation(name: str, old_id: int, id: int) -> None: def _add_redo_undo(name: str, redo: str, undo: str) -> int: with conn[name].cursor(row_factory=dict_row) as cur: - parent = _get_current_operation(name) + parent = get_current_operation(name) cur.execute(f"insert into operation (id, redo, undo, parent) values (default, '{redo}', '{undo}', {parent})") cur.execute("select max(id) from operation") return int(cur.fetchone()['max']) @@ -73,11 +73,11 @@ def _execute(name: str, sql: str) -> None: def add_operation(name: str, redo: str, undo: str) -> None: curr = _add_redo_undo(name, redo, undo) - old = _get_current_operation(name) + old = get_current_operation(name) _update_current_operation(name, old, curr) def execute_undo(name: str, discard: bool = False) -> None: - curr = _get_current_operation(name) + curr = get_current_operation(name) # transaction control if have_transaction(name): @@ -106,7 +106,7 @@ def execute_undo(name: str, discard: bool = False) -> None: _remove_operation(name, curr) def execute_redo(name: str) -> None: - curr = _get_current_operation(name) + curr = get_current_operation(name) redoChild = _query_redo_child(name, curr) if redoChild == None: print("nothing to redo!") @@ -132,7 +132,7 @@ def take_snapshot(name: str, tag: str) -> None: print('Non empty tag is expected!') return - curr = _get_current_operation(name) + curr = get_current_operation(name) with conn[name].cursor() as cur: cur.execute(f"insert into snapshot_operation (id, tag) values ({curr}, '{tag}')") @@ -146,7 +146,7 @@ def pick_snapshot(name: str, tag: str) -> None: print('No such snapshot!') return - curr = _get_current_operation(name) + curr = get_current_operation(name) curr_parents = _get_parents(name, curr) with conn[name].cursor(row_factory=dict_row) as cur: @@ -192,7 +192,7 @@ def start_transaction(name: str, strict: bool = False) -> None: print("Only support single transaction now, please commit/abort current transaction!") return - curr = _get_current_operation(name) + curr = get_current_operation(name) with conn[name].cursor() as cur: cur.execute(f"insert into transaction_operation (id, strict) values ({curr}, {strict});") @@ -211,7 +211,7 @@ def abort_transaction(name: str) -> None: tran = _get_current_transaction_id(name) - curr = _get_current_operation(name) + curr = get_current_operation(name) curr_parents = _get_parents(name, curr) for i in range(curr_parents.index(tran)): diff --git a/tjnetwork.py b/tjnetwork.py index 589e812..f031b15 100644 --- a/tjnetwork.py +++ b/tjnetwork.py @@ -64,6 +64,9 @@ def copy_project(source: str, new: str) -> None: # operation ############################################################ +def get_current_operation(name: str) -> int: + return api.get_current_operation(name) + def undo(name: str) -> None: return api.undo(name)