omlish 0.0.0.dev308__py3-none-any.whl → 0.0.0.dev309__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.
omlish/__about__.py CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev308'
2
- __revision__ = '78cf17d1a6de1ee32440b0b62de28fdd17f9bedc'
1
+ __version__ = '0.0.0.dev309'
2
+ __revision__ = '1304f03bec6edcdf467784eeceb7c0e00a7ec49c'
3
3
 
4
4
 
5
5
  #
@@ -14,7 +14,7 @@ async def asyncio_wait_until_can_connect(
14
14
  host: ta.Any = None,
15
15
  port: ta.Any = None,
16
16
  *,
17
- timeout: ta.Optional[TimeoutLike] = None,
17
+ timeout: TimeoutLike = None,
18
18
  on_fail: ta.Optional[ta.Callable[[BaseException], None]] = None,
19
19
  sleep_s: float = .1,
20
20
  exception: ta.Union[ta.Type[BaseException], ta.Tuple[ta.Type[BaseException], ...]] = (Exception,),
@@ -131,7 +131,7 @@ class AsyncioProcessCommunicator:
131
131
  async def communicate(
132
132
  self,
133
133
  input: ta.Any = None, # noqa
134
- timeout: ta.Optional[TimeoutLike] = None,
134
+ timeout: TimeoutLike = None,
135
135
  ) -> Communication:
136
136
  return await asyncio_maybe_timeout(self._communicate(input), timeout)
137
137
 
@@ -144,7 +144,7 @@ class AsyncioSubprocesses(AbstractAsyncSubprocesses):
144
144
  self,
145
145
  proc: asyncio.subprocess.Process,
146
146
  input: ta.Any = None, # noqa
147
- timeout: ta.Optional[TimeoutLike] = None,
147
+ timeout: TimeoutLike = None,
148
148
  ) -> ta.Tuple[ta.Optional[bytes], ta.Optional[bytes]]:
149
149
  return await AsyncioProcessCommunicator(proc).communicate(input, timeout) # noqa
150
150
 
@@ -155,7 +155,7 @@ class AsyncioSubprocesses(AbstractAsyncSubprocesses):
155
155
  self,
156
156
  *cmd: str,
157
157
  shell: bool = False,
158
- timeout: ta.Optional[TimeoutLike] = None,
158
+ timeout: TimeoutLike = None,
159
159
  **kwargs: ta.Any,
160
160
  ) -> ta.AsyncGenerator[asyncio.subprocess.Process, None]:
161
161
  with self.prepare_and_wrap( *cmd, shell=shell, **kwargs) as (cmd, kwargs): # noqa
@@ -15,7 +15,7 @@ AwaitableT = ta.TypeVar('AwaitableT', bound=ta.Awaitable)
15
15
 
16
16
  def asyncio_maybe_timeout(
17
17
  fut: AwaitableT,
18
- timeout: ta.Optional[TimeoutLike] = None,
18
+ timeout: TimeoutLike = None,
19
19
  ) -> AwaitableT:
20
20
  if timeout is not None:
21
21
  fut = asyncio.wait_for(fut, Timeout.of(timeout)()) # type: ignore
omlish/daemons/daemon.py CHANGED
@@ -109,7 +109,7 @@ class Daemon:
109
109
 
110
110
  def wait_sync(
111
111
  self,
112
- timeout: lang.TimeoutLike = lang.Timeout.Default,
112
+ timeout: lang.TimeoutLike = lang.Timeout.DEFAULT,
113
113
  *,
114
114
  max_tries: int | None = None,
115
115
  ) -> None:
@@ -140,7 +140,7 @@ class Daemon:
140
140
 
141
141
  return launcher.launch()
142
142
 
143
- def launch(self, timeout: lang.TimeoutLike = lang.Timeout.Default) -> None:
143
+ def launch(self, timeout: lang.TimeoutLike = lang.Timeout.DEFAULT) -> None:
144
144
  self.launch_no_wait()
145
145
 
146
146
  self.wait_sync(timeout)
omlish/lite/timeouts.py CHANGED
@@ -8,7 +8,7 @@ import time
8
8
  import typing as ta
9
9
 
10
10
 
11
- TimeoutLike = ta.Union['Timeout', ta.Type['Timeout.Default'], ta.Iterable['TimeoutLike'], float] # ta.TypeAlias
11
+ TimeoutLike = ta.Union['Timeout', ta.Type['Timeout.DEFAULT'], ta.Iterable['TimeoutLike'], float, None] # ta.TypeAlias
12
12
 
13
13
 
14
14
  ##
@@ -54,7 +54,7 @@ class Timeout(abc.ABC):
54
54
 
55
55
  #
56
56
 
57
- class Default:
57
+ class DEFAULT: # Noqa
58
58
  def __new__(cls, *args, **kwargs): # noqa
59
59
  raise TypeError
60
60
 
@@ -65,7 +65,7 @@ class Timeout(abc.ABC):
65
65
  @classmethod
66
66
  def of(
67
67
  cls,
68
- obj: ta.Optional[TimeoutLike],
68
+ obj: TimeoutLike,
69
69
  default: ta.Union[TimeoutLike, ta.Type[_NOT_SPECIFIED]] = _NOT_SPECIFIED,
70
70
  ) -> 'Timeout':
71
71
  if obj is None:
@@ -80,8 +80,8 @@ class Timeout(abc.ABC):
80
80
  elif isinstance(obj, ta.Iterable):
81
81
  return CompositeTimeout(*[Timeout.of(c) for c in obj])
82
82
 
83
- elif obj is Timeout.Default:
84
- if default is Timeout._NOT_SPECIFIED or default is Timeout.Default:
83
+ elif obj is Timeout.DEFAULT:
84
+ if default is Timeout._NOT_SPECIFIED or default is Timeout.DEFAULT:
85
85
  raise RuntimeError('Must specify a default timeout')
86
86
 
87
87
  else:
@@ -64,7 +64,7 @@ class PidfilePinner(abc.ABC):
64
64
  self,
65
65
  path: str,
66
66
  *,
67
- timeout: ta.Optional[TimeoutLike] = None,
67
+ timeout: TimeoutLike = None,
68
68
  inheritable: bool = False, # Present to match Pidfile kwargs for convenience, but enforced to be False.
69
69
  **kwargs: ta.Any,
70
70
  ) -> ta.Iterator[int]:
omlish/sockets/ports.py CHANGED
@@ -38,7 +38,7 @@ def get_available_ports(
38
38
  *,
39
39
  host: ta.Optional[str] = None,
40
40
  exclude: ta.Optional[ta.Iterable[int]] = None,
41
- timeout: ta.Optional[TimeoutLike] = None,
41
+ timeout: TimeoutLike = None,
42
42
  ) -> ta.List[int]:
43
43
  exclude = set(exclude or [])
44
44
 
omlish/sockets/wait.py CHANGED
@@ -14,7 +14,7 @@ from ..lite.timeouts import TimeoutLike
14
14
  def socket_can_connect(
15
15
  address: ta.Any,
16
16
  *,
17
- timeout: ta.Optional[TimeoutLike] = None,
17
+ timeout: TimeoutLike = None,
18
18
  on_fail: ta.Optional[ta.Callable[[BaseException], None]] = None,
19
19
  exception: ta.Union[ta.Type[BaseException], ta.Tuple[ta.Type[BaseException], ...]] = (ConnectionRefusedError,),
20
20
  ) -> bool:
@@ -36,7 +36,7 @@ def socket_can_connect(
36
36
  def socket_wait_until_can_connect(
37
37
  address: ta.Any,
38
38
  *,
39
- timeout: ta.Optional[TimeoutLike] = None,
39
+ timeout: TimeoutLike = None,
40
40
  on_fail: ta.Optional[ta.Callable[[BaseException], None]] = None,
41
41
  sleep_s: float = .1,
42
42
  exception: ta.Union[ta.Type[BaseException], ta.Tuple[ta.Type[BaseException], ...]] = (ConnectionRefusedError,),
@@ -1,14 +1,12 @@
1
- """
2
- TODO:
3
- - kill receive loop on __aexit__
4
- """
5
1
  import builtins
2
+ import functools
6
3
  import json
7
4
  import typing as ta
8
5
  import uuid
9
6
 
10
7
  import anyio.abc
11
8
 
9
+ from ... import check
12
10
  from ... import lang
13
11
  from ... import marshal as msh
14
12
  from ...asyncs import anyio as aiu
@@ -54,8 +52,8 @@ class JsonrpcConnection:
54
52
  self._buf = DelimitingBuffer(b'\n')
55
53
  self._response_futures_by_id: dict[Id, aiu.Future[Response]] = {}
56
54
  self._send_lock = anyio.Lock()
55
+ self._shutdown_event = anyio.Event()
57
56
  self._received_eof = False
58
- self._running = True
59
57
 
60
58
  #
61
59
 
@@ -78,7 +76,7 @@ class JsonrpcConnection:
78
76
  return self
79
77
 
80
78
  async def __aexit__(self, exc_type: type[BaseException] | None, *_: object) -> None:
81
- self._running = False
79
+ self._shutdown_event.set()
82
80
 
83
81
  ##
84
82
 
@@ -116,12 +114,28 @@ class JsonrpcConnection:
116
114
  )
117
115
 
118
116
  async def _receive_message_batch(self) -> list[Message] | None:
119
- if self._received_eof:
117
+ check.state(not self._received_eof)
118
+
119
+ if self._shutdown_event.is_set():
120
120
  return None
121
121
 
122
122
  while True:
123
+ maybe_shutdown: lang.Maybe[bool]
124
+ maybe_data: lang.Maybe[lang.Outcome[bytes]]
125
+ (
126
+ maybe_shutdown,
127
+ maybe_data,
128
+ ) = await aiu.gather( # type: ignore
129
+ self._shutdown_event.wait,
130
+ functools.partial(lang.acapture, self._stream.receive),
131
+ take_first=True,
132
+ )
133
+
134
+ if self._shutdown_event.is_set():
135
+ return None
136
+
123
137
  try:
124
- data = await self._stream.receive()
138
+ data = maybe_data.must().unwrap()
125
139
  except self.CLOSED_EXCEPTIONS:
126
140
  data = b''
127
141
  except self.ERROR_EXCEPTIONS as e:
@@ -164,7 +178,7 @@ class JsonrpcConnection:
164
178
  ) -> None:
165
179
  task_status.started()
166
180
 
167
- while self._running:
181
+ while not self._shutdown_event.is_set():
168
182
  msgs = await self._receive_message_batch()
169
183
  if msgs is None:
170
184
  break
@@ -188,7 +202,7 @@ class JsonrpcConnection:
188
202
  method: str,
189
203
  params: Object | None = None,
190
204
  *,
191
- timeout: float | None = None,
205
+ timeout: lang.TimeoutLike | None = lang.Timeout.DEFAULT,
192
206
  ) -> ta.Any:
193
207
  msg_id = _create_id()
194
208
  req = request(msg_id, method, params)
@@ -199,9 +213,9 @@ class JsonrpcConnection:
199
213
  try:
200
214
  await self.send_message(req)
201
215
 
202
- timeout_val = timeout if timeout is not None else self._default_timeout
216
+ timeout_val = lang.Timeout.of(timeout, self._default_timeout)
203
217
  try:
204
- with anyio.fail_after(timeout_val):
218
+ with anyio.fail_after(timeout_val.or_(None)):
205
219
  await fut
206
220
  except TimeoutError as e:
207
221
  raise JsonrpcConnection.TimeoutError(f'Request timed out after {timeout_val} seconds') from e
@@ -22,7 +22,7 @@ class AbstractAsyncSubprocesses(BaseSubprocesses):
22
22
  self,
23
23
  *cmd: str,
24
24
  input: ta.Any = None, # noqa
25
- timeout: ta.Optional[TimeoutLike] = None,
25
+ timeout: TimeoutLike = None,
26
26
  check: bool = False,
27
27
  capture_output: ta.Optional[bool] = None,
28
28
  **kwargs: ta.Any,
@@ -31,7 +31,7 @@ class SubprocessRunOutput(ta.Generic[T]):
31
31
  class SubprocessRun:
32
32
  cmd: ta.Sequence[str]
33
33
  input: ta.Any = None
34
- timeout: ta.Optional[TimeoutLike] = None
34
+ timeout: TimeoutLike = None
35
35
  check: bool = False
36
36
  capture_output: ta.Optional[bool] = None
37
37
  kwargs: ta.Optional[ta.Mapping[str, ta.Any]] = None
@@ -67,7 +67,7 @@ class SubprocessRun:
67
67
  cls,
68
68
  *cmd: str,
69
69
  input: ta.Any = None, # noqa
70
- timeout: ta.Optional[TimeoutLike] = None,
70
+ timeout: TimeoutLike = None,
71
71
  check: bool = False, # noqa
72
72
  capture_output: ta.Optional[bool] = None,
73
73
  **kwargs: ta.Any,
@@ -28,7 +28,7 @@ class AbstractSubprocesses(BaseSubprocesses, abc.ABC):
28
28
  self,
29
29
  *cmd: str,
30
30
  input: ta.Any = None, # noqa
31
- timeout: ta.Optional[TimeoutLike] = None,
31
+ timeout: TimeoutLike = None,
32
32
  check: bool = False,
33
33
  capture_output: ta.Optional[bool] = None,
34
34
  **kwargs: ta.Any,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev308
3
+ Version: 0.0.0.dev309
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=orgsRvtpHu8tdhaCvlP9v3P495OJopYYiHKjK68WtWg,8587
2
- omlish/__about__.py,sha256=8uwTWCC1I_m-H13aDRaDT3swnjnC8reB6e7B8azZYSA,3478
2
+ omlish/__about__.py,sha256=AMalr2v0ecBESsAeIHXFu3Gev9RWMipfQsSGjc671qA,3478
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/c3.py,sha256=rer-TPOFDU6fYq_AWio_AmA-ckZ8JDY5shIzQ_yXfzA,8414
5
5
  omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
@@ -108,10 +108,10 @@ omlish/asyncs/anyio/utils.py,sha256=X2Rz1DGrCJ0zkt1O5cHoMRaYKTPndBj6dzLhb09mVtE,
108
108
  omlish/asyncs/asyncio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
109
  omlish/asyncs/asyncio/all.py,sha256=u2JpMEs-0AJ0Vd8yU10HvWD8rfKxdFfMiwBu2oDeuuQ,313
110
110
  omlish/asyncs/asyncio/channels.py,sha256=X3S951YTjTRDguMSQRlfu74mPuWkNd2ZEUWboLY58-M,1079
111
- omlish/asyncs/asyncio/sockets.py,sha256=oZAPeC545MGeSpVj_uQfy-BbzXsXHesjCkJSiuqKmAI,1271
111
+ omlish/asyncs/asyncio/sockets.py,sha256=QdXWswN9p9jOlaXUSYnCQZtwu1_jSQNWBiKPt6bws6o,1258
112
112
  omlish/asyncs/asyncio/streams.py,sha256=J_d1hgX4Mx9SfyW4DjOzh91PqzZmjOtiIB95ytF8Ygw,1009
113
- omlish/asyncs/asyncio/subprocesses.py,sha256=Ob5oiyue-YYpvQktzI54QpGsl8E0xEKFOVcb_atJ_R8,6935
114
- omlish/asyncs/asyncio/timeouts.py,sha256=LwFx93KSrefBobQoK4-yH5B6M-pbd7NdNksNzLBfLgQ,459
113
+ omlish/asyncs/asyncio/subprocesses.py,sha256=Mvy5cXHbY-JB5Yl57G05c2O7aEMAjSe29Ed_J63pvx0,6896
114
+ omlish/asyncs/asyncio/timeouts.py,sha256=c-DhZi0yFXhJ6NtHa4EhB1Vrr1QDVd-7HBRkr96Q2So,446
115
115
  omlish/asyncs/asyncio/utils.py,sha256=mDjYNm1cylUhQ8slWXwdPoXasuWfafjzu78GHt2Mdig,2437
116
116
  omlish/asyncs/bluelet/LICENSE,sha256=VHf3oPQihOHnWyIR8LcXX0dpONa1lgyJnjWC2qVuRR0,559
117
117
  omlish/asyncs/bluelet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -195,7 +195,7 @@ omlish/configs/processing/names.py,sha256=weHmaTclzgM9lUn3aBtw-kwZ3mc2N-CZlFg3Kd
195
195
  omlish/configs/processing/rewriting.py,sha256=v7PfHtuTn5v_5Y6Au7oMN2Z0nxAMy1iYyO5CXnTvZhs,4226
196
196
  omlish/configs/processing/strings.py,sha256=qFS2oh6z02IaM_q4lTKLdufzkJqAJ6J-Qjrz5S-QJoM,826
197
197
  omlish/daemons/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
- omlish/daemons/daemon.py,sha256=3Wkvu8M_EaCKSpKI5UN5OayRXV0oVdF62tBss9_hlr0,3479
198
+ omlish/daemons/daemon.py,sha256=pUwomapIrUwXLnov9jlA5EU1vp4qEYcIiUxKD3SQyVo,3479
199
199
  omlish/daemons/launching.py,sha256=sNOYW939IGI4ZlLQ0bKxzXj6EyeOiwV7Upqhd5XfoHc,3747
200
200
  omlish/daemons/reparent.py,sha256=7uJ9oPGt9Ud7uA8bDl_SHcuqjcsmXa3kkjp9jf29wOw,585
201
201
  omlish/daemons/services.py,sha256=YYp2SMkJ71WgzOcYSXjWHeAyKKxu3j1dfuJvWkl0Dgw,3492
@@ -529,7 +529,7 @@ omlish/lite/resources.py,sha256=YNSmX1Ohck1aoWRs55a-o5ChVbFJIQhtbqE-XwF55Oc,326
529
529
  omlish/lite/runtime.py,sha256=XQo408zxTdJdppUZqOWHyeUR50VlCpNIExNGHz4U6O4,459
530
530
  omlish/lite/secrets.py,sha256=3Mz3V2jf__XU9qNHcH56sBSw95L3U2UPL24bjvobG0c,816
531
531
  omlish/lite/strings.py,sha256=QGxT1Yh4oI8ycsfeobxnjEhvDob_GiAKLeIhZwo1j24,1986
532
- omlish/lite/timeouts.py,sha256=lhXo0zwpLM7nr2-AliBRui2BO9jh7B8ALxetwOq6hYI,4968
532
+ omlish/lite/timeouts.py,sha256=NX7gfW4FLYBcewMh4Dg_XlWqJkLY1Fom3z_OLSzuK7M,4969
533
533
  omlish/lite/timing.py,sha256=aVu3hEDB_jyTF_ryZI7iU-xg4q8CNwqpp9Apfru_iwY,196
534
534
  omlish/lite/types.py,sha256=fP5EMyBdEp2LmDxcHjUDtwAMdR06ISr9lKOL7smWfHM,140
535
535
  omlish/lite/typing.py,sha256=U3-JaEnkDSYxK4tsu_MzUn3RP6qALBe5FXQXpD-licE,1090
@@ -627,7 +627,7 @@ omlish/os/pidfiles/__main__.py,sha256=AF8TwjK4xgHVnoLAP9dIWgKvT0vGhHJlfDW0tKZ7tx
627
627
  omlish/os/pidfiles/cli.py,sha256=2SSsP4O3VdpsDIMAkWgWSjh_YNIPzCD9l5LNN2qrIjo,2074
628
628
  omlish/os/pidfiles/manager.py,sha256=QphQxIENVVwvBWynLCNU31NwOfLkV43VoTVeYFn2Hac,2351
629
629
  omlish/os/pidfiles/pidfile.py,sha256=9tI5IMVwfPfnni0XMn4x5ptNQgm36n8tLeUNPf50UqU,4394
630
- omlish/os/pidfiles/pinning.py,sha256=v9RlJ4BnJZcaZZXiiRqbmzLluaSOkeeEb_WrbKEClBQ,6643
630
+ omlish/os/pidfiles/pinning.py,sha256=aQgCmvcAqN0lvI70GcSB2TKVX1G4vwbyN_AOHF3-eKE,6630
631
631
  omlish/reflect/__init__.py,sha256=64eHbD6zL6Fhp7FfXb8n9ZHywlODjBN3rm1LMvZ081A,822
632
632
  omlish/reflect/inspect.py,sha256=WCo2YpBYauKw6k758FLlZ_H4Q05rgVPs96fEv9w6zHQ,1538
633
633
  omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
@@ -649,8 +649,8 @@ omlish/sockets/addresses.py,sha256=vbVeQBkzI513H4vRv-JS89QtRbr9U8v5zqkm3oODl_s,1
649
649
  omlish/sockets/bind.py,sha256=J1SfFFFnVf3H5nqESDX2NGEY8DmjyIMUXZciZM33zQY,8003
650
650
  omlish/sockets/handlers.py,sha256=Gj6xZoo4vommge8XvkehYw3B7O4aql2P4qzZIIa0p24,462
651
651
  omlish/sockets/io.py,sha256=lfhTkB7NnAIx9kuQhAkwgsEUXY78Mp1_WtYrIQNS_k8,1408
652
- omlish/sockets/ports.py,sha256=Wm4mRFFz5MdD8KbdaEfT1c4PbJnsuK_iyJlZJE_-8jo,1402
653
- omlish/sockets/wait.py,sha256=aznyOzGa9oNBc31xnyk1S7TylO8hGx7vFyOVsdY3zFE,1585
652
+ omlish/sockets/ports.py,sha256=NQYVvd8IBbQkPl8TnBtupTiv-Htqhc6QBIXJJ6GprnQ,1389
653
+ omlish/sockets/wait.py,sha256=OtLbcoLYzksl4GU0TNbQpzzVWGxp2iRLgo2cGZZfFFM,1559
654
654
  omlish/sockets/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
655
655
  omlish/sockets/server/handlers.py,sha256=PPsb1X5oU9dN8jfztaMGsRiqWTyEANT-1aSLbS6bUVg,3867
656
656
  omlish/sockets/server/server.py,sha256=FkaishIxJuU4it9tTI7wzlGqJYzFGXzDrd_HgV0jAmU,6253
@@ -689,7 +689,7 @@ omlish/specs/jmespath/parser.py,sha256=yfkydotVR4LBhrUTsptL_kLYDoGZrRN9zSEs_76kv
689
689
  omlish/specs/jmespath/scope.py,sha256=UyDsl9rv_c8DCjJBuVIA2ESu1jrgYvuwEKiaJDQKnT0,1590
690
690
  omlish/specs/jmespath/visitor.py,sha256=HVro_6aBGL0CMBy8NRy6vJzWgwsHGB1qJXldX8H7wSg,16592
691
691
  omlish/specs/jsonrpc/__init__.py,sha256=ugIdqHXWZjSy1R1SkwoxstO2GCHEF4W95Ogl3_5_DV4,544
692
- omlish/specs/jsonrpc/conns.py,sha256=Js7DnC48mdnO56-A3wIsgc5ri8CbpAC53USD43eTQSw,6453
692
+ omlish/specs/jsonrpc/conns.py,sha256=zvWnBHuSoGnvbGVk72Usp4IFsLscrzPozqR2hmFjnDI,7029
693
693
  omlish/specs/jsonrpc/errors.py,sha256=-Zgmlo6bV6J8w5f8h9axQgLquIFBHDgIwcpufEH5NsE,707
694
694
  omlish/specs/jsonrpc/marshal.py,sha256=HM736piPGnBZrg8CMLDX-L5fZpegyF6l6JUjzLoSDtk,1852
695
695
  omlish/specs/jsonrpc/types.py,sha256=Se9ecG-_k-kY_Qlt9QD2t3y26oY4sXTcskp6XZfVans,3054
@@ -787,11 +787,11 @@ omlish/sql/tabledefs/lower.py,sha256=YQf8gl1kxD5Fm-vOxV6G0Feh_D9PP1pYwz_vz6XjTPQ
787
787
  omlish/sql/tabledefs/marshal.py,sha256=x8XG0fJLQ6hlwyu957xqnUhr71ouKiRGBWVueZUEMZU,470
788
788
  omlish/sql/tabledefs/tabledefs.py,sha256=lIhvlt0pk6G7RZAtDFsFXm5j0l9BvRfnP7vNGeydHtE,816
789
789
  omlish/subprocesses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
790
- omlish/subprocesses/async_.py,sha256=hPQTWFa3k5CE_s9p1JTY4KdTPOsqLJtq3lGMRznrVpY,2373
790
+ omlish/subprocesses/async_.py,sha256=st7452hRImm6dCwD-Cf293VPeB50xxc8sk_EoRNe_fY,2360
791
791
  omlish/subprocesses/base.py,sha256=W6El-PUKKF9KLAks5LB6kzqs_n3FfkblJ-JOv6NFQbY,6133
792
792
  omlish/subprocesses/editor.py,sha256=tVU1EQsEhCM242HheylQvEsqaAZYnT61kMhlzZcdk5U,2628
793
- omlish/subprocesses/run.py,sha256=3jwSnQJvFMDMHmJvtAkrrK5D-i7_8cw12vX84EWTuJo,3668
794
- omlish/subprocesses/sync.py,sha256=HKmKM99_Y7tkJRg_n5onXrw41IZt5M5fqU0281LY-mo,3671
793
+ omlish/subprocesses/run.py,sha256=ViFvLJYQHAExk0novi8wCx4xk7T4WPH6CTT3P55B6-4,3642
794
+ omlish/subprocesses/sync.py,sha256=Lmr6LYQrH37wVnlYRQc-fk4iENn2zFGxJmiU8-biUEQ,3658
795
795
  omlish/subprocesses/utils.py,sha256=MJb6hvKhZceTmBeFVqlc5oM7rDxWkUzSzK9nKvbIvM8,396
796
796
  omlish/subprocesses/wrap.py,sha256=HMvCZrO2H227oGNN03KjB3FI-M5bAICqp19W8oG2f5M,763
797
797
  omlish/term/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -853,9 +853,9 @@ omlish/typedvalues/holder.py,sha256=ZTnHiw-K38ciOBLEdwgrltr7Xp8jjEs_0Lp69DH-G-o,
853
853
  omlish/typedvalues/marshal.py,sha256=hWHRLcrGav7lvXJDtb9bNI0ickl4SKPQ6F4BbTpqw3A,4219
854
854
  omlish/typedvalues/reflect.py,sha256=Ih1YgU-srUjsvBn_P7C66f73_VCvcwqE3ffeBnZBgt4,674
855
855
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
856
- omlish-0.0.0.dev308.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
857
- omlish-0.0.0.dev308.dist-info/METADATA,sha256=-f4JyYLhz7RVYUCBHyIx0neYBnC4SadbuFbwS9NKl6E,4416
858
- omlish-0.0.0.dev308.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
859
- omlish-0.0.0.dev308.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
860
- omlish-0.0.0.dev308.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
861
- omlish-0.0.0.dev308.dist-info/RECORD,,
856
+ omlish-0.0.0.dev309.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
857
+ omlish-0.0.0.dev309.dist-info/METADATA,sha256=whxbYMrVb5r3hPkfUNldkiBM2-N5weht_JZVVwC7rkI,4416
858
+ omlish-0.0.0.dev309.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
859
+ omlish-0.0.0.dev309.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
860
+ omlish-0.0.0.dev309.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
861
+ omlish-0.0.0.dev309.dist-info/RECORD,,