async-kernel 0.2.0__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/workflows/ci.yml +2 -2
- {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/workflows/pre-commit.yml +1 -1
- {async_kernel-0.2.0 → async_kernel-0.3.0}/CHANGELOG.md +60 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/PKG-INFO +1 -1
- {async_kernel-0.2.0 → async_kernel-0.3.0}/_version.py +2 -2
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/notebooks/concurrency.ipynb +3 -4
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/notebooks/simple_example.ipynb +3 -4
- {async_kernel-0.2.0 → async_kernel-0.3.0}/pyproject.toml +1 -1
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/__init__.py +2 -1
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/caller.py +542 -265
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/debugger.py +5 -5
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/kernel.py +23 -17
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/kernelspec.py +3 -4
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/typing.py +4 -4
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/utils.py +6 -1
- async_kernel-0.3.0/tests/test_caller.py +731 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_kernel.py +5 -6
- {async_kernel-0.2.0 → async_kernel-0.3.0}/uv.lock +9 -8
- async_kernel-0.2.0/tests/test_caller.py +0 -520
- {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/dependabot.yaml +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/release.yml +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/workflows/enforce-label.yml +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/workflows/new_release.yml +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/workflows/publish-docs.yml +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/workflows/publish-to-pypi.yml +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/.gitignore +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/.pre-commit-config.yaml +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/.vscode/launch.json +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/.vscode/settings.json +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/.vscode/spellright.dict +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/CONTRIBUTING.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/IPYTHON_LICENSE +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/LICENSE +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/README.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/cliff.toml +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/about/changelog.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/about/contributing.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/about/index.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/about/license.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/caller.ipynb +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/commands.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/index.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/javascripts/extra.js +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/notebooks/caller.ipynb +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/notebooks/index.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/overrides/main.html +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/asyncshell.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/caller.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/comm.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/command.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/index.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/kernel.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/kernelspec.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/typing.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/utils.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/stylesheets/extra.css +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/usage/index.md +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/hatch_build.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/mkdocs.yml +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/__main__.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/asyncshell.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/comm.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/command.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/compiler.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/iostream.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/resources/logo-32x32.png +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/resources/logo-64x64.png +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/resources/logo-svg.svg +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/__init__.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/conftest.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/references.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_comm.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_command.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_debugger.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_enter_kernel.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_iostream.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_kernel_subclass.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_kernelspec.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_message_spec.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_typing.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_utils.py +0 -0
- {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/utils.py +0 -0
|
@@ -41,7 +41,7 @@ jobs:
|
|
|
41
41
|
|
|
42
42
|
- name: Run tests
|
|
43
43
|
timeout-minutes: 5
|
|
44
|
-
run: uv run pytest -vvl
|
|
44
|
+
run: uv run pytest --reruns 3 --reruns-delay 1 --maxfail 10 --rerun-except AssertionError -vvl
|
|
45
45
|
|
|
46
46
|
- name: Type checking with basedpyright
|
|
47
47
|
run: uv run basedpyright
|
|
@@ -60,7 +60,7 @@ jobs:
|
|
|
60
60
|
|
|
61
61
|
- name: Run tests with coverage
|
|
62
62
|
timeout-minutes: 5
|
|
63
|
-
run: uv run pytest --cov --cov-report=xml --junitxml=junit.xml -o junit_family=legacy --cov-fail-under=100
|
|
63
|
+
run: uv run pytest --reruns 2 --rerun-except AssertionError --maxfail 10 --cov --cov-report=xml --junitxml=junit.xml -o junit_family=legacy --cov-fail-under=100
|
|
64
64
|
|
|
65
65
|
- name: Upload coverage reports to Codecov
|
|
66
66
|
if: ${{ !cancelled() }}
|
|
@@ -5,6 +5,62 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.3.0] - 2025-09-14
|
|
9
|
+
|
|
10
|
+
### <!-- 0 --> 🏗️ Breaking changes
|
|
11
|
+
|
|
12
|
+
- Caller.queue_call - divide into queue_get_sender, queue_call and queue_call_no_wait. [#123](https://github.com/fleming79/async-kernel/pull/123)
|
|
13
|
+
|
|
14
|
+
- Stricter handling in Caller class. [#122](https://github.com/fleming79/async-kernel/pull/122)
|
|
15
|
+
|
|
16
|
+
- Add AsyncEvent class. [#118](https://github.com/fleming79/async-kernel/pull/118)
|
|
17
|
+
|
|
18
|
+
### <!-- 1 --> 🚀 Features
|
|
19
|
+
|
|
20
|
+
- Store Caller.call_later function details in the futures metadata [#119](https://github.com/fleming79/async-kernel/pull/119)
|
|
21
|
+
|
|
22
|
+
- Add metadata to Future. [#116](https://github.com/fleming79/async-kernel/pull/116)
|
|
23
|
+
|
|
24
|
+
### <!-- 6 --> 🌀 Miscellaneous
|
|
25
|
+
|
|
26
|
+
- AsyncEvent maintenance - make more robust [#120](https://github.com/fleming79/async-kernel/pull/120)
|
|
27
|
+
|
|
28
|
+
- Switch from pytest-retry to pytest-rerun failures. [#117](https://github.com/fleming79/async-kernel/pull/117)
|
|
29
|
+
|
|
30
|
+
- Refactor Caller to speed up initialization of Future by removing the creation of the threading event. [#115](https://github.com/fleming79/async-kernel/pull/115)
|
|
31
|
+
|
|
32
|
+
## [0.2.1] - 2025-09-10
|
|
33
|
+
|
|
34
|
+
### <!-- 0 --> 🏗️ Breaking changes
|
|
35
|
+
|
|
36
|
+
- Maintenance [#105](https://github.com/fleming79/async-kernel/pull/105)
|
|
37
|
+
|
|
38
|
+
### <!-- 1 --> 🚀 Features
|
|
39
|
+
|
|
40
|
+
- Divide Lock into AsyncLock and ReentrantAsyncLock [#113](https://github.com/fleming79/async-kernel/pull/113)
|
|
41
|
+
|
|
42
|
+
- Improve Lock class [#112](https://github.com/fleming79/async-kernel/pull/112)
|
|
43
|
+
|
|
44
|
+
- Add a context based Lock [#111](https://github.com/fleming79/async-kernel/pull/111)
|
|
45
|
+
|
|
46
|
+
- Add classmethod Caller.wait [#106](https://github.com/fleming79/async-kernel/pull/106)
|
|
47
|
+
|
|
48
|
+
- Add 'shield' option to Caller.as_completed. [#104](https://github.com/fleming79/async-kernel/pull/104)
|
|
49
|
+
|
|
50
|
+
### <!-- 6 --> 🌀 Miscellaneous
|
|
51
|
+
|
|
52
|
+
- Prepare for release v0.2.1 [#114](https://github.com/fleming79/async-kernel/pull/114)
|
|
53
|
+
|
|
54
|
+
- Bump actions/setup-python from 5 to 6 in the actions group [#110](https://github.com/fleming79/async-kernel/pull/110)
|
|
55
|
+
|
|
56
|
+
- Maintenance - Caller refactoring [#109](https://github.com/fleming79/async-kernel/pull/109)
|
|
57
|
+
|
|
58
|
+
- Drop WaitType for Literals directly in Caller.wait. [#108](https://github.com/fleming79/async-kernel/pull/108)
|
|
59
|
+
|
|
60
|
+
- Change Caller._queue_map to a WeakKeyDictionary. [#107](https://github.com/fleming79/async-kernel/pull/107)
|
|
61
|
+
|
|
62
|
+
- Refactor Caller.wait to avoid catching exceptions. [#103](https://github.com/fleming79/async-kernel/pull/103)
|
|
63
|
+
|
|
8
64
|
## [0.2.0] - 2025-09-06
|
|
9
65
|
|
|
10
66
|
### <!-- 0 --> 🏗️ Breaking changes
|
|
@@ -29,6 +85,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
29
85
|
|
|
30
86
|
### <!-- 6 --> 🌀 Miscellaneous
|
|
31
87
|
|
|
88
|
+
- Prepare for release v0.2.0 [#102](https://github.com/fleming79/async-kernel/pull/102)
|
|
89
|
+
|
|
32
90
|
- Result should raise cancelled error, but was raising and InvalidStateError. [#98](https://github.com/fleming79/async-kernel/pull/98)
|
|
33
91
|
|
|
34
92
|
## [0.1.4] - 2025-09-03
|
|
@@ -207,6 +265,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
207
265
|
|
|
208
266
|
- Bump the actions group across 1 directory with 2 updates [#3](https://github.com/fleming79/async-kernel/pull/3)
|
|
209
267
|
|
|
268
|
+
[0.3.0]: https://github.com/fleming79/async-kernel/compare/v0.2.1..v0.3.0
|
|
269
|
+
[0.2.1]: https://github.com/fleming79/async-kernel/compare/v0.2.0..v0.2.1
|
|
210
270
|
[0.2.0]: https://github.com/fleming79/async-kernel/compare/v0.1.4..v0.2.0
|
|
211
271
|
[0.1.4]: https://github.com/fleming79/async-kernel/compare/v0.1.3..v0.1.4
|
|
212
272
|
[0.1.3]: https://github.com/fleming79/async-kernel/compare/v0.1.2..v0.1.3
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: async-kernel
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: A concurrent python kernel for Jupyter supporting AnyIO, AsyncIO and Trio.
|
|
5
5
|
Project-URL: Homepage, https://fleming79.github.io/async-kernel
|
|
6
6
|
Project-URL: Documentation, https://fleming79.github.io/async-kernel
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.
|
|
32
|
-
__version_tuple__ = version_tuple = (0,
|
|
31
|
+
__version__ = version = '0.3.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 3, 0)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -179,16 +179,15 @@
|
|
|
179
179
|
"async def demo():\n",
|
|
180
180
|
" import threading\n",
|
|
181
181
|
"\n",
|
|
182
|
-
" import anyio\n",
|
|
183
182
|
" from ipywidgets import Button\n",
|
|
184
183
|
"\n",
|
|
185
|
-
" from async_kernel import Caller, utils\n",
|
|
184
|
+
" from async_kernel import AsyncEvent, Caller, utils\n",
|
|
186
185
|
"\n",
|
|
187
186
|
" print(\"Run mode:\", utils.get_job()[\"run_mode\"])\n",
|
|
188
187
|
"\n",
|
|
189
188
|
" print(f\"Thread name: '{threading.current_thread().name}'\")\n",
|
|
190
189
|
" button = Button(description=\"Finish\")\n",
|
|
191
|
-
" event =
|
|
190
|
+
" event = AsyncEvent()\n",
|
|
192
191
|
" caller = Caller() # Use caller so the `##thread` example works.\n",
|
|
193
192
|
" # This is because widget messages are received by the shell in the main thread. The event is being waited in this thread.\n",
|
|
194
193
|
" button.on_click(lambda _: caller.call_direct(event.set))\n",
|
|
@@ -356,7 +355,7 @@
|
|
|
356
355
|
"name": "python",
|
|
357
356
|
"nbconvert_exporter": "python",
|
|
358
357
|
"pygments_lexer": "ipython3",
|
|
359
|
-
"version": "3.
|
|
358
|
+
"version": "3.13.6"
|
|
360
359
|
}
|
|
361
360
|
},
|
|
362
361
|
"nbformat": 4,
|
|
@@ -42,10 +42,9 @@
|
|
|
42
42
|
},
|
|
43
43
|
"outputs": [],
|
|
44
44
|
"source": [
|
|
45
|
-
"import anyio\n",
|
|
46
45
|
"import ipywidgets as ipw\n",
|
|
47
46
|
"\n",
|
|
48
|
-
"from async_kernel import Caller, utils\n",
|
|
47
|
+
"from async_kernel import AsyncEvent, Caller, utils\n",
|
|
49
48
|
"\n",
|
|
50
49
|
"\n",
|
|
51
50
|
"async def demo():\n",
|
|
@@ -55,7 +54,7 @@
|
|
|
55
54
|
" display(b)\n",
|
|
56
55
|
" for i in range(1, 3):\n",
|
|
57
56
|
" b.description = f\"Continue {i}\"\n",
|
|
58
|
-
" event =
|
|
57
|
+
" event = AsyncEvent()\n",
|
|
59
58
|
" b.on_click(lambda _: caller.call_soon(event.set)) # noqa: B023\n",
|
|
60
59
|
" print(f\"Waiting {i}\", end=\"\\r\")\n",
|
|
61
60
|
" await event.wait()\n",
|
|
@@ -172,7 +171,7 @@
|
|
|
172
171
|
"name": "python",
|
|
173
172
|
"nbconvert_exporter": "python",
|
|
174
173
|
"pygments_lexer": "ipython3",
|
|
175
|
-
"version": "3.
|
|
174
|
+
"version": "3.13.6"
|
|
176
175
|
}
|
|
177
176
|
},
|
|
178
177
|
"nbformat": 4,
|
|
@@ -2,7 +2,7 @@ import sys
|
|
|
2
2
|
from importlib.metadata import PackageNotFoundError, version
|
|
3
3
|
|
|
4
4
|
from async_kernel import utils
|
|
5
|
-
from async_kernel.caller import Caller, Future
|
|
5
|
+
from async_kernel.caller import AsyncEvent, Caller, Future
|
|
6
6
|
from async_kernel.kernel import Kernel
|
|
7
7
|
|
|
8
8
|
try:
|
|
@@ -24,6 +24,7 @@ kernel_protocol_version_info = {
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
__all__ = [
|
|
27
|
+
"AsyncEvent",
|
|
27
28
|
"Caller",
|
|
28
29
|
"Future",
|
|
29
30
|
"Kernel",
|