From c685434c1d883a5eab6f4a3c7676122b67684d5d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 25 Jul 2026 10:22:21 +0000 Subject: [PATCH 1/3] Bump actions/setup-python from 6 to 7 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 6 to 7. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/setup-python dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/publish.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 84551b8..bc363b7 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -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 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 160c97d..5c7c8cb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -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 }} From 288cbc85df94c10d6080489839c42c649cdccd07 Mon Sep 17 00:00:00 2001 From: David Brochart Date: Sat, 25 Jul 2026 12:49:19 +0200 Subject: [PATCH 2/3] lint --- pyproject.toml | 1 + src/ypywidgets/__init__.py | 3 +-- src/ypywidgets/comm.py | 8 ++++---- tests/conftest.py | 20 ++++++++++++++------ tests/test_attributes.py | 3 ++- tests/test_comm_awareness.py | 1 + 6 files changed, 23 insertions(+), 13 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ca9aee5..d7d506e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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] diff --git a/src/ypywidgets/__init__.py b/src/ypywidgets/__init__.py index ed8598d..accf874 100644 --- a/src/ypywidgets/__init__.py +++ b/src/ypywidgets/__init__.py @@ -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") diff --git a/src/ypywidgets/comm.py b/src/ypywidgets/comm.py index b2d1d91..7c70afa 100644 --- a/src/ypywidgets/comm.py +++ b/src/ypywidgets/comm.py @@ -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) diff --git a/tests/conftest.py b/tests/conftest.py index ede26f5..38af5f4 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,4 +1,5 @@ import math +import sys from contextlib import AsyncExitStack from functools import partial from typing import Any, cast @@ -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 @@ -67,7 +75,7 @@ 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, send_recv_stream = create_memory_object_stream( max_buffer_size=math.inf ) @@ -126,11 +134,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": diff --git a/tests/test_attributes.py b/tests/test_attributes.py index 7e762d5..d2b6d88 100644 --- a/tests/test_attributes.py +++ b/tests/test_attributes.py @@ -3,6 +3,7 @@ import pytest from anyio import sleep from pycrdt import Text + from ypywidgets import Reactive, Widget from ypywidgets.comm import CommWidget @@ -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" diff --git a/tests/test_comm_awareness.py b/tests/test_comm_awareness.py index 5f9ca0f..b9c2d6a 100644 --- a/tests/test_comm_awareness.py +++ b/tests/test_comm_awareness.py @@ -2,6 +2,7 @@ import pytest from pycrdt import Awareness, Doc, YMessageType, create_awareness_message + from ypywidgets.comm import CommWidget pytestmark = pytest.mark.anyio From c692a036ffcf1858d5dbca46f07e5e36e29cc781 Mon Sep 17 00:00:00 2001 From: David Brochart Date: Sat, 25 Jul 2026 12:54:14 +0200 Subject: [PATCH 3/3] types --- tests/conftest.py | 4 ++++ tests/test_comm_awareness.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index 38af5f4..f043664 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -76,9 +76,13 @@ def add_task(self, task): self.tasks.append(task) 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 ) diff --git a/tests/test_comm_awareness.py b/tests/test_comm_awareness.py index b9c2d6a..3295591 100644 --- a/tests/test_comm_awareness.py +++ b/tests/test_comm_awareness.py @@ -30,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] = []