async-kernel 0.16.3__tar.gz → 0.16.4__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 (103) hide show
  1. {async_kernel-0.16.3 → async_kernel-0.16.4}/CHANGELOG.md +9 -0
  2. {async_kernel-0.16.3 → async_kernel-0.16.4}/PKG-INFO +1 -1
  3. {async_kernel-0.16.3 → async_kernel-0.16.4}/_version.py +2 -2
  4. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/caller.py +3 -2
  5. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/pending.py +5 -4
  6. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_pending.py +15 -1
  7. {async_kernel-0.16.3 → async_kernel-0.16.4}/.github/dependabot.yaml +0 -0
  8. {async_kernel-0.16.3 → async_kernel-0.16.4}/.github/release.yml +0 -0
  9. {async_kernel-0.16.3 → async_kernel-0.16.4}/.github/workflows/ci.yml +0 -0
  10. {async_kernel-0.16.3 → async_kernel-0.16.4}/.github/workflows/enforce-label.yml +0 -0
  11. {async_kernel-0.16.3 → async_kernel-0.16.4}/.github/workflows/new_release.yml +0 -0
  12. {async_kernel-0.16.3 → async_kernel-0.16.4}/.github/workflows/pre-commit.yml +0 -0
  13. {async_kernel-0.16.3 → async_kernel-0.16.4}/.github/workflows/publish-docs.yml +0 -0
  14. {async_kernel-0.16.3 → async_kernel-0.16.4}/.github/workflows/publish-to-pypi.yml +0 -0
  15. {async_kernel-0.16.3 → async_kernel-0.16.4}/.gitignore +0 -0
  16. {async_kernel-0.16.3 → async_kernel-0.16.4}/.pre-commit-config.yaml +0 -0
  17. {async_kernel-0.16.3 → async_kernel-0.16.4}/.vscode/launch.json +0 -0
  18. {async_kernel-0.16.3 → async_kernel-0.16.4}/.vscode/settings.json +0 -0
  19. {async_kernel-0.16.3 → async_kernel-0.16.4}/.vscode/spellright.dict +0 -0
  20. {async_kernel-0.16.3 → async_kernel-0.16.4}/CONTRIBUTING.md +0 -0
  21. {async_kernel-0.16.3 → async_kernel-0.16.4}/IPYTHON_LICENSE +0 -0
  22. {async_kernel-0.16.3 → async_kernel-0.16.4}/LICENSE +0 -0
  23. {async_kernel-0.16.3 → async_kernel-0.16.4}/README.md +0 -0
  24. {async_kernel-0.16.3 → async_kernel-0.16.4}/cliff.toml +0 -0
  25. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/about/changelog.md +0 -0
  26. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/about/contributing.md +0 -0
  27. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/about/index.md +0 -0
  28. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/about/license.md +0 -0
  29. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/index.md +0 -0
  30. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/javascripts/extra.js +0 -0
  31. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/notebooks/caller.ipynb +0 -0
  32. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/notebooks/concurrency.ipynb +0 -0
  33. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/overrides/main.html +0 -0
  34. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/reference/asyncshell.md +0 -0
  35. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/reference/caller.md +0 -0
  36. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/reference/comm.md +0 -0
  37. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/reference/command.md +0 -0
  38. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/reference/common.md +0 -0
  39. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/reference/debugger.md +0 -0
  40. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/reference/event_loop.md +0 -0
  41. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/reference/index.md +0 -0
  42. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/reference/interface.md +0 -0
  43. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/reference/kernel.md +0 -0
  44. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/reference/kernelspec.md +0 -0
  45. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/reference/pending.md +0 -0
  46. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/reference/typing.md +0 -0
  47. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/reference/utils.md +0 -0
  48. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/stylesheets/extra.css +0 -0
  49. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/thread_safety.md +0 -0
  50. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/usage/commands.md +0 -0
  51. {async_kernel-0.16.3 → async_kernel-0.16.4}/docs/usage/index.md +0 -0
  52. {async_kernel-0.16.3 → async_kernel-0.16.4}/hatch_build.py +0 -0
  53. {async_kernel-0.16.3 → async_kernel-0.16.4}/mkdocs.yml +0 -0
  54. {async_kernel-0.16.3 → async_kernel-0.16.4}/pyproject.toml +0 -0
  55. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/__init__.py +0 -0
  56. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/__main__.py +0 -0
  57. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/asyncshell.py +0 -0
  58. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/comm.py +0 -0
  59. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/command.py +0 -0
  60. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/common.py +0 -0
  61. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/compat/json.py +0 -0
  62. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/compiler.py +0 -0
  63. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/debugger.py +0 -0
  64. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/event_loop/__init__.py +0 -0
  65. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/event_loop/asyncio_guest.py +0 -0
  66. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/event_loop/qt_host.py +0 -0
  67. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/event_loop/run.py +0 -0
  68. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/event_loop/tk_host.py +0 -0
  69. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/interface/__init__.py +0 -0
  70. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/interface/base.py +0 -0
  71. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/interface/callable.py +0 -0
  72. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/interface/zmq.py +0 -0
  73. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/iostream.py +0 -0
  74. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/kernel.py +0 -0
  75. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/kernelspec.py +0 -0
  76. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/py.typed +0 -0
  77. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/resources/logo-32x32.png +0 -0
  78. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/resources/logo-64x64.png +0 -0
  79. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/resources/logo-svg.svg +0 -0
  80. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/typing.py +0 -0
  81. {async_kernel-0.16.3 → async_kernel-0.16.4}/src/async_kernel/utils.py +0 -0
  82. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/__init__.py +0 -0
  83. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/conftest.py +0 -0
  84. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/references.py +0 -0
  85. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_callable_kernel_interface.py +0 -0
  86. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_caller.py +0 -0
  87. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_comm.py +0 -0
  88. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_command.py +0 -0
  89. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_common.py +0 -0
  90. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_compat.py +0 -0
  91. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_debugger.py +0 -0
  92. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_enter_kernel.py +0 -0
  93. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_event_loop.py +0 -0
  94. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_iostream.py +0 -0
  95. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_kernel.py +0 -0
  96. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_kernel_subclass.py +0 -0
  97. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_kernelspec.py +0 -0
  98. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_message_spec.py +0 -0
  99. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_typing.py +0 -0
  100. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_utils.py +0 -0
  101. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/test_zmq_messaging.py +0 -0
  102. {async_kernel-0.16.3 → async_kernel-0.16.4}/tests/utils.py +0 -0
  103. {async_kernel-0.16.3 → async_kernel-0.16.4}/uv.lock +0 -0
@@ -5,10 +5,18 @@ 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.16.4] - 2026-04-15
9
+
10
+ ### <!-- 2 --> 🐛 Fixes
11
+
12
+ - Fix PendingGroup mode 0 and add mode 3. [#428](https://github.com/fleming79/async-kernel/pull/428)
13
+
8
14
  ## [0.16.3] - 2026-04-12
9
15
 
10
16
  ### <!-- 6 --> 🌀 Miscellaneous
11
17
 
18
+ - Prepare for release v0.16.3 [#427](https://github.com/fleming79/async-kernel/pull/427)
19
+
12
20
  - Run comm_open and com_close message handlers in the shell thread. [#426](https://github.com/fleming79/async-kernel/pull/426)
13
21
 
14
22
  ## [0.16.2] - 2026-04-12
@@ -1175,6 +1183,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1175
1183
 
1176
1184
  - Bump the actions group across 1 directory with 2 updates [#3](https://github.com/fleming79/async-kernel/pull/3)
1177
1185
 
1186
+ [0.16.4]: https://github.com/fleming79/async-kernel/compare/v0.16.3..v0.16.4
1178
1187
  [0.16.3]: https://github.com/fleming79/async-kernel/compare/v0.16.2..v0.16.3
1179
1188
  [0.16.2]: https://github.com/fleming79/async-kernel/compare/v0.16.1..v0.16.2
1180
1189
  [0.16.1]: https://github.com/fleming79/async-kernel/compare/v0.16.0..v0.16.1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: async-kernel
3
- Version: 0.16.3
3
+ Version: 0.16.4
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
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.16.3'
22
- __version_tuple__ = version_tuple = (0, 16, 3)
21
+ __version__ = version = '0.16.4'
22
+ __version_tuple__ = version_tuple = (0, 16, 4)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1098,7 +1098,7 @@ class Caller(anyio.AsyncContextManagerMixin):
1098
1098
  break
1099
1099
  return done, pending
1100
1100
 
1101
- def create_pending_group(self, *, shield: bool = False, mode: Literal[0, 1, 2] = 0) -> PendingGroup:
1101
+ def create_pending_group(self, *, shield: bool = False, mode: Literal[0, 1, 2, 3] = 0) -> PendingGroup:
1102
1102
  """
1103
1103
  Create a new [PendingGroup][async_kernel.pending.PendingGroup] instance.
1104
1104
 
@@ -1113,9 +1113,10 @@ class Caller(anyio.AsyncContextManagerMixin):
1113
1113
  Args:
1114
1114
  shield: Shield the pending group from external cancellation.
1115
1115
  mode: The mode.
1116
- - 0: Ignore cancellation of pending.
1116
+ - 0: Ignore cancellation of pending, if any pending is cancelled - exit quietly.
1117
1117
  - 1: Cancel if any pending is cancelled - raise PendingCancelled on exit.
1118
1118
  - 2: Cancel if any pending is cancelled - exit quietly.
1119
+ - 3: Ignore cancellation of pending, if any pending is cancelled - raise PendingCancelled on exit.
1119
1120
 
1120
1121
  Usage:
1121
1122
 
@@ -206,7 +206,7 @@ class PendingGroup(PendingTracker, anyio.AsyncContextManagerMixin):
206
206
  caller: Fixed[Self, Caller] = Fixed(lambda _: async_kernel.Caller())
207
207
  "The caller where the pending group was instantiated."
208
208
 
209
- def __init__(self, *, shield: bool = False, mode: int = 0) -> None:
209
+ def __init__(self, *, shield: bool = False, mode: Literal[0, 1, 2, 3] = 0) -> None:
210
210
  """
211
211
  An async context to capture all pending (that opt in) created in the context.
212
212
 
@@ -217,11 +217,12 @@ class PendingGroup(PendingTracker, anyio.AsyncContextManagerMixin):
217
217
  Args:
218
218
  shield: Passed to the cancel scope.
219
219
  mode: The mode.
220
- - 0: Ignore cancellation of pending.
220
+ - 0: Ignore cancellation of pending, if any pending is cancelled - exit quietly.
221
221
  - 1: Cancel if any pending is cancelled - raise PendingCancelled on exit.
222
222
  - 2: Cancel if any pending is cancelled - exit quietly.
223
+ - 3: Ignore cancellation of pending, if any pending is cancelled - raise PendingCancelled on exit.
223
224
  """
224
- assert mode in [0, 1, 2]
225
+ assert mode in [0, 1, 2, 3]
225
226
  self._mode = mode
226
227
  self._shield = shield
227
228
  self.caller # noqa: B018
@@ -259,7 +260,7 @@ class PendingGroup(PendingTracker, anyio.AsyncContextManagerMixin):
259
260
  if exceptions := [e for pen in self._failed if isinstance(e := pen.exception(), Exception)]:
260
261
  msg = f"One or more exceptions occurred in this context! {list(map(str, exceptions))}"
261
262
  raise ExceptionGroup(msg, exceptions)
262
- if self._mode in [0, 1]:
263
+ if self._mode in [1, 3]:
263
264
  raise PendingCancelled(self._cancelled)
264
265
  finally:
265
266
  self._leaving_context = True
@@ -432,7 +432,7 @@ class TestPendingGroup:
432
432
 
433
433
  async def test_cancellation(self, caller: Caller):
434
434
  with pytest.raises(PendingCancelled): # noqa: PT012
435
- async with PendingGroup() as pm:
435
+ async with PendingGroup(mode=1) as pm:
436
436
  pen = caller.call_soon(anyio.sleep_forever)
437
437
  pm.cancel("Stop")
438
438
  assert pen.cancelled() # pyright: ignore[reportPossiblyUnboundVariable]
@@ -532,15 +532,29 @@ class TestPendingGroup:
532
532
 
533
533
  async def test_mode(self, caller: Caller):
534
534
 
535
+ # mode 0
536
+ async with caller.create_pending_group(mode=0) as pg:
537
+ pen = pg.caller.call_soon(anyio.sleep_forever)
538
+ pen.cancel("stop now")
539
+ await pg.caller.call_soon(lambda: 1 + 1)
540
+ assert not pg.cancelled()
535
541
  # mode 1
536
542
  with pytest.raises(PendingCancelled): # noqa: PT012
537
543
  async with caller.create_pending_group(mode=1) as pg:
538
544
  pen = pg.caller.call_soon(anyio.sleep_forever)
539
545
  pen.cancel("stop now")
546
+ assert pg.cancelled()
540
547
  # mode 2
541
548
  async with caller.create_pending_group(mode=2) as pg:
542
549
  pen = pg.caller.call_soon(anyio.sleep_forever)
543
550
  pen.cancel("stop now")
551
+ assert pg.cancelled()
552
+ # mode 3
553
+ async with caller.create_pending_group(mode=3) as pg:
554
+ pen = pg.caller.call_soon(anyio.sleep_forever)
555
+ pen.cancel("stop now")
556
+ await pg.caller.call_soon(lambda: 1 + 1)
557
+ assert not pg.cancelled()
544
558
 
545
559
  async def test_repr(self, caller: Caller):
546
560
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes