Skip to content

Commit a295d55

Browse files
committed
Merge branch 'main' into support-awareness-comm
2 parents 0c4c141 + 4a2a508 commit a295d55

File tree

8 files changed

+252
-145
lines changed

8 files changed

+252
-145
lines changed

.github/dependabot.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: pip
4+
directory: "/"
5+
schedule:
6+
interval: daily
7+
time: "04:00"
8+
open-pull-requests-limit: 10
9+
reviewers:
10+
- davidbrochart
11+
- package-ecosystem: "github-actions"
12+
directory: "/"
13+
schedule:
14+
interval: "weekly"

.github/workflows/publish.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@ jobs:
1010
runs-on: ubuntu-latest
1111
environment: release
1212
steps:
13-
- uses: actions/checkout@v4
13+
- uses: actions/checkout@v6
1414
- name: Set up Python
15-
uses: actions/setup-python@v5
15+
uses: actions/setup-python@v6
1616
with:
1717
python-version: 3.x
1818
- name: Install dependencies
1919
run: pip install hatch
2020
- name: Create packages
2121
run: hatch build
2222
- name: Archive packages
23-
uses: actions/upload-artifact@v4
23+
uses: actions/upload-artifact@v7
2424
with:
2525
name: dist
2626
path: dist
@@ -34,6 +34,6 @@ jobs:
3434
id-token: write
3535
steps:
3636
- name: Retrieve packages
37-
uses: actions/download-artifact@v4
37+
uses: actions/download-artifact@v8
3838
- name: Upload packages
3939
uses: pypa/gh-action-pypi-publish@release/v1

.github/workflows/test.yml

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,30 +20,32 @@ jobs:
2020
fail-fast: false
2121
matrix:
2222
os: [ubuntu-latest, macos-latest, windows-latest]
23-
python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12' ]
23+
python-version: [ '3.10', '3.11', '3.12', '3.13', '3.14' ]
2424

2525
steps:
2626
- name: Checkout
27-
uses: actions/checkout@v3
27+
uses: actions/checkout@v6
2828

29-
- uses: actions/setup-python@v4
29+
- uses: actions/setup-python@v6
3030
with:
3131
python-version: ${{ matrix.python-version }}
3232

33-
- name: Upgrade pip
34-
run: python3 -m pip install --upgrade pip
35-
3633
- name: Install ypywidgets in dev mode
37-
run: pip install -e ".[dev]"
34+
run: pip install -e . --group dev
35+
36+
- name: Lint
37+
run: |
38+
ruff format --check src tests
39+
ruff check src tests
3840
3941
- name: Check types
40-
run: mypy src
42+
run: mypy src tests
4143

4244
- name: Run tests
4345
run: pytest ./tests -v --color=yes
4446

4547
- name: Run code coverage
46-
if: ${{ (matrix.python-version == '3.12') && (matrix.os == 'ubuntu-latest') }}
48+
if: ${{ (matrix.python-version == '3.14') && (matrix.os == 'ubuntu-latest') }}
4749
run: |
4850
coverage run -m pytest tests
4951
coverage report --fail-under=100

pyproject.toml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ version = "0.9.7"
88
description = "Y-based Jupyter widgets for Python"
99
readme = "README.md"
1010
license = "MIT"
11-
requires-python = ">=3.8"
11+
requires-python = ">=3.10"
1212
authors = [
1313
{ name = "David Brochart", email = "david.brochart@gmail.com" },
1414
]
@@ -24,14 +24,16 @@ dependencies = [
2424
]
2525

2626
[project.urls]
27-
Homepage = "https://github.com/davidbrochart/ypywidgets"
27+
Homepage = "https://github.com/QuantStack/ypywidgets"
2828

29-
[project.optional-dependencies]
29+
[dependency-groups]
3030
dev = [
31+
"anyio",
3132
"coverage >=7.0.0,<8.0.0",
3233
"mypy",
3334
"pytest",
34-
"pytest-asyncio",
35+
"ruff",
36+
"trio",
3537
]
3638

3739
[tool.hatch.build.targets.wheel]

src/ypywidgets/comm.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,16 @@ def awareness(self) -> Awareness:
6262

6363
def _receive(self, msg):
6464
message = bytes(msg["buffers"][0])
65-
mtype = message[0]
66-
if mtype == YMessageType.SYNC:
67-
reply = handle_sync_message(message[1:], self._ydoc)
68-
if reply is not None:
69-
self._comm.send(buffers=[reply])
70-
if message[1] == YSyncMessageType.SYNC_STEP2:
71-
self._ydoc.observe(self._send)
72-
elif mtype == YMessageType.AWARENESS:
73-
payload = read_message(message[1:])
74-
self._awareness.apply_awareness_update(payload, None)
65+
match message[0]:
66+
case YMessageType.SYNC:
67+
reply = handle_sync_message(message[1:], self._ydoc)
68+
if reply is not None:
69+
self._comm.send(buffers=[reply])
70+
if message[1] == YSyncMessageType.SYNC_STEP2:
71+
self._ydoc.observe(self._send)
72+
case YMessageType.AWARENESS:
73+
payload = read_message(message[1:])
74+
self._awareness.apply_awareness_update(payload, None)
7575

7676
def _send(self, event: TransactionEvent):
7777
update = event.update
@@ -116,13 +116,13 @@ def unobserve_awareness(self, subscription_id: str) -> None:
116116
def _repr_mimebundle_(self, *args, **kwargs): # pragma: nocover
117117
plaintext = repr(self)
118118
if len(plaintext) > 110:
119-
plaintext = plaintext[:110] + '…'
119+
plaintext = plaintext[:110] + "…"
120120
data = {
121121
"text/plain": plaintext,
122122
"application/vnd.jupyter.ywidget-view+json": {
123123
"version_major": 2,
124124
"version_minor": 0,
125125
"model_id": self._comm.comm_id,
126-
}
126+
},
127127
}
128128
return data

src/ypywidgets/reactive.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111

1212
class Reactive(_Reactive, Generic[ValueType]):
13-
1413
def __init__(
1514
self,
1615
default: ValueType,

0 commit comments

Comments
 (0)