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.
- omlish/__about__.py +2 -2
- omlish/asyncs/asyncio/subprocesses.py +4 -3
- omlish/asyncs/asyncio/timeouts.py +5 -2
- omlish/diag/lslocks.py +64 -0
- omlish/diag/lsof.py +264 -0
- omlish/diag/ps.py +40 -21
- omlish/lang/__init__.py +7 -8
- omlish/lite/dataclasses.py +23 -0
- omlish/lite/timeouts.py +202 -0
- omlish/os/fcntl.py +59 -0
- omlish/os/pidfiles/manager.py +17 -0
- omlish/os/pidfiles/pidfile.py +42 -12
- omlish/os/pidfiles/pinning.py +246 -0
- omlish/subprocesses/async_.py +2 -1
- omlish/subprocesses/base.py +6 -0
- omlish/subprocesses/run.py +48 -8
- omlish/subprocesses/sync.py +7 -1
- {omlish-0.0.0.dev225.dist-info → omlish-0.0.0.dev227.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev225.dist-info → omlish-0.0.0.dev227.dist-info}/RECORD +23 -19
- omlish/lang/timeouts.py +0 -53
- {omlish-0.0.0.dev225.dist-info → omlish-0.0.0.dev227.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev225.dist-info → omlish-0.0.0.dev227.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev225.dist-info → omlish-0.0.0.dev227.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev225.dist-info → omlish-0.0.0.dev227.dist-info}/top_level.txt +0 -0
omlish/subprocesses/run.py
CHANGED
@@ -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[
|
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[
|
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(
|
95
|
-
|
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(
|
98
|
-
|
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))
|
omlish/subprocesses/sync.py
CHANGED
@@ -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[
|
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,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=YGmAnUBszmosQQ_7Hh2wwtDiYdYZ4unNKYzOtALuels,7968
|
2
|
-
omlish/__about__.py,sha256=
|
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=
|
105
|
-
omlish/asyncs/asyncio/timeouts.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
506
|
-
omlish/os/pidfiles/pidfile.py,sha256=
|
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=
|
631
|
-
omlish/subprocesses/base.py,sha256=
|
632
|
-
omlish/subprocesses/run.py,sha256=
|
633
|
-
omlish/subprocesses/sync.py,sha256=
|
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.
|
680
|
-
omlish-0.0.0.
|
681
|
-
omlish-0.0.0.
|
682
|
-
omlish-0.0.0.
|
683
|
-
omlish-0.0.0.
|
684
|
-
omlish-0.0.0.
|
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)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|