Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
steps:
- uses: actions/checkout@v7
- name: Set up Python
uses: actions/setup-python@v6
uses: actions/setup-python@v7
with:
python-version: 3.x
- name: Install dependencies
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v7

- uses: actions/setup-python@v6
- uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}

Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ dev = [
"pytest",
"ruff",
"trio",
"typing_extensions >=4.15.0,<5.0.0; python_version<'3.11'",
]

[tool.hatch.build.targets.wheel]
Expand Down
3 changes: 1 addition & 2 deletions src/ypywidgets/__init__.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import importlib.metadata

from .widget import Widget as Widget
from .reactive import Reactive as Reactive

from .widget import Widget as Widget

try:
__version__ = importlib.metadata.version("ypywidgets")
Expand Down
8 changes: 4 additions & 4 deletions src/ypywidgets/comm.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,10 @@ def __init__(
_model_name = self.ydoc["_model_name"] = Text()
_model_name += model_name
if comm_metadata is None:
comm_metadata = dict(
ymodel_name=model_name,
create_ydoc=not ydoc,
)
comm_metadata = {
"ymodel_name": model_name,
"create_ydoc": not ydoc,
}
self._comm = create_widget_comm(comm_data, comm_metadata, comm_id)
self._comm_provider = CommProvider(self.ydoc, self._comm)

Expand Down
24 changes: 18 additions & 6 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import math
import sys
from contextlib import AsyncExitStack
from functools import partial
from typing import Any, cast
Expand All @@ -9,16 +10,23 @@
from anyio.abc import TaskGroup
from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
from pycrdt import (
TransactionEvent,
YMessageType,
YSyncMessageType,
TransactionEvent,
create_sync_message,
create_update_message,
handle_sync_message,
)

from ypywidgets import Widget
from ypywidgets.comm import CommWidget

if sys.version_info >= (3, 11):
from typing import Self
else: # pragma: nocover
from typing_extensions import Self


pytestmark = pytest.mark.anyio


Expand Down Expand Up @@ -67,10 +75,14 @@ def __init__(self):
def add_task(self, task):
self.tasks.append(task)

async def __aenter__(self) -> "Context":
async def __aenter__(self) -> Self:
send_send_stream: MemoryObjectSendStream
send_recv_stream: MemoryObjectReceiveStream
send_send_stream, send_recv_stream = create_memory_object_stream(
max_buffer_size=math.inf
)
recv_send_stream: MemoryObjectSendStream
recv_recv_stream: MemoryObjectReceiveStream
recv_send_stream, recv_recv_stream = create_memory_object_stream(
max_buffer_size=math.inf
)
Expand Down Expand Up @@ -126,11 +138,11 @@ async def receive(self) -> None:
while True:
(
msg_type,
data,
metadata,
_data,
_metadata,
buffers,
target_name,
target_module,
_target_name,
_target_module,
) = await self.comm.send_recv_stream.receive()
match msg_type:
case "comm_open":
Expand Down
3 changes: 2 additions & 1 deletion tests/test_attributes.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import pytest
from anyio import sleep
from pycrdt import Text

from ypywidgets import Reactive, Widget
from ypywidgets.comm import CommWidget

Expand Down Expand Up @@ -74,5 +75,5 @@ async def test_watch_attribute(widget_factories, synced_widgets, capfd, context)

# we're seeing the remote widget watch callback
await sleep(0.01)
out, err = capfd.readouterr()
out, _err = capfd.readouterr()
assert out == "foo changed: 'None'->'foo'\n"
3 changes: 2 additions & 1 deletion tests/test_comm_awareness.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import pytest
from pycrdt import Awareness, Doc, YMessageType, create_awareness_message

from ypywidgets.comm import CommWidget

pytestmark = pytest.mark.anyio
Expand Down Expand Up @@ -29,7 +30,7 @@ async def test_comm_widget_exposes_provider_awareness():
assert widget.awareness is widget._comm_provider.awareness


async def test_comm_widget_awareness_observe_and_unobserve():
async def test_comm_widget_awareness_observe_and_unobserve() -> None:
widget = CommWidget()

events: list[str] = []
Expand Down