Compare commits

..

No commits in common. "b07e02e643b6a26067bce3e6d6d7edbef398ff9b" and "569138530ddfd7a6e8adcb0308e9779a9e7a4af4" have entirely different histories.

2 changed files with 17 additions and 18 deletions

View File

@ -272,7 +272,7 @@ class ConnectionManager:
for lock_key in lock_keys: for lock_key in lock_keys:
self.cell_locks.pop(lock_key, None) self.cell_locks.pop(lock_key, None)
def is_cell_available_for_edit( def is_locked_by_other(
self, self,
con_key: ConnectionKeyEnum, con_key: ConnectionKeyEnum,
user_id: int, user_id: int,
@ -280,10 +280,10 @@ class ConnectionManager:
form_key, form_key,
) -> bool: ) -> bool:
if not cell_key: if not cell_key:
return True return False
cell_key = frozenset(cell_key.items()) cell_key = frozenset(cell_key.items())
lock_owner_id = self.cell_locks.get((con_key, frozenset(form_key.items()), cell_key)) 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 return lock_owner_id is not None and lock_owner_id != user_id
def is_row_locked_by_other( def is_row_locked_by_other(
self, self,
@ -662,7 +662,7 @@ def resolve_cell_key(event_data: dict) -> dict | None:
if not data or "line_id" not in data or "column" not in data: if not data or "line_id" not in data or "column" not in data:
return None return None
return { return {
"line_id": data.get("line_id_code", data["line_id"]), "line_id": data["line_id"],
"column": data["column"], "column": data["column"],
} }
@ -750,7 +750,7 @@ async def process_websocket(
) )
continue continue
case "cell_updated": case "cell_updated":
if not manager.is_cell_available_for_edit( if manager.is_locked_by_other(
con_key=con_key, con_key=con_key,
user_id=user_id, user_id=user_id,
cell_key=cell_key, cell_key=cell_key,
@ -762,18 +762,18 @@ async def process_websocket(
websocket, websocket,
) )
continue continue
# if cell_key and not manager.acquire_cell_lock( if cell_key and not manager.acquire_cell_lock(
# con_key=con_key, con_key=con_key,
# user_id=user_id, user_id=user_id,
# cell_key=cell_key, cell_key=cell_key,
# form_key=kwargs_process, form_key=kwargs_process,
# ): ):
# data["error"] = "Ячейка уже редактируется другим пользователем" data["error"] = "Ячейка уже редактируется другим пользователем"
# await manager.send_back( await manager.send_back(
# data, data,
# websocket, websocket,
# ) )
# continue continue
case "row_deleted": case "row_deleted":
if manager.is_row_locked_by_other( if manager.is_row_locked_by_other(
con_key=con_key, con_key=con_key,

View File

@ -249,7 +249,6 @@ export const RealtimeProvider = ({
event: "cell_updated", event: "cell_updated",
data: { data: {
line_id: lineId, line_id: lineId,
line_id_code: row.id,
column: colId, column: colId,
value: value, value: value,
}, },