conkernelclient 0.0.18__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: conkernelclient
3
- Version: 0.0.18
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
@@ -1,3 +1,3 @@
1
- __version__ = "0.0.18"
1
+ __version__ = "0.0.19"
2
2
  from .core import *
3
3
  from .ops import *
@@ -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'),
@@ -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'
@@ -14,6 +14,7 @@ from fastcore.ansi import strip_ansi
14
14
  from fastcore.nbio import msgs2outs, preferred_out
15
15
  from .core import ConKernelClient, ConKernelManager, DeadKernelError
16
16
  from jupywire.ops import parent_id, iopub_msgs, output_types
17
+ from jupyter_client.kernelspec import KernelSpec
17
18
  _all_ = ['parent_id', 'iopub_msgs', 'output_types']
18
19
  from contextlib import asynccontextmanager
19
20
  from ast import literal_eval
@@ -202,12 +203,15 @@ async def interrupt(self:ConKernelClient, timeout=5):
202
203
  # %% ../nbs/01_ops.ipynb #edaf42c9
203
204
  @asynccontextmanager
204
205
  async def run_kernel(
205
- 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
206
208
  manager_cls=ConKernelManager, # Manager class, e.g. a subclass customizing launch
207
209
  **kwargs # Passed to `start_kernel` (e.g. `env`, `cwd`)
208
210
  ):
209
- "Start a kernel, yield `(km, kc)` with channels running, and always shut both down"
210
- km = manager_cls(kernel_name=kernel_name)
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)
211
215
  await km.start_kernel(**kwargs)
212
216
  kc = await km.client().start_channels()
213
217
  try: yield km, kc
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: conkernelclient
3
- Version: 0.0.18
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
@@ -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(kernel_name="ipymini", manager_cls=LockedKernelManager) as (km, kc):
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())