From ee8d66a2ea7b6e5dc99da93ff4effaf0b9028ddd Mon Sep 17 00:00:00 2001 From: tsygankoviva Date: Tue, 14 Jul 2026 13:55:04 +0300 Subject: [PATCH] =?UTF-8?q?line=5Fid=5Fcode=5Ffull:=20=D0=B1=D0=BB=D0=BE?= =?UTF-8?q?=D0=BA=D0=B8=D1=80=D1=83=D0=B5=D0=BC=20=D1=8F=D1=87=D0=B5=D0=B9?= =?UTF-8?q?=D0=BA=D1=83=20=D0=BF=D0=BE=20line=5Fid=5Fcode,=20=D0=BD=D0=B5?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B7=D0=B2=D0=BE=D0=BB=D1=8F=D0=B5=D0=BC=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D1=8F=D1=87=D0=B5=D0=B9=D0=BA=D1=83,=20?= =?UTF-8?q?=D0=B5=D1=81=D0=BB=D0=B8=20=D0=BD=D0=B5=20=D0=B1=D1=8B=D0=BB?= =?UTF-8?q?=D0=BE=20cell=5Fedit=5Fstart?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/src/api/v1/websocket.py | 38 ++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/api/src/api/v1/websocket.py b/api/src/api/v1/websocket.py index 662b57c..776c670 100644 --- a/api/src/api/v1/websocket.py +++ b/api/src/api/v1/websocket.py @@ -272,7 +272,7 @@ class ConnectionManager: for lock_key in lock_keys: self.cell_locks.pop(lock_key, None) - def is_locked_by_other( + def is_cell_available_for_edit( self, con_key: ConnectionKeyEnum, user_id: int, @@ -280,10 +280,12 @@ class ConnectionManager: form_key, ) -> bool: if not cell_key: - return False + print("here we are") + return True cell_key = frozenset(cell_key.items()) lock_owner_id = self.cell_locks.get((con_key, frozenset(form_key.items()), cell_key)) - return lock_owner_id is not None and lock_owner_id != user_id + print(lock_owner_id is not None and lock_owner_id == user_id, user_id, lock_owner_id) + return lock_owner_id is not None and lock_owner_id == user_id def is_row_locked_by_other( self, @@ -662,7 +664,7 @@ def resolve_cell_key(event_data: dict) -> dict | None: if not data or "line_id" not in data or "column" not in data: return None return { - "line_id": data["line_id"], + "line_id": data.get("line_id_code", data["line_id"]), "column": data["column"], } @@ -750,30 +752,32 @@ async def process_websocket( ) continue case "cell_updated": - if manager.is_locked_by_other( + print("updating") + if not manager.is_cell_available_for_edit( con_key=con_key, user_id=user_id, cell_key=cell_key, form_key=kwargs_process, ): + print("not available") data["error"] = "Ячейка уже редактируется другим пользователем" await manager.send_back( data, websocket, ) continue - if cell_key and not manager.acquire_cell_lock( - con_key=con_key, - user_id=user_id, - cell_key=cell_key, - form_key=kwargs_process, - ): - data["error"] = "Ячейка уже редактируется другим пользователем" - await manager.send_back( - data, - websocket, - ) - continue + # if cell_key and not manager.acquire_cell_lock( + # con_key=con_key, + # user_id=user_id, + # cell_key=cell_key, + # form_key=kwargs_process, + # ): + # data["error"] = "Ячейка уже редактируется другим пользователем" + # await manager.send_back( + # data, + # websocket, + # ) + # continue case "row_deleted": if manager.is_row_locked_by_other( con_key=con_key,