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.
Files changed (82) hide show
  1. {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/workflows/ci.yml +2 -2
  2. {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/workflows/pre-commit.yml +1 -1
  3. {async_kernel-0.2.0 → async_kernel-0.3.0}/CHANGELOG.md +60 -0
  4. {async_kernel-0.2.0 → async_kernel-0.3.0}/PKG-INFO +1 -1
  5. {async_kernel-0.2.0 → async_kernel-0.3.0}/_version.py +2 -2
  6. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/notebooks/concurrency.ipynb +3 -4
  7. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/notebooks/simple_example.ipynb +3 -4
  8. {async_kernel-0.2.0 → async_kernel-0.3.0}/pyproject.toml +1 -1
  9. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/__init__.py +2 -1
  10. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/caller.py +542 -265
  11. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/debugger.py +5 -5
  12. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/kernel.py +23 -17
  13. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/kernelspec.py +3 -4
  14. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/typing.py +4 -4
  15. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/utils.py +6 -1
  16. async_kernel-0.3.0/tests/test_caller.py +731 -0
  17. {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_kernel.py +5 -6
  18. {async_kernel-0.2.0 → async_kernel-0.3.0}/uv.lock +9 -8
  19. async_kernel-0.2.0/tests/test_caller.py +0 -520
  20. {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/dependabot.yaml +0 -0
  21. {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/release.yml +0 -0
  22. {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/workflows/enforce-label.yml +0 -0
  23. {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/workflows/new_release.yml +0 -0
  24. {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/workflows/publish-docs.yml +0 -0
  25. {async_kernel-0.2.0 → async_kernel-0.3.0}/.github/workflows/publish-to-pypi.yml +0 -0
  26. {async_kernel-0.2.0 → async_kernel-0.3.0}/.gitignore +0 -0
  27. {async_kernel-0.2.0 → async_kernel-0.3.0}/.pre-commit-config.yaml +0 -0
  28. {async_kernel-0.2.0 → async_kernel-0.3.0}/.vscode/launch.json +0 -0
  29. {async_kernel-0.2.0 → async_kernel-0.3.0}/.vscode/settings.json +0 -0
  30. {async_kernel-0.2.0 → async_kernel-0.3.0}/.vscode/spellright.dict +0 -0
  31. {async_kernel-0.2.0 → async_kernel-0.3.0}/CONTRIBUTING.md +0 -0
  32. {async_kernel-0.2.0 → async_kernel-0.3.0}/IPYTHON_LICENSE +0 -0
  33. {async_kernel-0.2.0 → async_kernel-0.3.0}/LICENSE +0 -0
  34. {async_kernel-0.2.0 → async_kernel-0.3.0}/README.md +0 -0
  35. {async_kernel-0.2.0 → async_kernel-0.3.0}/cliff.toml +0 -0
  36. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/about/changelog.md +0 -0
  37. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/about/contributing.md +0 -0
  38. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/about/index.md +0 -0
  39. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/about/license.md +0 -0
  40. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/caller.ipynb +0 -0
  41. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/commands.md +0 -0
  42. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/index.md +0 -0
  43. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/javascripts/extra.js +0 -0
  44. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/notebooks/caller.ipynb +0 -0
  45. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/notebooks/index.md +0 -0
  46. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/overrides/main.html +0 -0
  47. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/asyncshell.md +0 -0
  48. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/caller.md +0 -0
  49. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/comm.md +0 -0
  50. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/command.md +0 -0
  51. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/index.md +0 -0
  52. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/kernel.md +0 -0
  53. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/kernelspec.md +0 -0
  54. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/typing.md +0 -0
  55. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/reference/utils.md +0 -0
  56. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/stylesheets/extra.css +0 -0
  57. {async_kernel-0.2.0 → async_kernel-0.3.0}/docs/usage/index.md +0 -0
  58. {async_kernel-0.2.0 → async_kernel-0.3.0}/hatch_build.py +0 -0
  59. {async_kernel-0.2.0 → async_kernel-0.3.0}/mkdocs.yml +0 -0
  60. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/__main__.py +0 -0
  61. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/asyncshell.py +0 -0
  62. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/comm.py +0 -0
  63. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/command.py +0 -0
  64. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/compiler.py +0 -0
  65. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/iostream.py +0 -0
  66. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/resources/logo-32x32.png +0 -0
  67. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/resources/logo-64x64.png +0 -0
  68. {async_kernel-0.2.0 → async_kernel-0.3.0}/src/async_kernel/resources/logo-svg.svg +0 -0
  69. {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/__init__.py +0 -0
  70. {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/conftest.py +0 -0
  71. {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/references.py +0 -0
  72. {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_comm.py +0 -0
  73. {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_command.py +0 -0
  74. {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_debugger.py +0 -0
  75. {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_enter_kernel.py +0 -0
  76. {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_iostream.py +0 -0
  77. {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_kernel_subclass.py +0 -0
  78. {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_kernelspec.py +0 -0
  79. {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_message_spec.py +0 -0
  80. {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_typing.py +0 -0
  81. {async_kernel-0.2.0 → async_kernel-0.3.0}/tests/test_utils.py +0 -0
  82. {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() }}
@@ -8,7 +8,7 @@ jobs:
8
8
  runs-on: ubuntu-latest
9
9
  steps:
10
10
  - uses: actions/checkout@v5
11
- - uses: actions/setup-python@v5
11
+ - uses: actions/setup-python@v6
12
12
  with:
13
13
  python-version: 3.x
14
14
  - uses: pre-commit/action@v3.0.1
@@ -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.2.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.2.0'
32
- __version_tuple__ = version_tuple = (0, 2, 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 = anyio.Event()\n",
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.12.11"
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 = anyio.Event()\n",
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.11.13"
174
+ "version": "3.13.6"
176
175
  }
177
176
  },
178
177
  "nbformat": 4,
@@ -73,7 +73,7 @@ test = [
73
73
  "pytest-cov",
74
74
  "pytest-timeout",
75
75
  "pytest-mock",
76
- "pytest-retry",
76
+ "pytest-rerunfailures",
77
77
  "pytest>=8.4,<9",
78
78
  "trio",
79
79
  "hatch"
@@ -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",