conkernelclient 0.0.17__tar.gz → 0.0.19__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.
- {conkernelclient-0.0.17/conkernelclient.egg-info → conkernelclient-0.0.19}/PKG-INFO +2 -2
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/conkernelclient/__init__.py +1 -1
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/conkernelclient/_modidx.py +2 -2
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/conkernelclient/core.py +3 -0
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/conkernelclient/ops.py +13 -22
- {conkernelclient-0.0.17 → conkernelclient-0.0.19/conkernelclient.egg-info}/PKG-INFO +2 -2
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/conkernelclient.egg-info/requires.txt +1 -1
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/pyproject.toml +1 -1
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/tests/test_races.py +1 -2
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/LICENSE +0 -0
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/MANIFEST.in +0 -0
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/README.md +0 -0
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/conkernelclient.egg-info/SOURCES.txt +0 -0
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/conkernelclient.egg-info/dependency_links.txt +0 -0
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/conkernelclient.egg-info/entry_points.txt +0 -0
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/conkernelclient.egg-info/top_level.txt +0 -0
- {conkernelclient-0.0.17 → conkernelclient-0.0.19}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: conkernelclient
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.19
|
|
4
4
|
Summary: Concurrent-safe Jupyter KernelClient
|
|
5
5
|
Author-email: Jeremy Howard <github@jhoward.fastmail.fm>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -14,7 +14,7 @@ Description-Content-Type: text/markdown
|
|
|
14
14
|
License-File: LICENSE
|
|
15
15
|
Requires-Dist: jupyter_client
|
|
16
16
|
Requires-Dist: fastcore>=2.1.17
|
|
17
|
-
Requires-Dist: jupywire>=0.
|
|
17
|
+
Requires-Dist: jupywire>=0.1.4
|
|
18
18
|
Provides-Extra: dev
|
|
19
19
|
Requires-Dist: ipykernel; extra == "dev"
|
|
20
20
|
Requires-Dist: ipymini>=0.1.17; extra == "dev"
|
|
@@ -27,6 +27,8 @@ d = { 'settings': { 'branch': 'main',
|
|
|
27
27
|
'conkernelclient.core.ConKernelClient.wait_for_ready': ( 'core.html#conkernelclient.wait_for_ready',
|
|
28
28
|
'conkernelclient/core.py'),
|
|
29
29
|
'conkernelclient.core.ConKernelManager': ('core.html#conkernelmanager', 'conkernelclient/core.py'),
|
|
30
|
+
'conkernelclient.core.ConKernelManager.__init__': ( 'core.html#conkernelmanager.__init__',
|
|
31
|
+
'conkernelclient/core.py'),
|
|
30
32
|
'conkernelclient.core.ConKernelManager._transport_encryption_default': ( 'core.html#conkernelmanager._transport_encryption_default',
|
|
31
33
|
'conkernelclient/core.py'),
|
|
32
34
|
'conkernelclient.core.DeadKernelError': ('core.html#deadkernelerror', 'conkernelclient/core.py'),
|
|
@@ -71,10 +73,8 @@ d = { 'settings': { 'branch': 'main',
|
|
|
71
73
|
'conkernelclient.ops._ReqProxy.__getattr__': ( 'ops.html#_reqproxy.__getattr__',
|
|
72
74
|
'conkernelclient/ops.py'),
|
|
73
75
|
'conkernelclient.ops._ReqProxy.__init__': ('ops.html#_reqproxy.__init__', 'conkernelclient/ops.py'),
|
|
74
|
-
'conkernelclient.ops.iopub_msgs': ('ops.html#iopub_msgs', 'conkernelclient/ops.py'),
|
|
75
76
|
'conkernelclient.ops.iopub_streams': ('ops.html#iopub_streams', 'conkernelclient/ops.py'),
|
|
76
77
|
'conkernelclient.ops.iter_timeout': ('ops.html#iter_timeout', 'conkernelclient/ops.py'),
|
|
77
|
-
'conkernelclient.ops.parent_id': ('ops.html#parent_id', 'conkernelclient/ops.py'),
|
|
78
78
|
'conkernelclient.ops.parse_expr': ('ops.html#parse_expr', 'conkernelclient/ops.py'),
|
|
79
79
|
'conkernelclient.ops.reconnect': ('ops.html#reconnect', 'conkernelclient/ops.py'),
|
|
80
80
|
'conkernelclient.ops.run_kernel': ('ops.html#run_kernel', 'conkernelclient/ops.py')}}}
|
|
@@ -186,5 +186,8 @@ async def astop_channels(self:ConKernelClient):
|
|
|
186
186
|
# %% ../nbs/00_core.ipynb #b828c222
|
|
187
187
|
class ConKernelManager(AsyncKernelManager):
|
|
188
188
|
client_class,client_factory = ConKernelClient,Type(ConKernelClient)
|
|
189
|
+
def __init__(self, *args, kernel_spec=None, **kwargs):
|
|
190
|
+
super().__init__(*args, **kwargs)
|
|
191
|
+
if kernel_spec is not None: self._kernel_spec = kernel_spec
|
|
189
192
|
@default('transport_encryption')
|
|
190
193
|
def _transport_encryption_default(self): return 'auto'
|
|
@@ -5,14 +5,17 @@ Docs: https://AnswerDotAI.github.io/conkernelclient/ops.html.md"""
|
|
|
5
5
|
# AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/01_ops.ipynb.
|
|
6
6
|
|
|
7
7
|
# %% auto #0
|
|
8
|
-
__all__ = ['default_timeout', '
|
|
9
|
-
'
|
|
8
|
+
__all__ = ['default_timeout', 'iter_timeout', 'iopub_streams', 'EvalError', 'parse_expr', 'run_kernel', 'reconnect', 'parent_id',
|
|
9
|
+
'iopub_msgs', 'output_types']
|
|
10
10
|
|
|
11
11
|
# %% ../nbs/01_ops.ipynb #23936f1c
|
|
12
12
|
from fastcore.utils import *
|
|
13
13
|
from fastcore.ansi import strip_ansi
|
|
14
14
|
from fastcore.nbio import msgs2outs, preferred_out
|
|
15
15
|
from .core import ConKernelClient, ConKernelManager, DeadKernelError
|
|
16
|
+
from jupywire.ops import parent_id, iopub_msgs, output_types
|
|
17
|
+
from jupyter_client.kernelspec import KernelSpec
|
|
18
|
+
_all_ = ['parent_id', 'iopub_msgs', 'output_types']
|
|
16
19
|
from contextlib import asynccontextmanager
|
|
17
20
|
from ast import literal_eval
|
|
18
21
|
from queue import Empty
|
|
@@ -21,10 +24,6 @@ import asyncio, time
|
|
|
21
24
|
# %% ../nbs/01_ops.ipynb #d62f6b51
|
|
22
25
|
default_timeout = 10
|
|
23
26
|
|
|
24
|
-
def parent_id(msg):
|
|
25
|
-
"The `msg_id` of the request this `msg` responds to, or None"
|
|
26
|
-
return nested_idx(msg, "parent_header", "msg_id") or None
|
|
27
|
-
|
|
28
27
|
def iter_timeout(timeout=None, default=default_timeout):
|
|
29
28
|
"Yield remaining seconds until `timeout` expires, using monotonic time"
|
|
30
29
|
end = time.monotonic() + (timeout or default)
|
|
@@ -51,17 +50,7 @@ async def iopub_flush(self:ConKernelClient, timeout=0.1):
|
|
|
51
50
|
while True: await self.get_iopub_msg(timeout=timeout)
|
|
52
51
|
except Empty: pass
|
|
53
52
|
|
|
54
|
-
# %% ../nbs/01_ops.ipynb #add288fe
|
|
55
|
-
output_types = {'stream', 'execute_result', 'display_data', 'error'}
|
|
56
|
-
|
|
57
|
-
|
|
58
53
|
# %% ../nbs/01_ops.ipynb #ebdbd6eb
|
|
59
|
-
def iopub_msgs(msgs, msg_type=None):
|
|
60
|
-
"Filter iopub `msgs` by `msg_type` - a single type, or a collection of types (all messages if None)"
|
|
61
|
-
if msg_type is None: return msgs
|
|
62
|
-
types = {msg_type} if isinstance(msg_type, str) else msg_type
|
|
63
|
-
return [m for m in msgs if m['msg_type'] in types]
|
|
64
|
-
|
|
65
54
|
def iopub_streams(msgs, name=None):
|
|
66
55
|
"The stream messages in `msgs`, optionally only stream `name` ('stdout'/'stderr')"
|
|
67
56
|
streams = iopub_msgs(msgs, 'stream')
|
|
@@ -116,11 +105,10 @@ def reply(self:ConKernelClient,
|
|
|
116
105
|
code, # A string of code in the kernel's language.
|
|
117
106
|
user_expressions:NoneType=None, # A dict mapping names to expressions to be evaluated in the user's dict
|
|
118
107
|
allow_stdin:NoneType=None, # Flag for whether the kernel can send stdin requests to frontends.
|
|
119
|
-
cts_typ:str='code', timeout:int=None, msg_id:NoneType=None,
|
|
108
|
+
cts_typ:str='code', timeout:int=None, msg_id:NoneType=None, **kw
|
|
120
109
|
):
|
|
121
|
-
if priority: assert self.priority, 'no priority subshell configured'
|
|
122
110
|
return self.execute(code, user_expressions=user_expressions, allow_stdin=allow_stdin, reply=True,
|
|
123
|
-
cts_typ=cts_typ, timeout=timeout or getattr(self, 'default_timeout', default_timeout), msg_id=msg_id,
|
|
111
|
+
cts_typ=cts_typ, timeout=timeout or getattr(self, 'default_timeout', default_timeout), msg_id=msg_id, **kw)
|
|
124
112
|
|
|
125
113
|
# %% ../nbs/01_ops.ipynb #5de02acb
|
|
126
114
|
from jupywire.ops import EvalOps, EvalException, try_eval
|
|
@@ -215,12 +203,15 @@ async def interrupt(self:ConKernelClient, timeout=5):
|
|
|
215
203
|
# %% ../nbs/01_ops.ipynb #edaf42c9
|
|
216
204
|
@asynccontextmanager
|
|
217
205
|
async def run_kernel(
|
|
218
|
-
kernel_name='python3', # Kernelspec name to launch
|
|
206
|
+
kernel_name='python3', # Kernelspec name to launch, or display name when `argv` is given
|
|
207
|
+
argv=None, # Kernel argv; bypasses kernelspec discovery when provided
|
|
219
208
|
manager_cls=ConKernelManager, # Manager class, e.g. a subclass customizing launch
|
|
220
209
|
**kwargs # Passed to `start_kernel` (e.g. `env`, `cwd`)
|
|
221
210
|
):
|
|
222
|
-
"Start a kernel,
|
|
223
|
-
|
|
211
|
+
"Start a named or direct-argv kernel, yielding `(km, kc)`, and always shut it down"
|
|
212
|
+
manager_kwargs = dict(kernel_name=kernel_name)
|
|
213
|
+
if argv is not None: manager_kwargs['kernel_spec'] = KernelSpec(argv=argv, display_name=kernel_name)
|
|
214
|
+
km = manager_cls(**manager_kwargs)
|
|
224
215
|
await km.start_kernel(**kwargs)
|
|
225
216
|
kc = await km.client().start_channels()
|
|
226
217
|
try: yield km, kc
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: conkernelclient
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.19
|
|
4
4
|
Summary: Concurrent-safe Jupyter KernelClient
|
|
5
5
|
Author-email: Jeremy Howard <github@jhoward.fastmail.fm>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -14,7 +14,7 @@ Description-Content-Type: text/markdown
|
|
|
14
14
|
License-File: LICENSE
|
|
15
15
|
Requires-Dist: jupyter_client
|
|
16
16
|
Requires-Dist: fastcore>=2.1.17
|
|
17
|
-
Requires-Dist: jupywire>=0.
|
|
17
|
+
Requires-Dist: jupywire>=0.1.4
|
|
18
18
|
Provides-Extra: dev
|
|
19
19
|
Requires-Dist: ipykernel; extra == "dev"
|
|
20
20
|
Requires-Dist: ipymini>=0.1.17; extra == "dev"
|
|
@@ -37,11 +37,10 @@ class LockedClient(ConKernelClient):
|
|
|
37
37
|
class LockedKernelManager(ConKernelManager):
|
|
38
38
|
client_class,client_factory = LockedClient,Type(LockedClient)
|
|
39
39
|
|
|
40
|
-
|
|
41
40
|
def test_burst_replies_under_send_jitter():
|
|
42
41
|
"20 pending replies at once, every send jittered: the reader must route each reply to its waiter."
|
|
43
42
|
async def _run():
|
|
44
|
-
async with run_kernel(
|
|
43
|
+
async with run_kernel("ipymini", ["ipymini", "-f", "{connection_file}"], manager_cls=LockedKernelManager) as (km, kc):
|
|
45
44
|
reps = [kc.execute(f"x{i} = {i}; x{i}", reply=True, timeout=30) for i in range(20)]
|
|
46
45
|
for i, r in enumerate(await asyncio.gather(*reps)): assert r["content"]["status"] == "ok", (i, r["content"])
|
|
47
46
|
asyncio.run(_run())
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conkernelclient-0.0.17 → conkernelclient-0.0.19}/conkernelclient.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|