ominfra 0.0.0.dev133__py3-none-any.whl → 0.0.0.dev134__py3-none-any.whl

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.
ominfra/pyremote.py CHANGED
@@ -17,9 +17,6 @@ import textwrap
17
17
  import typing as ta
18
18
  import zlib
19
19
 
20
- from omlish.lite.check import check_isinstance
21
- from omlish.lite.check import check_none
22
-
23
20
 
24
21
  ##
25
22
 
@@ -32,8 +29,8 @@ _PYREMOTE_BOOTSTRAP_ARGV0_VAR = '_OPYR_ARGV0'
32
29
 
33
30
  _PYREMOTE_BOOTSTRAP_ACK0 = b'OPYR000\n'
34
31
  _PYREMOTE_BOOTSTRAP_ACK1 = b'OPYR001\n'
35
- _PYREMOTE_BOOTSTRAP_ACK2 = b'OPYR001\n'
36
- _PYREMOTE_BOOTSTRAP_ACK3 = b'OPYR001\n'
32
+ _PYREMOTE_BOOTSTRAP_ACK2 = b'OPYR002\n'
33
+ _PYREMOTE_BOOTSTRAP_ACK3 = b'OPYR003\n'
37
34
 
38
35
  _PYREMOTE_BOOTSTRAP_PROC_TITLE_FMT = '(pyremote:%s)'
39
36
 
@@ -256,6 +253,8 @@ class PyremoteBootstrapDriver:
256
253
  self._main_src = main_src
257
254
  self._main_z = zlib.compress(main_src.encode('utf-8'))
258
255
 
256
+ #
257
+
259
258
  @dc.dataclass(frozen=True)
260
259
  class Read:
261
260
  sz: int
@@ -272,7 +271,7 @@ class PyremoteBootstrapDriver:
272
271
  pid: int
273
272
  env_info: PyremoteEnvInfo
274
273
 
275
- def __call__(self) -> ta.Generator[ta.Union[Read, Write], ta.Optional[bytes], Result]:
274
+ def gen(self) -> ta.Generator[ta.Union[Read, Write], ta.Optional[bytes], Result]:
276
275
  # Read first ack
277
276
  yield from self._expect(_PYREMOTE_BOOTSTRAP_ACK0)
278
277
 
@@ -281,8 +280,8 @@ class PyremoteBootstrapDriver:
281
280
  pid = struct.unpack('<Q', d)[0]
282
281
 
283
282
  # Write main src
284
- check_none((yield self.Write(struct.pack('<I', len(self._main_z)))))
285
- check_none((yield self.Write(self._main_z)))
283
+ yield from self._write(struct.pack('<I', len(self._main_z)))
284
+ yield from self._write(self._main_z)
286
285
 
287
286
  # Read second and third ack
288
287
  yield from self._expect(_PYREMOTE_BOOTSTRAP_ACK1)
@@ -305,7 +304,9 @@ class PyremoteBootstrapDriver:
305
304
  )
306
305
 
307
306
  def _read(self, sz: int) -> ta.Generator[Read, bytes, bytes]:
308
- d = check_isinstance((yield self.Read(sz)), bytes)
307
+ d = yield self.Read(sz)
308
+ if not isinstance(d, bytes):
309
+ raise self.ProtocolError(f'Expected bytes after read, got {d!r}')
309
310
  if len(d) != sz:
310
311
  raise self.ProtocolError(f'Read {len(d)} bytes, expected {sz}')
311
312
  return d
@@ -315,17 +316,47 @@ class PyremoteBootstrapDriver:
315
316
  if d != e:
316
317
  raise self.ProtocolError(f'Read {d!r}, expected {e!r}')
317
318
 
319
+ def _write(self, d: bytes) -> ta.Generator[Write, ta.Optional[bytes], None]:
320
+ i = yield self.Write(d)
321
+ if i is not None:
322
+ raise self.ProtocolError('Unexpected input after write')
323
+
324
+ #
325
+
326
+ def run(self, stdin: ta.IO, stdout: ta.IO) -> Result:
327
+ gen = self.gen()
328
+
329
+ gi: bytes | None = None
330
+ while True:
331
+ try:
332
+ if gi is not None:
333
+ go = gen.send(gi)
334
+ else:
335
+ go = next(gen)
336
+ except StopIteration as e:
337
+ return e.value
338
+
339
+ if isinstance(go, self.Read):
340
+ gi = stdout.read(go.sz)
341
+ elif isinstance(go, self.Write):
342
+ gi = None
343
+ stdin.write(go.d)
344
+ stdin.flush()
345
+ else:
346
+ raise TypeError(go)
347
+
318
348
 
319
349
  ##
320
350
 
321
351
 
322
352
  @dc.dataclass(frozen=True)
323
- class PyremoteBootstrapPayloadRuntime:
353
+ class PyremotePayloadRuntime:
324
354
  input: ta.BinaryIO
325
355
  main_src: str
356
+ env_info: PyremoteEnvInfo
326
357
 
327
358
 
328
- def pyremote_bootstrap_finalize() -> PyremoteBootstrapPayloadRuntime:
359
+ def pyremote_bootstrap_finalize() -> PyremotePayloadRuntime:
329
360
  # Restore original argv0
330
361
  sys.executable = os.environ.pop(_PYREMOTE_BOOTSTRAP_ARGV0_VAR)
331
362
 
@@ -351,7 +382,8 @@ def pyremote_bootstrap_finalize() -> PyremoteBootstrapPayloadRuntime:
351
382
  os.write(1, _PYREMOTE_BOOTSTRAP_ACK3)
352
383
 
353
384
  # Return
354
- return PyremoteBootstrapPayloadRuntime(
385
+ return PyremotePayloadRuntime(
355
386
  input=os.fdopen(_PYREMOTE_BOOTSTRAP_COMM_FD, 'rb', 0),
356
387
  main_src=main_src,
388
+ env_info=env_info,
357
389
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ominfra
3
- Version: 0.0.0.dev133
3
+ Version: 0.0.0.dev134
4
4
  Summary: ominfra
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,8 +12,8 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omdev==0.0.0.dev133
16
- Requires-Dist: omlish==0.0.0.dev133
15
+ Requires-Dist: omdev==0.0.0.dev134
16
+ Requires-Dist: omlish==0.0.0.dev134
17
17
  Provides-Extra: all
18
18
  Requires-Dist: paramiko~=3.5; extra == "all"
19
19
  Requires-Dist: asyncssh~=2.18; extra == "all"
@@ -3,7 +3,7 @@ ominfra/__about__.py,sha256=6i1AoruFYQCd-PyhhbDQDWY2d1tiQu9nkwWr-fXAqfY,705
3
3
  ominfra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  ominfra/cmds.py,sha256=E0AfnvEmnKntXWvmLW5L05_NeDpBET1VBXn7vV6EwBQ,2083
5
5
  ominfra/configs.py,sha256=8aU1Qmbr-qjaE2iP3gAbA2SWJYMPZ-uGK007L01PoOI,1727
6
- ominfra/pyremote.py,sha256=U7OYc4iF1HGRcESdq_KhoS1RqTWHk4bq8yFRORFX4O0,9264
6
+ ominfra/pyremote.py,sha256=nqzmMKZvUMiw2y65v8VVjx832sKfSB7jBOkP8SQBmGI,10121
7
7
  ominfra/ssh.py,sha256=jQpc4WvkMckIfk4vILda8zFaeharRqc_6wxW50b0OjQ,5431
8
8
  ominfra/threadworkers.py,sha256=oX4ubZn7h932saXpRIJu2MNhBExgGGMuGhdXarZxLJw,4948
9
9
  ominfra/clouds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -100,9 +100,9 @@ ominfra/tailscale/api.py,sha256=C5-t_b6jZXUWcy5k8bXm7CFnk73pSdrlMOgGDeGVrpw,1370
100
100
  ominfra/tailscale/cli.py,sha256=DSGp4hn5xwOW-l_u_InKlSF6kIobxtUtVssf_73STs0,3567
101
101
  ominfra/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
102
  ominfra/tools/listresources.py,sha256=4qVg5txsb10EHhvqXXeM6gJ2jx9LbroEnPydDv1uXs0,6176
103
- ominfra-0.0.0.dev133.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
104
- ominfra-0.0.0.dev133.dist-info/METADATA,sha256=_KW6-EvKpnZ8VyQPHOE1ueDkQ8zjfd2CJ-VAl_WsIbY,731
105
- ominfra-0.0.0.dev133.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
106
- ominfra-0.0.0.dev133.dist-info/entry_points.txt,sha256=kgecQ2MgGrM9qK744BoKS3tMesaC3yjLnl9pa5CRczg,37
107
- ominfra-0.0.0.dev133.dist-info/top_level.txt,sha256=E-b2OHkk_AOBLXHYZQ2EOFKl-_6uOGd8EjeG-Zy6h_w,8
108
- ominfra-0.0.0.dev133.dist-info/RECORD,,
103
+ ominfra-0.0.0.dev134.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
104
+ ominfra-0.0.0.dev134.dist-info/METADATA,sha256=pJ8EYFED29tv1T8wzhlFFm2rKeNXXS2c4Iw8hjFEvSA,731
105
+ ominfra-0.0.0.dev134.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
106
+ ominfra-0.0.0.dev134.dist-info/entry_points.txt,sha256=kgecQ2MgGrM9qK744BoKS3tMesaC3yjLnl9pa5CRczg,37
107
+ ominfra-0.0.0.dev134.dist-info/top_level.txt,sha256=E-b2OHkk_AOBLXHYZQ2EOFKl-_6uOGd8EjeG-Zy6h_w,8
108
+ ominfra-0.0.0.dev134.dist-info/RECORD,,