omlish 0.0.0.dev225__py3-none-any.whl → 0.0.0.dev227__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.
@@ -5,6 +5,7 @@ import dataclasses as dc
5
5
  import typing as ta
6
6
 
7
7
  from ..lite.check import check
8
+ from ..lite.timeouts import TimeoutLike
8
9
 
9
10
 
10
11
  T = ta.TypeVar('T')
@@ -30,17 +31,43 @@ class SubprocessRunOutput(ta.Generic[T]):
30
31
  class SubprocessRun:
31
32
  cmd: ta.Sequence[str]
32
33
  input: ta.Any = None
33
- timeout: ta.Optional[float] = None
34
+ timeout: ta.Optional[TimeoutLike] = None
34
35
  check: bool = False
35
36
  capture_output: ta.Optional[bool] = None
36
37
  kwargs: ta.Optional[ta.Mapping[str, ta.Any]] = None
37
38
 
39
+ #
40
+
41
+ _FIELD_NAMES: ta.ClassVar[ta.FrozenSet[str]]
42
+
43
+ def replace(self, **kwargs: ta.Any) -> 'SubprocessRun':
44
+ if not kwargs:
45
+ return self
46
+
47
+ field_kws = {}
48
+ extra_kws = {}
49
+ for k, v in kwargs.items():
50
+ if k in self._FIELD_NAMES:
51
+ field_kws[k] = v
52
+ else:
53
+ extra_kws[k] = v
54
+
55
+ return dc.replace(self, **{
56
+ **dict(kwargs={
57
+ **(self.kwargs or {}),
58
+ **extra_kws,
59
+ }),
60
+ **field_kws, # passing a kwarg named 'kwargs' intentionally clobbers
61
+ })
62
+
63
+ #
64
+
38
65
  @classmethod
39
66
  def of(
40
67
  cls,
41
68
  *cmd: str,
42
69
  input: ta.Any = None, # noqa
43
- timeout: ta.Optional[float] = None,
70
+ timeout: ta.Optional[TimeoutLike] = None,
44
71
  check: bool = False, # noqa
45
72
  capture_output: ta.Optional[bool] = None,
46
73
  **kwargs: ta.Any,
@@ -61,20 +88,25 @@ class SubprocessRun:
61
88
  def run(
62
89
  self,
63
90
  subprocesses: ta.Optional[ta.Any] = None, # AbstractSubprocesses
91
+ **kwargs: ta.Any,
64
92
  ) -> SubprocessRunOutput:
65
93
  if subprocesses is None:
66
94
  subprocesses = self._DEFAULT_SUBPROCESSES
67
- return check.not_none(subprocesses).run_(self) # type: ignore[attr-defined]
95
+ return check.not_none(subprocesses).run_(self.replace(**kwargs)) # type: ignore[attr-defined]
68
96
 
69
97
  _DEFAULT_ASYNC_SUBPROCESSES: ta.ClassVar[ta.Optional[ta.Any]] = None # AbstractAsyncSubprocesses
70
98
 
71
99
  async def async_run(
72
100
  self,
73
101
  async_subprocesses: ta.Optional[ta.Any] = None, # AbstractAsyncSubprocesses
102
+ **kwargs: ta.Any,
74
103
  ) -> SubprocessRunOutput:
75
104
  if async_subprocesses is None:
76
105
  async_subprocesses = self._DEFAULT_ASYNC_SUBPROCESSES
77
- return await check.not_none(async_subprocesses).run_(self) # type: ignore[attr-defined]
106
+ return await check.not_none(async_subprocesses).run_(self.replace(**kwargs)) # type: ignore[attr-defined]
107
+
108
+
109
+ SubprocessRun._FIELD_NAMES = frozenset(fld.name for fld in dc.fields(SubprocessRun)) # noqa
78
110
 
79
111
 
80
112
  ##
@@ -91,8 +123,16 @@ class SubprocessRunnable(abc.ABC, ta.Generic[T]):
91
123
 
92
124
  #
93
125
 
94
- def run(self, subprocesses: ta.Optional[ta.Any] = None) -> T: # AbstractSubprocesses
95
- return self.handle_run_output(self.make_run().run(subprocesses))
126
+ def run(
127
+ self,
128
+ subprocesses: ta.Optional[ta.Any] = None, # AbstractSubprocesses
129
+ **kwargs: ta.Any,
130
+ ) -> T:
131
+ return self.handle_run_output(self.make_run().run(subprocesses, **kwargs))
96
132
 
97
- async def async_run(self, async_subprocesses: ta.Optional[ta.Any] = None) -> T: # AbstractAsyncSubprocesses
98
- return self.handle_run_output(await self.make_run().async_run(async_subprocesses))
133
+ async def async_run(
134
+ self,
135
+ async_subprocesses: ta.Optional[ta.Any] = None, # AbstractAsyncSubprocesses
136
+ **kwargs: ta.Any,
137
+ ) -> T:
138
+ return self.handle_run_output(await self.make_run().async_run(async_subprocesses, **kwargs))
@@ -1,10 +1,16 @@
1
1
  # ruff: noqa: UP006 UP007
2
2
  # @omlish-lite
3
+ """
4
+ TODO:
5
+ - popen
6
+ - route check_calls through run_?
7
+ """
3
8
  import abc
4
9
  import subprocess
5
10
  import sys
6
11
  import typing as ta
7
12
 
13
+ from ..lite.timeouts import TimeoutLike
8
14
  from .base import BaseSubprocesses
9
15
  from .run import SubprocessRun
10
16
  from .run import SubprocessRunOutput
@@ -22,7 +28,7 @@ class AbstractSubprocesses(BaseSubprocesses, abc.ABC):
22
28
  self,
23
29
  *cmd: str,
24
30
  input: ta.Any = None, # noqa
25
- timeout: ta.Optional[float] = None,
31
+ timeout: ta.Optional[TimeoutLike] = None,
26
32
  check: bool = False,
27
33
  capture_output: ta.Optional[bool] = None,
28
34
  **kwargs: ta.Any,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: omlish
3
- Version: 0.0.0.dev225
3
+ Version: 0.0.0.dev227
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=YGmAnUBszmosQQ_7Hh2wwtDiYdYZ4unNKYzOtALuels,7968
2
- omlish/__about__.py,sha256=gehJaunJejmNajD_3gJSN6_vRuZdXjgTLUMaCAxAmJA,3380
2
+ omlish/__about__.py,sha256=F8eB77QCwYkeNA3ZSyaAdpFyPxSptO9EjeuJvnM2Lrg,3380
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/c3.py,sha256=ubu7lHwss5V4UznbejAI0qXhXahrU01MysuHOZI9C4U,8116
5
5
  omlish/cached.py,sha256=UI-XTFBwA6YXWJJJeBn-WkwBkfzDjLBBaZf4nIJA9y0,510
@@ -101,8 +101,8 @@ omlish/asyncs/asyncio/all.py,sha256=KpTanEtpTlc3rqv5SyiJaJGb_DXBzp_WKLhlRq6lrhY,
101
101
  omlish/asyncs/asyncio/asyncio.py,sha256=3BMhVIF-QTjsFRGDtNYlRbBqKPCA3_AwJsjJoIWdM8k,1783
102
102
  omlish/asyncs/asyncio/channels.py,sha256=ZbmsEmdK1fV96liHdcVpRqA2dAMkXJt4Q3rFAg3YOIw,1074
103
103
  omlish/asyncs/asyncio/streams.py,sha256=Uc9PCWSfBqrK2kdVtfjjQU1eaYTWYmZm8QISDj2xiuw,1004
104
- omlish/asyncs/asyncio/subprocesses.py,sha256=0NXHmCXeONwOiJlPfWop6WPfSiQH_keiyHT_pnfZm7U,6872
105
- omlish/asyncs/asyncio/timeouts.py,sha256=Rj5OU9BIAPcVZZKp74z7SzUXF5xokh4dgsWkUqOy1aE,355
104
+ omlish/asyncs/asyncio/subprocesses.py,sha256=f30-wi-3n9R5dftm4CMrzp23EEa4GX283bORixm1_UU,6931
105
+ omlish/asyncs/asyncio/timeouts.py,sha256=hokhi7jZSAtBv0ME3qL1cO5eshNA9ViEH7BLafNCBpQ,454
106
106
  omlish/asyncs/bluelet/LICENSE,sha256=VHf3oPQihOHnWyIR8LcXX0dpONa1lgyJnjWC2qVuRR0,559
107
107
  omlish/asyncs/bluelet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
108
  omlish/asyncs/bluelet/all.py,sha256=aUV6PwnR8DqnEBS9wsZuPW_UtP6G9M8_KY-mmxZeVG0,1516
@@ -203,9 +203,11 @@ omlish/dataclasses/impl/utils.py,sha256=aER2iL3UAtgS1BdLuEvTr9Tr2wC28wk1kiOeO-jI
203
203
  omlish/diag/__init__.py,sha256=4S8v0myJM4Zld6_FV6cPe_nSv0aJb6kXftEit0HkiGE,1141
204
204
  omlish/diag/asts.py,sha256=BveUUNUcaAm4Hg55f4ZxGSI313E4L8cCZ5XjHpEkKVI,3325
205
205
  omlish/diag/debug.py,sha256=ClED7kKXeVMyKrjGIxcq14kXk9kvUJfytBQwK9y7c4Q,1637
206
+ omlish/diag/lslocks.py,sha256=fWI3SZwgEkhipVfSqvzVzREJRShcDYmlYByHBT0LToc,1744
207
+ omlish/diag/lsof.py,sha256=-s-0QKFC-_vfdkxhk0m_Lq-PVrXCY7TUFV9ff_Q_gdQ,9319
206
208
  omlish/diag/procfs.py,sha256=KaGTAA2Gj8eEEp7MjClRe4aimwzd-HDABThFzvq2cBQ,9684
207
209
  omlish/diag/procstats.py,sha256=UkqxREqfd-38xPYZ9T1SIJISz5ARQCEhTtOZrxtm2dE,777
208
- omlish/diag/ps.py,sha256=1JWxZen3fVG-20R6ZZ8BtO_gpzw_5bhHZiKdoHkgxoU,1004
210
+ omlish/diag/ps.py,sha256=mwraPO6Nze_2r9RiC4dyLL0aJ_lHR1_fSN9BlYNBoHw,1651
209
211
  omlish/diag/pycharm.py,sha256=7-r_F-whXt8v-0dehxAX-MeMFPM3iZXX9IfeL0GfUtk,4643
210
212
  omlish/diag/pydevd.py,sha256=UN55ZjkWLCVyHxE2CNRRYamuvSKfzWsn0D5oczRTXO4,7536
211
213
  omlish/diag/threads.py,sha256=1-x02VCDZ407gfbtXm1pWK-ubqhqfePm9PMqkHCVoqk,3642
@@ -382,7 +384,7 @@ omlish/iterators/iterators.py,sha256=ghI4dO6WPyyFOLTIIMaHQ_IOy2xXaFpGPqveZ5YGIBU
382
384
  omlish/iterators/recipes.py,sha256=53mkexitMhkwXQZbL6DrhpT0WePQ_56uXd5Jaw3DfzI,467
383
385
  omlish/iterators/tools.py,sha256=Pi4ybXytUXVZ3xwK89xpPImQfYYId9p1vIFQvVqVLqA,2551
384
386
  omlish/iterators/unique.py,sha256=0jAX3kwzVfRNhe0Tmh7kVP_Q2WBIn8POo_O-rgFV0rQ,1390
385
- omlish/lang/__init__.py,sha256=9H6fElLMlA5MwT3tIW2CpojG5chn-hAvKW9tuA8REDQ,4134
387
+ omlish/lang/__init__.py,sha256=_DddR5PNgjqr51AB5DPUq0iKVqJrKz55WMJnBm97LL0,4127
386
388
  omlish/lang/cached.py,sha256=tQaqMu1LID0q4NSTk5vPXsgxIBWSFAmjs5AhQoEHoCQ,7833
387
389
  omlish/lang/clsdct.py,sha256=sJYadm-fwzti-gsi98knR5qQUxriBmOqQE_qz3RopNk,1743
388
390
  omlish/lang/cmp.py,sha256=5vbzWWbqdzDmNKAGL19z6ZfUKe5Ci49e-Oegf9f4BsE,1346
@@ -400,7 +402,6 @@ omlish/lang/resolving.py,sha256=OuN2mDTPNyBUbcrswtvFKtj4xgH4H4WglgqSKv3MTy0,1606
400
402
  omlish/lang/resources.py,sha256=N64KeVE-rYMxqBBRp91qzgVqpOVR2uX7k1WlS_bo5hM,2681
401
403
  omlish/lang/strings.py,sha256=egdv8PxLNG40-5V93agP5j2rBUDIsahCx048zV7uEbU,4690
402
404
  omlish/lang/sys.py,sha256=UoZz_PJYVKLQAKqYxxn-LHz1okK_38I__maZgnXMcxU,406
403
- omlish/lang/timeouts.py,sha256=vECdWYhc_IZgcal1Ng1Y42wf2FV3KAx-i8As-MgGHIQ,1186
404
405
  omlish/lang/typing.py,sha256=Zdad9Zv0sa-hIaUXPrzPidT7sDVpRcussAI7D-j-I1c,3296
405
406
  omlish/lang/classes/__init__.py,sha256=HY9UD3Tg8_sH59emZUKgP1Kb8-8r0GCw5hUOumxwKlM,658
406
407
  omlish/lang/classes/abstract.py,sha256=bIcuAetV_aChhpSURypmjjcqP07xi20uVYPKh1kvQNU,3710
@@ -420,7 +421,7 @@ omlish/lite/cached.py,sha256=O7ozcoDNFm1Hg2wtpHEqYSp_i_nCLNOP6Ueq_Uk-7mU,1300
420
421
  omlish/lite/check.py,sha256=OLwtE2x6nlbGx4vS3Rda7zMHpgqzDSLJminTAX2lqLA,13529
421
422
  omlish/lite/configs.py,sha256=Ev_19sbII67pTWzInYjYqa9VyTiZBvyjhZqyG8TtufE,908
422
423
  omlish/lite/contextmanagers.py,sha256=ciaMl0D3QDHToM7M28-kwZ-Q48LtwgCxiud3nekgutA,2863
423
- omlish/lite/dataclasses.py,sha256=k1588egoF3h_Kb21tuQb8WyJ9wxhT06EztFvaKOHzNU,1115
424
+ omlish/lite/dataclasses.py,sha256=sjJnZ4tZXMzKRkr-gymMbhuMxJAY8parJ_sopEqBc6M,1704
424
425
  omlish/lite/inject.py,sha256=qBUftFeXMiRgANYbNS2e7TePMYyFAcuLgsJiLyMTW5o,28769
425
426
  omlish/lite/json.py,sha256=7-02Ny4fq-6YAu5ynvqoijhuYXWpLmfCI19GUeZnb1c,740
426
427
  omlish/lite/logs.py,sha256=CWFG0NKGhqNeEgryF5atN2gkPYbUdTINEw_s1phbINM,51
@@ -432,6 +433,7 @@ omlish/lite/resources.py,sha256=YNSmX1Ohck1aoWRs55a-o5ChVbFJIQhtbqE-XwF55Oc,326
432
433
  omlish/lite/runtime.py,sha256=XQo408zxTdJdppUZqOWHyeUR50VlCpNIExNGHz4U6O4,459
433
434
  omlish/lite/secrets.py,sha256=3Mz3V2jf__XU9qNHcH56sBSw95L3U2UPL24bjvobG0c,816
434
435
  omlish/lite/strings.py,sha256=QGxT1Yh4oI8ycsfeobxnjEhvDob_GiAKLeIhZwo1j24,1986
436
+ omlish/lite/timeouts.py,sha256=Bd_XaEmaGTsKcORfPt-AJECmf8Bt9XwjBfjkMacpEdM,4954
435
437
  omlish/lite/timing.py,sha256=aVu3hEDB_jyTF_ryZI7iU-xg4q8CNwqpp9Apfru_iwY,196
436
438
  omlish/lite/types.py,sha256=fP5EMyBdEp2LmDxcHjUDtwAMdR06ISr9lKOL7smWfHM,140
437
439
  omlish/lite/typing.py,sha256=U3-JaEnkDSYxK4tsu_MzUn3RP6qALBe5FXQXpD-licE,1090
@@ -495,6 +497,7 @@ omlish/os/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
495
497
  omlish/os/atomics.py,sha256=KhWNeh4mzU3M-TF0v8uR6hUqMfZJW42MeyIK9Jl6R0k,5246
496
498
  omlish/os/death.py,sha256=_JV88yxwYIalamIMuqmGTQ4KYd0t-UHLjVkdoliPWL8,2943
497
499
  omlish/os/deathsig.py,sha256=hk9Yq2kyDdI-cI7OQH7mOfpRbOKzY_TfPKEqgrjVYbA,641
500
+ omlish/os/fcntl.py,sha256=hSlCqzMu5iqEsxlp9me6KtoG9FK7g3sdjZIpDba-kLQ,1458
498
501
  omlish/os/files.py,sha256=O1Um1iCLeIzDSKQq2zByVC_4NZ3tLMqv6vICyU21U3Q,861
499
502
  omlish/os/journald.py,sha256=2nI8Res1poXkbLc31--MPUlzYMESnCcPUkIxDOCjZW0,3903
500
503
  omlish/os/linux.py,sha256=whJ6scwMKSFBdXiVhJW0BCpJV4jOGMr-a_a3Bhwz6Ls,18938
@@ -502,8 +505,9 @@ omlish/os/paths.py,sha256=hqPiyg_eYaRoIVPdAeX4oeLEV4Kpln_XsH0tHvbOf8Q,844
502
505
  omlish/os/sizes.py,sha256=ohkALLvqSqBX4iR-7DMKJ4pfOCRdZXV8htH4QywUNM0,152
503
506
  omlish/os/temp.py,sha256=P97KiVeNB7rfGn4tlgU5ro86JUxAsiphLMlxsjQgfB0,1198
504
507
  omlish/os/pidfiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
505
- omlish/os/pidfiles/manager.py,sha256=u8N7z6fSMHeE4aEHhkYShIymos1B6k1hxMd9sP6IuKE,2330
506
- omlish/os/pidfiles/pidfile.py,sha256=NHpt4721J_VsCKaInG6u4sjFkHiZaor7lDneTTykr8w,3177
508
+ omlish/os/pidfiles/manager.py,sha256=XP_0ynjWDG2wjRN3sIKjmFafpf-er3AYm8E7aXs16fA,3209
509
+ omlish/os/pidfiles/pidfile.py,sha256=WmZt_c8fvztPgZQnYHhcQCKWgHqAEsaI3Ggz6Wqgkc8,3748
510
+ omlish/os/pidfiles/pinning.py,sha256=YmlHK4G4t38Uldx-kHQBSMSwCzETevDYBDED9HhCCvQ,6153
507
511
  omlish/reflect/__init__.py,sha256=JBWwxKwP4IEaomkK0PTju02STU1BVXT14SCrShT1Sm0,769
508
512
  omlish/reflect/inspect.py,sha256=veJ424-9oZrqyvhVpvxOi7hcKW-PDBkdYL2yjrFlk4o,495
509
513
  omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
@@ -627,10 +631,10 @@ omlish/sql/tabledefs/lower.py,sha256=YQf8gl1kxD5Fm-vOxV6G0Feh_D9PP1pYwz_vz6XjTPQ
627
631
  omlish/sql/tabledefs/marshal.py,sha256=j-Rz1HsiXmABv39-2VoJdzSSB3kbxqaVevbdkZWMyG8,504
628
632
  omlish/sql/tabledefs/tabledefs.py,sha256=lIhvlt0pk6G7RZAtDFsFXm5j0l9BvRfnP7vNGeydHtE,816
629
633
  omlish/subprocesses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
630
- omlish/subprocesses/async_.py,sha256=Ic9luphqOGdOsBCnH76msy5SCrudMYqvUD1bw-l8ABY,2327
631
- omlish/subprocesses/base.py,sha256=tWh5ivsPCpz6e3qayhfnapxuiFWO3nNvgnbYbzSXxAs,5981
632
- omlish/subprocesses/run.py,sha256=iRYiGqoLpB6aQ7a3t-GiJ_6XFLljr6PrZZER7XvibXM,2663
633
- omlish/subprocesses/sync.py,sha256=wAJeA4awo53AlrF6kzRM4usj9gMy7bOYIHnMcr93ETg,3567
634
+ omlish/subprocesses/async_.py,sha256=hPQTWFa3k5CE_s9p1JTY4KdTPOsqLJtq3lGMRznrVpY,2373
635
+ omlish/subprocesses/base.py,sha256=W6El-PUKKF9KLAks5LB6kzqs_n3FfkblJ-JOv6NFQbY,6133
636
+ omlish/subprocesses/run.py,sha256=3jwSnQJvFMDMHmJvtAkrrK5D-i7_8cw12vX84EWTuJo,3668
637
+ omlish/subprocesses/sync.py,sha256=HKmKM99_Y7tkJRg_n5onXrw41IZt5M5fqU0281LY-mo,3671
634
638
  omlish/subprocesses/utils.py,sha256=MJb6hvKhZceTmBeFVqlc5oM7rDxWkUzSzK9nKvbIvM8,396
635
639
  omlish/subprocesses/wrap.py,sha256=v7vrbDhl_FVWESnXIOJ3oGtE3Y-OHQa5sH3MTtFTBUE,504
636
640
  omlish/term/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -676,9 +680,9 @@ omlish/text/indent.py,sha256=YjtJEBYWuk8--b9JU_T6q4yxV85_TR7VEVr5ViRCFwk,1336
676
680
  omlish/text/minja.py,sha256=jZC-fp3Xuhx48ppqsf2Sf1pHbC0t8XBB7UpUUoOk2Qw,5751
677
681
  omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
678
682
  omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
679
- omlish-0.0.0.dev225.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
680
- omlish-0.0.0.dev225.dist-info/METADATA,sha256=8NMIcuuTxgyCnPF4F5NHPdeRYbajQPP030dNBorRANg,4176
681
- omlish-0.0.0.dev225.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
682
- omlish-0.0.0.dev225.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
683
- omlish-0.0.0.dev225.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
684
- omlish-0.0.0.dev225.dist-info/RECORD,,
683
+ omlish-0.0.0.dev227.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
684
+ omlish-0.0.0.dev227.dist-info/METADATA,sha256=Pl1bZYBMsE5uKxtT265EkiV61cZ6y6-u11m6uqsXwz4,4176
685
+ omlish-0.0.0.dev227.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
686
+ omlish-0.0.0.dev227.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
687
+ omlish-0.0.0.dev227.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
688
+ omlish-0.0.0.dev227.dist-info/RECORD,,
omlish/lang/timeouts.py DELETED
@@ -1,53 +0,0 @@
1
- import abc
2
- import time
3
- import typing as ta
4
-
5
-
6
- TimeoutLike: ta.TypeAlias = ta.Union['Timeout', float]
7
-
8
-
9
- class Timeout(abc.ABC):
10
- @abc.abstractmethod
11
- def __call__(self) -> float:
12
- raise NotImplementedError
13
-
14
- @abc.abstractmethod
15
- def or_(self, o: ta.Any) -> ta.Any:
16
- raise NotImplementedError
17
-
18
-
19
- class DeadlineTimeout(Timeout):
20
- def __init__(
21
- self,
22
- deadline: float,
23
- exc: type[BaseException] | BaseException = TimeoutError,
24
- ) -> None:
25
- super().__init__()
26
- self.deadline = deadline
27
- self.exc = exc
28
-
29
- def __call__(self) -> float:
30
- if (rem := self.deadline - time.time()) > 0:
31
- return rem
32
- raise self.exc
33
-
34
- def or_(self, o: ta.Any) -> ta.Any:
35
- return self()
36
-
37
-
38
- class InfiniteTimeout(Timeout):
39
- def __call__(self) -> float:
40
- return float('inf')
41
-
42
- def or_(self, o: ta.Any) -> ta.Any:
43
- return o
44
-
45
-
46
- def timeout(t: TimeoutLike | None) -> Timeout:
47
- if t is None:
48
- return InfiniteTimeout()
49
- if isinstance(t, Timeout):
50
- return t
51
- if isinstance(t, (float, int)):
52
- return DeadlineTimeout(time.time() + t)
53
- raise TypeError(t)