Skip to content

Commit de328d0

Browse files
committed
Apply suggestions and update test
1 parent 1cac496 commit de328d0

File tree

3 files changed

+28
-63
lines changed

3 files changed

+28
-63
lines changed

src/ypywidgets/comm.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,16 +103,6 @@ def __init__(
103103
def awareness(self) -> Awareness:
104104
return self._comm_provider.awareness
105105

106-
def on_awareness_change(
107-
self,
108-
callback: Callable[[str, tuple[dict[str, Any], Any]], None],
109-
) -> str:
110-
"""Subscribe to pycrdt Awareness updates; returns subscription id for unobserve."""
111-
return self.awareness.observe(callback)
112-
113-
def unobserve_awareness(self, subscription_id: str) -> None:
114-
self.awareness.unobserve(subscription_id)
115-
116106
def _repr_mimebundle_(self, *args, **kwargs): # pragma: nocover
117107
plaintext = repr(self)
118108
if len(plaintext) > 110:

tests/conftest.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ def __init__(
112112
self.local_widget_factory, self.remote_widget_factory = widget_factories
113113
self.local_widget: CommWidget | None = None
114114
self.remote_widget: Widget | None = None
115-
self.remote_awareness: Awareness | None = None
116115
self.local_widget_created = Event()
117116
self.remote_widget_created = Event()
118117
self._remote_awareness: Awareness | None = None

tests/test_comm_awareness.py

Lines changed: 28 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,49 @@
11
from __future__ import annotations
22

3-
from unittest.mock import patch
4-
53
import pytest
64
from anyio import sleep
7-
from pycrdt import Doc, YMessageType, create_awareness_message
8-
9-
from ypywidgets.comm import CommProvider, CommWidget
5+
from pycrdt import Awareness, Doc, YMessageType, create_awareness_message
106

117
pytestmark = pytest.mark.anyio
128

139

14-
class DummyComm:
15-
def __init__(self):
16-
self.sent: list[bytes] = []
17-
self._handler = None
18-
19-
def send(self, *, buffers=None, **kwargs):
20-
if buffers:
21-
self.sent.append(bytes(memoryview(buffers[0])))
22-
23-
def on_msg(self, handler):
24-
self._handler = handler
25-
26-
27-
def test_comm_provider_applies_awareness_frame():
28-
doc = Doc()
29-
comm = DummyComm()
30-
provider = CommProvider(doc, comm)
31-
32-
awareness = provider.awareness
33-
awareness.set_local_state({"role": "tester"})
34-
payload = awareness.encode_awareness_update([awareness.client_id])
35-
frame = create_awareness_message(payload)
36-
37-
assert frame[0] == YMessageType.AWARENESS
10+
async def test_comm_provider_applies_awareness_frame(synced_widgets, context):
11+
async with context:
12+
local_widget = await synced_widgets.get_local_widget()
13+
remote_awareness = Awareness(Doc())
14+
remote_awareness.set_local_state({"role": "remote"})
15+
payload = remote_awareness.encode_awareness_update([remote_awareness.client_id])
16+
frame = create_awareness_message(payload)
3817

39-
provider._receive({"buffers": [frame]})
18+
assert frame[0] == YMessageType.AWARENESS
4019

41-
state = awareness.get_local_state()
42-
assert state is not None
43-
assert state.get("role") == "tester"
20+
local_widget._comm_provider._receive({"buffers": [frame]})
4421

22+
remote_state = local_widget.awareness.states.get(remote_awareness.client_id)
23+
assert remote_state is not None
24+
assert remote_state.get("role") == "remote"
4525

46-
@patch("ypywidgets.comm.create_widget_comm")
47-
def test_comm_widget_exposes_provider_awareness(mock_create_comm):
48-
comm = DummyComm()
49-
mock_create_comm.return_value = comm
5026

51-
widget = CommWidget()
52-
assert widget.awareness is widget._comm_provider.awareness
27+
async def test_comm_widget_exposes_provider_awareness(synced_widgets, context):
28+
async with context:
29+
widget = await synced_widgets.get_local_widget()
30+
assert widget.awareness is widget._comm_provider.awareness
5331

5432

55-
@patch("ypywidgets.comm.create_widget_comm")
56-
def test_comm_widget_awareness_observe_and_unobserve(mock_create_comm):
57-
comm = DummyComm()
58-
mock_create_comm.return_value = comm
59-
widget = CommWidget()
33+
async def test_comm_widget_awareness_observe_and_unobserve(synced_widgets, context):
34+
async with context:
35+
widget = await synced_widgets.get_local_widget()
6036

61-
events: list[str] = []
62-
sub_id = widget.on_awareness_change(lambda topic, _: events.append(topic))
37+
events: list[str] = []
38+
sub_id = widget.awareness.observe(lambda topic, _: events.append(topic))
6339

64-
widget.awareness.set_local_state({"ping": 1})
65-
assert events
40+
widget.awareness.set_local_state({"ping": 1})
41+
assert events
6642

67-
widget.unobserve_awareness(sub_id)
68-
events.clear()
69-
widget.awareness.set_local_state({"ping": 2})
70-
assert events == []
43+
widget.awareness.unobserve(sub_id)
44+
events.clear()
45+
widget.awareness.set_local_state({"ping": 2})
46+
assert events == []
7147

7248

7349
async def test_remote_manager_applies_awareness_messages(synced_widgets, context):

0 commit comments

Comments
 (0)