async-kernel 0.18.1__tar.gz → 0.18.3__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 (105) hide show
  1. {async_kernel-0.18.1 → async_kernel-0.18.3}/CHANGELOG.md +20 -0
  2. {async_kernel-0.18.1 → async_kernel-0.18.3}/PKG-INFO +1 -1
  3. {async_kernel-0.18.1 → async_kernel-0.18.3}/_version.py +2 -2
  4. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/caller.py +2 -2
  5. async_kernel-0.18.3/src/async_kernel/compat/json.py +67 -0
  6. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_caller.py +3 -3
  7. async_kernel-0.18.1/src/async_kernel/compat/json.py +0 -45
  8. {async_kernel-0.18.1 → async_kernel-0.18.3}/.github/dependabot.yaml +0 -0
  9. {async_kernel-0.18.1 → async_kernel-0.18.3}/.github/release.yml +0 -0
  10. {async_kernel-0.18.1 → async_kernel-0.18.3}/.github/workflows/ci.yml +0 -0
  11. {async_kernel-0.18.1 → async_kernel-0.18.3}/.github/workflows/enforce-label.yml +0 -0
  12. {async_kernel-0.18.1 → async_kernel-0.18.3}/.github/workflows/new_release.yml +0 -0
  13. {async_kernel-0.18.1 → async_kernel-0.18.3}/.github/workflows/pre-commit.yml +0 -0
  14. {async_kernel-0.18.1 → async_kernel-0.18.3}/.github/workflows/publish-docs.yml +0 -0
  15. {async_kernel-0.18.1 → async_kernel-0.18.3}/.github/workflows/publish-to-pypi.yml +0 -0
  16. {async_kernel-0.18.1 → async_kernel-0.18.3}/.gitignore +0 -0
  17. {async_kernel-0.18.1 → async_kernel-0.18.3}/.pre-commit-config.yaml +0 -0
  18. {async_kernel-0.18.1 → async_kernel-0.18.3}/.vscode/launch.json +0 -0
  19. {async_kernel-0.18.1 → async_kernel-0.18.3}/.vscode/settings.json +0 -0
  20. {async_kernel-0.18.1 → async_kernel-0.18.3}/.vscode/spellright.dict +0 -0
  21. {async_kernel-0.18.1 → async_kernel-0.18.3}/CONTRIBUTING.md +0 -0
  22. {async_kernel-0.18.1 → async_kernel-0.18.3}/IPYTHON_LICENSE +0 -0
  23. {async_kernel-0.18.1 → async_kernel-0.18.3}/LICENSE +0 -0
  24. {async_kernel-0.18.1 → async_kernel-0.18.3}/README.md +0 -0
  25. {async_kernel-0.18.1 → async_kernel-0.18.3}/cliff.toml +0 -0
  26. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/about/changelog.md +0 -0
  27. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/about/contributing.md +0 -0
  28. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/about/index.md +0 -0
  29. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/about/license.md +0 -0
  30. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/index.md +0 -0
  31. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/javascripts/extra.js +0 -0
  32. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/notebooks/caller.ipynb +0 -0
  33. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/notebooks/concurrency.ipynb +0 -0
  34. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/notebooks/custom_kernel.ipynb +0 -0
  35. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/overrides/main.html +0 -0
  36. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/reference/asyncshell.md +0 -0
  37. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/reference/caller.md +0 -0
  38. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/reference/comm.md +0 -0
  39. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/reference/command.md +0 -0
  40. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/reference/common.md +0 -0
  41. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/reference/debugger.md +0 -0
  42. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/reference/event_loop.md +0 -0
  43. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/reference/index.md +0 -0
  44. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/reference/interface.md +0 -0
  45. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/reference/kernel.md +0 -0
  46. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/reference/kernelspec.md +0 -0
  47. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/reference/pending.md +0 -0
  48. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/reference/typing.md +0 -0
  49. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/reference/utils.md +0 -0
  50. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/stylesheets/extra.css +0 -0
  51. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/thread_safety.md +0 -0
  52. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/usage/commands.md +0 -0
  53. {async_kernel-0.18.1 → async_kernel-0.18.3}/docs/usage/index.md +0 -0
  54. {async_kernel-0.18.1 → async_kernel-0.18.3}/hatch_build.py +0 -0
  55. {async_kernel-0.18.1 → async_kernel-0.18.3}/mkdocs.yml +0 -0
  56. {async_kernel-0.18.1 → async_kernel-0.18.3}/pyproject.toml +0 -0
  57. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/__init__.py +0 -0
  58. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/__main__.py +0 -0
  59. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/asyncshell.py +0 -0
  60. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/comm.py +0 -0
  61. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/command.py +0 -0
  62. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/common.py +0 -0
  63. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/compiler.py +0 -0
  64. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/debugger.py +0 -0
  65. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/event_loop/__init__.py +0 -0
  66. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/event_loop/asyncio_guest.py +0 -0
  67. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/event_loop/qt_host.py +0 -0
  68. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/event_loop/run.py +0 -0
  69. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/event_loop/tk_host.py +0 -0
  70. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/interface/__init__.py +0 -0
  71. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/interface/base.py +0 -0
  72. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/interface/callable.py +0 -0
  73. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/interface/zmq.py +0 -0
  74. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/iostream.py +0 -0
  75. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/kernel.py +0 -0
  76. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/kernelspec.py +0 -0
  77. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/pending.py +0 -0
  78. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/py.typed +0 -0
  79. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/resources/logo-32x32.png +0 -0
  80. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/resources/logo-64x64.png +0 -0
  81. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/resources/logo-svg.svg +0 -0
  82. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/typing.py +0 -0
  83. {async_kernel-0.18.1 → async_kernel-0.18.3}/src/async_kernel/utils.py +0 -0
  84. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/__init__.py +0 -0
  85. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/conftest.py +0 -0
  86. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/references.py +0 -0
  87. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_callable_kernel_interface.py +0 -0
  88. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_comm.py +0 -0
  89. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_command.py +0 -0
  90. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_common.py +0 -0
  91. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_compat.py +0 -0
  92. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_debugger.py +0 -0
  93. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_enter_kernel.py +0 -0
  94. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_event_loop.py +0 -0
  95. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_iostream.py +0 -0
  96. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_kernel.py +0 -0
  97. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_kernel_subclass.py +0 -0
  98. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_kernelspec.py +0 -0
  99. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_message_spec.py +0 -0
  100. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_pending.py +0 -0
  101. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_typing.py +0 -0
  102. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_utils.py +0 -0
  103. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/test_zmq_messaging.py +0 -0
  104. {async_kernel-0.18.1 → async_kernel-0.18.3}/tests/utils.py +0 -0
  105. {async_kernel-0.18.1 → async_kernel-0.18.3}/uv.lock +0 -0
@@ -5,6 +5,22 @@ 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.18.3] - 2026-05-06
9
+
10
+ ### <!-- 1 --> 🚀 Features
11
+
12
+ - Include default argument in pack_json_bytes and pack_json_str. [#456](https://github.com/fleming79/async-kernel/pull/456)
13
+
14
+ ## [0.18.2] - 2026-05-03
15
+
16
+ ### <!-- 2 --> 🐛 Fixes
17
+
18
+ - Fix Caller.call_later not sleeping correctly. [#454](https://github.com/fleming79/async-kernel/pull/454)
19
+
20
+ ### <!-- 6 --> 🌀 Miscellaneous
21
+
22
+ - Prepare for release v0.18.2 [#455](https://github.com/fleming79/async-kernel/pull/455)
23
+
8
24
  ## [0.18.1] - 2026-04-26
9
25
 
10
26
  ### <!-- 2 --> 🐛 Fixes
@@ -13,6 +29,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
13
29
 
14
30
  ### <!-- 6 --> 🌀 Miscellaneous
15
31
 
32
+ - Prepare for release v0.18.1 [#453](https://github.com/fleming79/async-kernel/pull/453)
33
+
16
34
  - Check trio is available early when creating a Caller for a trio backend. [#452](https://github.com/fleming79/async-kernel/pull/452)
17
35
 
18
36
  - Remove unnecessary line. [#451](https://github.com/fleming79/async-kernel/pull/451)
@@ -1265,6 +1283,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1265
1283
 
1266
1284
  - Bump the actions group across 1 directory with 2 updates [#3](https://github.com/fleming79/async-kernel/pull/3)
1267
1285
 
1286
+ [0.18.3]: https://github.com/fleming79/async-kernel/compare/v0.18.2..v0.18.3
1287
+ [0.18.2]: https://github.com/fleming79/async-kernel/compare/v0.18.1..v0.18.2
1268
1288
  [0.18.1]: https://github.com/fleming79/async-kernel/compare/v0.18.0..v0.18.1
1269
1289
  [0.18.0]: https://github.com/fleming79/async-kernel/compare/v0.17.1..v0.18.0
1270
1290
  [0.17.1]: https://github.com/fleming79/async-kernel/compare/v0.17.0..v0.17.1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: async-kernel
3
- Version: 0.18.1
3
+ Version: 0.18.3
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.18.1'
22
- __version_tuple__ = version_tuple = (0, 18, 1)
21
+ __version__ = version = '0.18.3'
22
+ __version_tuple__ = version_tuple = (0, 18, 3)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -790,8 +790,8 @@ class Caller(anyio.AsyncContextManagerMixin):
790
790
  """
791
791
 
792
792
  async def _call_later(*args: P.args, **kwargs: P.kwargs) -> T:
793
- if (delay := time.monotonic() - start_time) > 0:
794
- await anyio.sleep(delay)
793
+ if (delay_ := start_time - time.monotonic() + delay) > 0:
794
+ await anyio.sleep(delay_)
795
795
  if inspect.iscoroutine(result := func(*args, **kwargs)):
796
796
  result = await result
797
797
  return result # pyright: ignore[reportReturnType]
@@ -0,0 +1,67 @@
1
+ from __future__ import annotations
2
+
3
+ import importlib.util
4
+ from typing import TYPE_CHECKING, Any
5
+
6
+ __all__ = ["pack_json_bytes", "pack_json_str", "unpack_json"]
7
+
8
+
9
+ if TYPE_CHECKING:
10
+ from collections.abc import Callable
11
+
12
+ from jupyter_client.jsonutil import json_default
13
+
14
+ def pack_json_bytes(obj: Any, /, default: Callable[[Any], Any] | None = json_default) -> bytes:
15
+ """
16
+ Pack obj into json serialized bytes.
17
+
18
+ Args:
19
+ data: The data to serialize.
20
+ default: A function that should return a serializable version of obj or raise TypeError.
21
+ """
22
+ ...
23
+
24
+ def pack_json_str(obj: Any, /, default: Callable[[Any], Any] | None = json_default) -> str:
25
+ """
26
+ Pack obj into json serialized string.
27
+
28
+ Args:
29
+ data: The data to serialize.
30
+ default: A function that should return a serializable version of obj or raise TypeError.
31
+ """
32
+ ...
33
+
34
+ def unpack_json(data: str | bytes, /) -> Any:
35
+ "Deserialize data in a Python object."
36
+ ...
37
+
38
+
39
+ if importlib.util.find_spec("jupyter_client"):
40
+ import json
41
+
42
+ from jupyter_client.jsonutil import json_default
43
+
44
+ def _jc_pack_bytes(obj: Any, default: Callable[[Any], Any] | None = json_default) -> bytes:
45
+ return json.dumps(obj, default=default).encode()
46
+
47
+ def _jc_pack_str(obj: Any, default: Callable[[Any], Any] | None = json_default) -> str:
48
+ return json.dumps(obj, allow_nan=False, default=default)
49
+
50
+ pack_json_bytes, pack_json_str, unpack_json = _jc_pack_bytes, _jc_pack_str, json.loads
51
+
52
+ else:
53
+ json_default = None # pragma: no cover
54
+
55
+
56
+ if importlib.util.find_spec("orjson"):
57
+ import orjson
58
+
59
+ ORJSON_OPTION = orjson.OPT_SERIALIZE_NUMPY | orjson.OPT_NAIVE_UTC | orjson.OPT_UTC_Z
60
+
61
+ def _oj_pack_bytes(obj: Any, default: Callable[[Any], Any] | None = json_default) -> bytes:
62
+ return orjson.dumps(obj, default=default, option=ORJSON_OPTION)
63
+
64
+ def _oj_pack_str(obj: Any, default: Callable[[Any], Any] | None = json_default) -> str:
65
+ return orjson.dumps(obj, default=default, option=ORJSON_OPTION).decode()
66
+
67
+ pack_json_bytes, pack_json_str, unpack_json = _oj_pack_bytes, _oj_pack_str, orjson.loads
@@ -124,9 +124,9 @@ class TestCaller:
124
124
 
125
125
  async def test_sync(self):
126
126
  async with Caller("manual") as caller:
127
- is_called = Event()
128
- caller.call_later(0.01, is_called.set)
129
- await is_called
127
+ start_time = time.monotonic()
128
+ dt = await caller.call_later(0.01, time.monotonic) - start_time
129
+ assert dt > 0.01
130
130
 
131
131
  async def test_manual_stop(self):
132
132
  async with Caller("manual") as caller:
@@ -1,45 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import importlib.util
4
- from typing import TYPE_CHECKING, Any
5
-
6
- __all__ = ["pack_json_bytes", "pack_json_str", "unpack_json"]
7
-
8
-
9
- if TYPE_CHECKING:
10
- from collections.abc import Callable
11
-
12
- pack_json_bytes: Callable[[Any], bytes]
13
- pack_json_str: Callable[[Any], str]
14
- unpack_json: Callable[[str | bytes], Any]
15
-
16
-
17
- if importlib.util.find_spec("jupyter_client"):
18
- import json
19
-
20
- from jupyter_client.jsonutil import json_default
21
-
22
- def _jc_pack_bytes(data: Any) -> bytes:
23
- return json.dumps(data, default=json_default).encode()
24
-
25
- def _jc_pack_str(data: Any) -> str:
26
- return json.dumps(data, default=json_default)
27
-
28
- pack_json_bytes, pack_json_str, unpack_json = _jc_pack_bytes, _jc_pack_str, json.loads
29
-
30
- else:
31
- json_default = None # pragma: no cover
32
-
33
-
34
- if importlib.util.find_spec("orjson"):
35
- import orjson
36
-
37
- ORJSON_OPTION = orjson.OPT_SERIALIZE_NUMPY | orjson.OPT_NAIVE_UTC | orjson.OPT_UTC_Z
38
-
39
- def _oj_pack_bytes(data) -> bytes:
40
- return orjson.dumps(data, default=json_default, option=ORJSON_OPTION)
41
-
42
- def _oj_pack_str(data) -> str:
43
- return orjson.dumps(data, default=json_default, option=ORJSON_OPTION).decode()
44
-
45
- pack_json_bytes, pack_json_str, unpack_json = _oj_pack_bytes, _oj_pack_str, orjson.loads
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes