omlish 0.0.0.dev418__py3-none-any.whl → 0.0.0.dev419__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/daemons/launching.py +1 -1
- omlish/formats/json/backends/orjson.py +1 -0
- omlish/formats/toml/parser.py +2 -2
- omlish/lang/__init__.py +31 -11
- omlish/lang/contextmanagers.py +81 -16
- omlish/lang/imports/proxyinit.py +2 -2
- omlish/lang/{maysyncs.py → maysync.py} +3 -3
- omlish/lifecycles/__init__.py +14 -1
- omlish/lifecycles/abstract.py +40 -0
- omlish/lifecycles/base.py +73 -23
- omlish/lifecycles/controller.py +94 -47
- omlish/marshal/base/registries.py +6 -0
- omlish/math/__init__.py +89 -83
- omlish/subprocesses/{maysyncs.py → maysync.py} +1 -1
- {omlish-0.0.0.dev418.dist-info → omlish-0.0.0.dev419.dist-info}/METADATA +2 -2
- {omlish-0.0.0.dev418.dist-info → omlish-0.0.0.dev419.dist-info}/RECORD +22 -22
- /omlish/lite/{maysyncs.py → maysync.py} +0 -0
- {omlish-0.0.0.dev418.dist-info → omlish-0.0.0.dev419.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev418.dist-info → omlish-0.0.0.dev419.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev418.dist-info → omlish-0.0.0.dev419.dist-info}/licenses/LICENSE +0 -0
- {omlish-0.0.0.dev418.dist-info → omlish-0.0.0.dev419.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
omlish/daemons/launching.py
CHANGED
@@ -94,7 +94,7 @@ class Launcher:
|
|
94
94
|
if (pid_file := self._pid_file) is not None:
|
95
95
|
if not isinstance(spawner, InProcessSpawner):
|
96
96
|
pidfile = es.enter_context(open_inheritable_pidfile(pid_file))
|
97
|
-
pidfile_manager = lang.
|
97
|
+
pidfile_manager = lang.ValueContextManager(pidfile)
|
98
98
|
|
99
99
|
else:
|
100
100
|
check.state(not self._reparent_process)
|
omlish/formats/toml/parser.py
CHANGED
@@ -49,8 +49,8 @@ import types
|
|
49
49
|
import typing as ta
|
50
50
|
|
51
51
|
|
52
|
-
TomlParseFloat = ta.Callable[[str], ta.Any]
|
53
|
-
TomlKey = ta.Tuple[str, ...]
|
52
|
+
TomlParseFloat = ta.Callable[[str], ta.Any] # ta.TypeAlias
|
53
|
+
TomlKey = ta.Tuple[str, ...] # ta.TypeAlias
|
54
54
|
TomlPos = int # ta.TypeAlias
|
55
55
|
|
56
56
|
|
omlish/lang/__init__.py
CHANGED
@@ -145,22 +145,42 @@ with _auto_proxy_init(
|
|
145
145
|
)
|
146
146
|
|
147
147
|
from .contextmanagers import ( # noqa
|
148
|
-
AsyncContextManager,
|
149
148
|
ContextManaged,
|
150
|
-
|
151
|
-
|
152
|
-
DefaultLockable,
|
153
|
-
Lockable,
|
149
|
+
SelfContextManaged,
|
150
|
+
ValueContextManager,
|
154
151
|
NOP_CONTEXT_MANAGER,
|
155
|
-
|
156
|
-
|
152
|
+
|
153
|
+
AsyncContextManaged,
|
154
|
+
SelfAsyncContextManaged,
|
155
|
+
ValueAsyncContextManager,
|
156
|
+
NOP_ASYNC_CONTEXT_MANAGER,
|
157
|
+
|
158
|
+
AsyncContextManager,
|
159
|
+
|
160
|
+
ContextManager,
|
161
|
+
|
162
|
+
maybe_managing,
|
163
|
+
disposing,
|
157
164
|
breakpoint_on_exception,
|
158
165
|
context_var_setting,
|
166
|
+
|
167
|
+
as_async_context_manager,
|
168
|
+
|
169
|
+
ContextWrappable,
|
170
|
+
ContextWrapped,
|
159
171
|
context_wrapped,
|
172
|
+
|
173
|
+
Lockable,
|
174
|
+
DefaultLockable,
|
160
175
|
default_lock,
|
161
|
-
|
176
|
+
|
177
|
+
AsyncLockable,
|
178
|
+
DefaultAsyncLockable,
|
179
|
+
default_async_lock,
|
180
|
+
|
181
|
+
Timer,
|
182
|
+
|
162
183
|
double_check_setdefault,
|
163
|
-
maybe_managing,
|
164
184
|
)
|
165
185
|
|
166
186
|
from .datetimes import ( # noqa
|
@@ -297,7 +317,7 @@ with _auto_proxy_init(
|
|
297
317
|
just,
|
298
318
|
)
|
299
319
|
|
300
|
-
from .
|
320
|
+
from .maysync import ( # noqa
|
301
321
|
make_maysync_fn,
|
302
322
|
make_maysync_generator_fn,
|
303
323
|
make_maysync,
|
@@ -439,7 +459,7 @@ with _auto_proxy_init(
|
|
439
459
|
Maybe,
|
440
460
|
)
|
441
461
|
|
442
|
-
from ..lite.
|
462
|
+
from ..lite.maysync import ( # noqa
|
443
463
|
mark_maysync,
|
444
464
|
is_maysync,
|
445
465
|
|
omlish/lang/contextmanagers.py
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
TODO:
|
3
3
|
- AsyncExitStacked
|
4
4
|
- lol does double_check_setdefault need a CowDict in FT?
|
5
|
+
- AsyncLockable, DefaultAsyncLockable
|
5
6
|
"""
|
6
7
|
import abc
|
7
8
|
import contextlib
|
@@ -21,16 +22,45 @@ V = ta.TypeVar('V')
|
|
21
22
|
##
|
22
23
|
|
23
24
|
|
24
|
-
class
|
25
|
-
def
|
26
|
-
|
25
|
+
class ContextManaged(abc.ABC): # noqa
|
26
|
+
def __enter__(self):
|
27
|
+
return None
|
28
|
+
|
29
|
+
def __exit__(
|
30
|
+
self,
|
31
|
+
exc_type: type[BaseException] | None,
|
32
|
+
exc_val: BaseException | None,
|
33
|
+
exc_tb: types.TracebackType | None,
|
34
|
+
) -> bool | None:
|
35
|
+
return None
|
27
36
|
|
28
37
|
|
29
|
-
class ContextManaged:
|
38
|
+
class SelfContextManaged(ContextManaged):
|
30
39
|
def __enter__(self) -> ta.Self:
|
31
40
|
return self
|
32
41
|
|
33
|
-
|
42
|
+
|
43
|
+
class ValueContextManager(ContextManaged, ta.Generic[T]):
|
44
|
+
def __init__(self, value: T) -> None:
|
45
|
+
super().__init__()
|
46
|
+
|
47
|
+
self._value = value
|
48
|
+
|
49
|
+
def __enter__(self) -> T:
|
50
|
+
return self._value
|
51
|
+
|
52
|
+
|
53
|
+
NOP_CONTEXT_MANAGER = ValueContextManager(None)
|
54
|
+
|
55
|
+
|
56
|
+
#
|
57
|
+
|
58
|
+
|
59
|
+
class AsyncContextManaged(abc.ABC): # noqa
|
60
|
+
async def __aenter__(self):
|
61
|
+
return None
|
62
|
+
|
63
|
+
async def __aexit__(
|
34
64
|
self,
|
35
65
|
exc_type: type[BaseException] | None,
|
36
66
|
exc_val: BaseException | None,
|
@@ -39,23 +69,22 @@ class ContextManaged:
|
|
39
69
|
return None
|
40
70
|
|
41
71
|
|
42
|
-
class
|
43
|
-
def
|
72
|
+
class SelfAsyncContextManaged(AsyncContextManaged):
|
73
|
+
async def __aenter__(self) -> ta.Self:
|
74
|
+
return self
|
75
|
+
|
76
|
+
|
77
|
+
class ValueAsyncContextManager(AsyncContextManaged, ta.Generic[T]):
|
78
|
+
def __init__(self, value: T) -> None:
|
44
79
|
super().__init__()
|
45
80
|
|
46
81
|
self._value = value
|
47
82
|
|
48
|
-
def
|
49
|
-
|
50
|
-
return self
|
51
|
-
else:
|
52
|
-
return value
|
53
|
-
|
54
|
-
def __init_subclass__(cls, **kwargs: ta.Any) -> None:
|
55
|
-
raise TypeError
|
83
|
+
async def __aenter__(self) -> T:
|
84
|
+
return self._value
|
56
85
|
|
57
86
|
|
58
|
-
|
87
|
+
NOP_ASYNC_CONTEXT_MANAGER = ValueAsyncContextManager(None)
|
59
88
|
|
60
89
|
|
61
90
|
##
|
@@ -90,6 +119,9 @@ class ContextManager(abc.ABC, ta.Generic[T]):
|
|
90
119
|
return self._contextmanager.__exit__(exc_type, exc_val, exc_tb)
|
91
120
|
|
92
121
|
|
122
|
+
#
|
123
|
+
|
124
|
+
|
93
125
|
class AsyncContextManager(abc.ABC, ta.Generic[T]):
|
94
126
|
def __init_subclass__(cls, **kwargs: ta.Any) -> None:
|
95
127
|
super().__init_subclass__(**kwargs)
|
@@ -160,6 +192,15 @@ def context_var_setting(var: contextvars.ContextVar[T], val: T) -> ta.Iterator[T
|
|
160
192
|
##
|
161
193
|
|
162
194
|
|
195
|
+
@contextlib.asynccontextmanager
|
196
|
+
async def as_async_context_manager(cm: ta.ContextManager[T]) -> ta.AsyncIterator[T]:
|
197
|
+
with cm as v:
|
198
|
+
yield v
|
199
|
+
|
200
|
+
|
201
|
+
##
|
202
|
+
|
203
|
+
|
163
204
|
ContextWrappable: ta.TypeAlias = ta.ContextManager | str | ta.Callable[..., ta.ContextManager]
|
164
205
|
|
165
206
|
|
@@ -257,6 +298,30 @@ def default_lock(value: DefaultLockable, default: DefaultLockable = None) -> Loc
|
|
257
298
|
raise TypeError(value)
|
258
299
|
|
259
300
|
|
301
|
+
#
|
302
|
+
|
303
|
+
|
304
|
+
AsyncLockable = ta.Callable[[], ta.AsyncContextManager]
|
305
|
+
DefaultAsyncLockable = AsyncLockable | ta.AsyncContextManager | None
|
306
|
+
|
307
|
+
|
308
|
+
def default_async_lock(value: DefaultAsyncLockable, default: DefaultAsyncLockable = None) -> AsyncLockable:
|
309
|
+
if value is None:
|
310
|
+
value = default
|
311
|
+
|
312
|
+
if value is None:
|
313
|
+
return lambda: NOP_ASYNC_CONTEXT_MANAGER
|
314
|
+
|
315
|
+
elif callable(value):
|
316
|
+
return value
|
317
|
+
|
318
|
+
elif isinstance(value, ta.AsyncContextManager):
|
319
|
+
return lambda: value
|
320
|
+
|
321
|
+
else:
|
322
|
+
raise TypeError(value)
|
323
|
+
|
324
|
+
|
260
325
|
##
|
261
326
|
|
262
327
|
|
omlish/lang/imports/proxyinit.py
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
import typing as ta
|
2
2
|
|
3
|
-
from ..lite.
|
4
|
-
from ..lite.
|
5
|
-
from ..lite.
|
3
|
+
from ..lite.maysync import MaysyncFn
|
4
|
+
from ..lite.maysync import MaysyncGeneratorFn
|
5
|
+
from ..lite.maysync import make_maysync as _make_maysync
|
6
6
|
from .functions import as_async
|
7
7
|
|
8
8
|
|
omlish/lifecycles/__init__.py
CHANGED
@@ -1,11 +1,21 @@
|
|
1
1
|
from .abstract import ( # noqa
|
2
2
|
AbstractLifecycle,
|
3
|
+
|
4
|
+
AbstractAsyncLifecycle,
|
3
5
|
)
|
4
6
|
|
5
7
|
from .base import ( # noqa
|
8
|
+
AnyLifecycleCallback,
|
9
|
+
AnyLifecycle,
|
10
|
+
AnyCallbackLifecycle,
|
11
|
+
|
12
|
+
LifecycleCallback,
|
6
13
|
CallbackLifecycle,
|
7
14
|
Lifecycle,
|
8
|
-
|
15
|
+
|
16
|
+
AsyncLifecycleCallback,
|
17
|
+
CallbackAsyncLifecycle,
|
18
|
+
AsyncLifecycle,
|
9
19
|
)
|
10
20
|
|
11
21
|
from .contextmanagers import ( # noqa
|
@@ -14,6 +24,9 @@ from .contextmanagers import ( # noqa
|
|
14
24
|
)
|
15
25
|
|
16
26
|
from .controller import ( # noqa
|
27
|
+
AnyLifecycleListener,
|
28
|
+
AnyLifecycleController,
|
29
|
+
|
17
30
|
LifecycleController,
|
18
31
|
LifecycleListener,
|
19
32
|
)
|
omlish/lifecycles/abstract.py
CHANGED
@@ -3,11 +3,14 @@ import typing as ta
|
|
3
3
|
from .. import cached
|
4
4
|
from .. import dataclasses as dc
|
5
5
|
from .. import lang
|
6
|
+
from .base import AsyncLifecycle
|
6
7
|
from .base import Lifecycle
|
7
8
|
|
8
9
|
|
9
10
|
AbstractLifecycleT = ta.TypeVar('AbstractLifecycleT', bound='AbstractLifecycle')
|
10
11
|
|
12
|
+
AbstractAsyncLifecycleT = ta.TypeVar('AbstractAsyncLifecycleT', bound='AbstractAsyncLifecycle')
|
13
|
+
|
11
14
|
|
12
15
|
##
|
13
16
|
|
@@ -44,3 +47,40 @@ class AbstractLifecycle(lang.Abstract):
|
|
44
47
|
|
45
48
|
def _lifecycle_destroy(self) -> None:
|
46
49
|
pass
|
50
|
+
|
51
|
+
|
52
|
+
##
|
53
|
+
|
54
|
+
|
55
|
+
class AbstractAsyncLifecycle(lang.Abstract):
|
56
|
+
@dc.dataclass(frozen=True)
|
57
|
+
class _Lifecycle(AsyncLifecycle, lang.Final, ta.Generic[AbstractAsyncLifecycleT]):
|
58
|
+
obj: AbstractAsyncLifecycleT
|
59
|
+
|
60
|
+
async def lifecycle_construct(self) -> None:
|
61
|
+
await self.obj._lifecycle_construct() # noqa
|
62
|
+
|
63
|
+
async def lifecycle_start(self) -> None:
|
64
|
+
await self.obj._lifecycle_start() # noqa
|
65
|
+
|
66
|
+
async def lifecycle_stop(self) -> None:
|
67
|
+
await self.obj._lifecycle_stop() # noqa
|
68
|
+
|
69
|
+
async def lifecycle_destroy(self) -> None:
|
70
|
+
await self.obj._lifecycle_destroy() # noqa
|
71
|
+
|
72
|
+
@cached.property
|
73
|
+
def _lifecycle(self) -> _Lifecycle[ta.Self]:
|
74
|
+
return AbstractAsyncLifecycle._Lifecycle(self)
|
75
|
+
|
76
|
+
async def _lifecycle_construct(self) -> None:
|
77
|
+
pass
|
78
|
+
|
79
|
+
async def _lifecycle_start(self) -> None:
|
80
|
+
pass
|
81
|
+
|
82
|
+
async def _lifecycle_stop(self) -> None:
|
83
|
+
pass
|
84
|
+
|
85
|
+
async def _lifecycle_destroy(self) -> None:
|
86
|
+
pass
|
omlish/lifecycles/base.py
CHANGED
@@ -4,50 +4,100 @@ from .. import dataclasses as dc
|
|
4
4
|
from .. import lang
|
5
5
|
|
6
6
|
|
7
|
+
R = ta.TypeVar('R')
|
8
|
+
|
9
|
+
AnyLifecycleT = ta.TypeVar('AnyLifecycleT', bound='AnyLifecycle')
|
10
|
+
AnyLifecycleCallback: ta.TypeAlias = ta.Callable[[AnyLifecycleT], R]
|
11
|
+
|
7
12
|
LifecycleT = ta.TypeVar('LifecycleT', bound='Lifecycle')
|
8
|
-
LifecycleCallback: ta.TypeAlias = ta.Callable[[LifecycleT],
|
13
|
+
LifecycleCallback: ta.TypeAlias = ta.Callable[[LifecycleT], R]
|
14
|
+
|
15
|
+
AsyncLifecycleT = ta.TypeVar('AsyncLifecycleT', bound='AsyncLifecycle')
|
16
|
+
AsyncLifecycleCallback: ta.TypeAlias = ta.Callable[[AsyncLifecycleT], R]
|
9
17
|
|
10
18
|
|
11
19
|
##
|
12
20
|
|
13
21
|
|
14
|
-
class
|
15
|
-
def lifecycle_construct(self) -> None:
|
16
|
-
|
22
|
+
class AnyLifecycle(lang.Abstract, ta.Generic[R]):
|
23
|
+
def lifecycle_construct(self) -> R | None:
|
24
|
+
return None
|
17
25
|
|
18
|
-
def lifecycle_start(self) -> None:
|
19
|
-
|
26
|
+
def lifecycle_start(self) -> R | None:
|
27
|
+
return None
|
20
28
|
|
21
|
-
def lifecycle_stop(self) -> None:
|
22
|
-
|
29
|
+
def lifecycle_stop(self) -> R | None:
|
30
|
+
return None
|
23
31
|
|
24
|
-
def lifecycle_destroy(self) -> None:
|
25
|
-
|
32
|
+
def lifecycle_destroy(self) -> R | None:
|
33
|
+
return None
|
26
34
|
|
27
35
|
|
28
36
|
@dc.dataclass(frozen=True, kw_only=True)
|
29
|
-
class
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
37
|
+
class AnyCallbackLifecycle(
|
38
|
+
AnyLifecycle[R],
|
39
|
+
lang.Abstract,
|
40
|
+
ta.Generic[AnyLifecycleT, R],
|
41
|
+
):
|
42
|
+
on_construct: AnyLifecycleCallback['AnyCallbackLifecycle[AnyLifecycleT, R]', R] | None = None
|
43
|
+
on_start: AnyLifecycleCallback['AnyCallbackLifecycle[AnyLifecycleT, R]', R] | None = None
|
44
|
+
on_stop: AnyLifecycleCallback['AnyCallbackLifecycle[AnyLifecycleT, R]', R] | None = None
|
45
|
+
on_destroy: AnyLifecycleCallback['AnyCallbackLifecycle[AnyLifecycleT, R]', R] | None = None
|
34
46
|
|
35
47
|
@ta.override
|
36
|
-
def lifecycle_construct(self) -> None:
|
48
|
+
def lifecycle_construct(self) -> R | None:
|
37
49
|
if self.on_construct is not None:
|
38
|
-
self.on_construct(self)
|
50
|
+
return self.on_construct(self)
|
51
|
+
else:
|
52
|
+
return None
|
39
53
|
|
40
54
|
@ta.override
|
41
|
-
def lifecycle_start(self) -> None:
|
55
|
+
def lifecycle_start(self) -> R | None:
|
42
56
|
if self.on_start is not None:
|
43
|
-
self.on_start(self)
|
57
|
+
return self.on_start(self)
|
58
|
+
else:
|
59
|
+
return None
|
44
60
|
|
45
61
|
@ta.override
|
46
|
-
def lifecycle_stop(self) -> None:
|
62
|
+
def lifecycle_stop(self) -> R | None:
|
47
63
|
if self.on_stop is not None:
|
48
|
-
self.on_stop(self)
|
64
|
+
return self.on_stop(self)
|
65
|
+
else:
|
66
|
+
return None
|
49
67
|
|
50
68
|
@ta.override
|
51
|
-
def lifecycle_destroy(self) -> None:
|
69
|
+
def lifecycle_destroy(self) -> R | None:
|
52
70
|
if self.on_destroy is not None:
|
53
|
-
self.on_destroy(self)
|
71
|
+
return self.on_destroy(self)
|
72
|
+
else:
|
73
|
+
return None
|
74
|
+
|
75
|
+
|
76
|
+
##
|
77
|
+
|
78
|
+
|
79
|
+
class Lifecycle(AnyLifecycle[None]):
|
80
|
+
pass
|
81
|
+
|
82
|
+
|
83
|
+
class CallbackLifecycle(
|
84
|
+
AnyCallbackLifecycle[LifecycleT, None],
|
85
|
+
lang.Final,
|
86
|
+
ta.Generic[LifecycleT],
|
87
|
+
):
|
88
|
+
pass
|
89
|
+
|
90
|
+
|
91
|
+
##
|
92
|
+
|
93
|
+
|
94
|
+
class AsyncLifecycle(AnyLifecycle[ta.Awaitable[None]]):
|
95
|
+
pass
|
96
|
+
|
97
|
+
|
98
|
+
class CallbackAsyncLifecycle(
|
99
|
+
AnyCallbackLifecycle[LifecycleT, ta.Awaitable[None]],
|
100
|
+
lang.Final,
|
101
|
+
ta.Generic[LifecycleT],
|
102
|
+
):
|
103
|
+
pass
|
omlish/lifecycles/controller.py
CHANGED
@@ -1,99 +1,95 @@
|
|
1
|
+
import abc
|
1
2
|
import typing as ta
|
2
3
|
|
3
4
|
from .. import check
|
4
5
|
from .. import defs
|
5
6
|
from .. import lang
|
6
|
-
from .base import
|
7
|
+
from .base import AnyLifecycle # noqa
|
8
|
+
from .base import Lifecycle # noqa
|
7
9
|
from .states import LifecycleState
|
8
10
|
from .states import LifecycleStates
|
9
11
|
from .transitions import LifecycleTransition
|
10
12
|
from .transitions import LifecycleTransitions
|
11
13
|
|
12
14
|
|
15
|
+
R = ta.TypeVar('R')
|
16
|
+
|
17
|
+
AnyLifecycleT = ta.TypeVar('AnyLifecycleT', bound='AnyLifecycle')
|
18
|
+
|
13
19
|
LifecycleT = ta.TypeVar('LifecycleT', bound='Lifecycle')
|
14
20
|
|
15
21
|
|
16
22
|
##
|
17
23
|
|
18
24
|
|
19
|
-
class
|
20
|
-
def on_starting(self, obj:
|
21
|
-
|
25
|
+
class AnyLifecycleListener(ta.Generic[AnyLifecycleT, R]):
|
26
|
+
def on_starting(self, obj: AnyLifecycleT) -> R | None:
|
27
|
+
return None
|
22
28
|
|
23
|
-
def on_started(self, obj:
|
24
|
-
|
29
|
+
def on_started(self, obj: AnyLifecycleT) -> R | None:
|
30
|
+
return None
|
25
31
|
|
26
|
-
def on_stopping(self, obj:
|
27
|
-
|
32
|
+
def on_stopping(self, obj: AnyLifecycleT) -> R | None:
|
33
|
+
return None
|
28
34
|
|
29
|
-
def on_stopped(self, obj:
|
30
|
-
|
35
|
+
def on_stopped(self, obj: AnyLifecycleT) -> R | None:
|
36
|
+
return None
|
31
37
|
|
32
38
|
|
33
|
-
class
|
39
|
+
class AnyLifecycleController(AnyLifecycle[R], lang.Abstract, ta.Generic[AnyLifecycleT, R]):
|
34
40
|
def __init__(
|
35
41
|
self,
|
36
|
-
lifecycle:
|
37
|
-
*,
|
38
|
-
lock: lang.DefaultLockable = None,
|
42
|
+
lifecycle: AnyLifecycleT,
|
39
43
|
) -> None:
|
40
44
|
super().__init__()
|
41
45
|
|
42
|
-
self._lifecycle:
|
43
|
-
self._lock = lang.default_lock(lock, False)
|
46
|
+
self._lifecycle: AnyLifecycleT = check.isinstance(lifecycle, AnyLifecycle) # type: ignore
|
44
47
|
|
45
48
|
self._state = LifecycleStates.NEW
|
46
|
-
self._listeners: list[
|
49
|
+
self._listeners: list[AnyLifecycleListener[AnyLifecycleT, R]] = []
|
47
50
|
|
48
51
|
defs.repr('lifecycle', 'state')
|
49
52
|
|
50
53
|
@property
|
51
|
-
def lifecycle(self) ->
|
54
|
+
def lifecycle(self) -> AnyLifecycleT:
|
52
55
|
return self._lifecycle
|
53
56
|
|
54
57
|
@property
|
55
58
|
def state(self) -> LifecycleState:
|
56
59
|
return self._state
|
57
60
|
|
58
|
-
def add_listener(self, listener:
|
59
|
-
self._listeners.append(check.isinstance(listener,
|
61
|
+
def add_listener(self, listener: AnyLifecycleListener[AnyLifecycleT, R]) -> ta.Self:
|
62
|
+
self._listeners.append(check.isinstance(listener, AnyLifecycleListener))
|
60
63
|
return self
|
61
64
|
|
65
|
+
@abc.abstractmethod
|
62
66
|
def _advance(
|
63
67
|
self,
|
64
68
|
transition: LifecycleTransition,
|
65
|
-
lifecycle_fn: ta.Callable[[], None],
|
66
|
-
pre_listener_fn: ta.Callable[
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
lifecycle_fn()
|
77
|
-
except Exception:
|
78
|
-
self._state = transition.new_failed
|
79
|
-
raise
|
80
|
-
self._state = transition.new_succeeded
|
81
|
-
if post_listener_fn is not None:
|
82
|
-
for listener in self._listeners:
|
83
|
-
post_listener_fn(listener)(self._lifecycle)
|
69
|
+
lifecycle_fn: ta.Callable[[], R | None],
|
70
|
+
pre_listener_fn: ta.Callable[
|
71
|
+
[AnyLifecycleListener[AnyLifecycleT, R]],
|
72
|
+
ta.Callable[[AnyLifecycleT], R | None],
|
73
|
+
] | None = None,
|
74
|
+
post_listener_fn: ta.Callable[
|
75
|
+
[AnyLifecycleListener[AnyLifecycleT, R]],
|
76
|
+
ta.Callable[[AnyLifecycleT], R | None],
|
77
|
+
] | None = None,
|
78
|
+
) -> R | None:
|
79
|
+
raise NotImplementedError
|
84
80
|
|
85
81
|
##
|
86
82
|
|
87
83
|
@ta.override
|
88
|
-
def lifecycle_construct(self) -> None:
|
89
|
-
self._advance(
|
84
|
+
def lifecycle_construct(self) -> R | None:
|
85
|
+
return self._advance(
|
90
86
|
LifecycleTransitions.CONSTRUCT,
|
91
87
|
self._lifecycle.lifecycle_construct,
|
92
88
|
)
|
93
89
|
|
94
90
|
@ta.override
|
95
|
-
def lifecycle_start(self) -> None:
|
96
|
-
self._advance(
|
91
|
+
def lifecycle_start(self) -> R | None:
|
92
|
+
return self._advance(
|
97
93
|
LifecycleTransitions.START,
|
98
94
|
self._lifecycle.lifecycle_start,
|
99
95
|
lambda l: l.on_starting,
|
@@ -101,8 +97,8 @@ class LifecycleController(Lifecycle, ta.Generic[LifecycleT]):
|
|
101
97
|
)
|
102
98
|
|
103
99
|
@ta.override
|
104
|
-
def lifecycle_stop(self) -> None:
|
105
|
-
self._advance(
|
100
|
+
def lifecycle_stop(self) -> R | None:
|
101
|
+
return self._advance(
|
106
102
|
LifecycleTransitions.STOP,
|
107
103
|
self._lifecycle.lifecycle_stop,
|
108
104
|
lambda l: l.on_stopping,
|
@@ -110,8 +106,59 @@ class LifecycleController(Lifecycle, ta.Generic[LifecycleT]):
|
|
110
106
|
)
|
111
107
|
|
112
108
|
@ta.override
|
113
|
-
def lifecycle_destroy(self) -> None:
|
114
|
-
self._advance(
|
109
|
+
def lifecycle_destroy(self) -> R | None:
|
110
|
+
return self._advance(
|
115
111
|
LifecycleTransitions.DESTROY,
|
116
112
|
self._lifecycle.lifecycle_destroy,
|
117
113
|
)
|
114
|
+
|
115
|
+
|
116
|
+
##
|
117
|
+
|
118
|
+
|
119
|
+
LifecycleListener: ta.TypeAlias = AnyLifecycleListener[LifecycleT, None]
|
120
|
+
|
121
|
+
|
122
|
+
class LifecycleController(
|
123
|
+
AnyLifecycleController[LifecycleT, None],
|
124
|
+
Lifecycle,
|
125
|
+
ta.Generic[LifecycleT],
|
126
|
+
):
|
127
|
+
def __init__(
|
128
|
+
self,
|
129
|
+
lifecycle: LifecycleT,
|
130
|
+
*,
|
131
|
+
lock: lang.DefaultLockable = None,
|
132
|
+
) -> None:
|
133
|
+
super().__init__(lifecycle)
|
134
|
+
|
135
|
+
self._lock = lang.default_lock(lock, False)
|
136
|
+
|
137
|
+
def _advance(
|
138
|
+
self,
|
139
|
+
transition: LifecycleTransition,
|
140
|
+
lifecycle_fn: ta.Callable[[], None],
|
141
|
+
pre_listener_fn: ta.Callable[
|
142
|
+
[LifecycleListener[LifecycleT]],
|
143
|
+
ta.Callable[[LifecycleT], None],
|
144
|
+
] | None = None,
|
145
|
+
post_listener_fn: ta.Callable[
|
146
|
+
[LifecycleListener[LifecycleT]],
|
147
|
+
ta.Callable[[LifecycleT], None],
|
148
|
+
] | None = None,
|
149
|
+
) -> None:
|
150
|
+
with self._lock():
|
151
|
+
if pre_listener_fn is not None:
|
152
|
+
for listener in self._listeners:
|
153
|
+
pre_listener_fn(listener)(self._lifecycle)
|
154
|
+
check.state(self._state in transition.old)
|
155
|
+
self._state = transition.new_intermediate
|
156
|
+
try:
|
157
|
+
lifecycle_fn()
|
158
|
+
except Exception:
|
159
|
+
self._state = transition.new_failed
|
160
|
+
raise
|
161
|
+
self._state = transition.new_succeeded
|
162
|
+
if post_listener_fn is not None:
|
163
|
+
for listener in self._listeners:
|
164
|
+
post_listener_fn(listener)(self._lifecycle)
|
@@ -53,6 +53,7 @@ class Registry(ta.Generic[RegistryItemT]):
|
|
53
53
|
self._dct: dict[ta.Any, _KeyRegistryItems[RegistryItemT]] = {}
|
54
54
|
self._id_dct: ta.MutableMapping[ta.Any, _KeyRegistryItems[RegistryItemT]] = col.IdentityKeyDict()
|
55
55
|
|
56
|
+
self._version = 0
|
56
57
|
self._sealed = False
|
57
58
|
|
58
59
|
#
|
@@ -84,6 +85,9 @@ class Registry(ta.Generic[RegistryItemT]):
|
|
84
85
|
*items: RegistryItemT,
|
85
86
|
identity: bool = False,
|
86
87
|
) -> ta.Self:
|
88
|
+
if not items:
|
89
|
+
return self
|
90
|
+
|
87
91
|
with self._lock:
|
88
92
|
if self._sealed:
|
89
93
|
raise RegistrySealedError(self)
|
@@ -93,6 +97,8 @@ class Registry(ta.Generic[RegistryItemT]):
|
|
93
97
|
sr = dct[key] = _KeyRegistryItems(key)
|
94
98
|
sr.add(*items)
|
95
99
|
|
100
|
+
self._version += 1
|
101
|
+
|
96
102
|
return self
|
97
103
|
|
98
104
|
#
|
omlish/math/__init__.py
CHANGED
@@ -1,83 +1,89 @@
|
|
1
|
-
from
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
)
|
74
|
-
|
75
|
-
from .
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
)
|
80
|
-
|
81
|
-
from .
|
82
|
-
|
83
|
-
|
1
|
+
from .. import lang as _lang
|
2
|
+
|
3
|
+
|
4
|
+
with _lang.auto_proxy_init(globals()):
|
5
|
+
##
|
6
|
+
|
7
|
+
from .bits import ( # noqa
|
8
|
+
get_bit,
|
9
|
+
get_bits,
|
10
|
+
set_bit,
|
11
|
+
set_bits,
|
12
|
+
)
|
13
|
+
|
14
|
+
from .c import ( # noqa
|
15
|
+
cdiv,
|
16
|
+
cmod,
|
17
|
+
)
|
18
|
+
|
19
|
+
from .fixed import ( # noqa
|
20
|
+
CheckedFixedWidthIntError,
|
21
|
+
OverflowFixedWidthIntError,
|
22
|
+
UnderflowFixedWidthIntError,
|
23
|
+
|
24
|
+
FixedWidthInt,
|
25
|
+
|
26
|
+
SignedInt,
|
27
|
+
UnsignedInt,
|
28
|
+
|
29
|
+
CheckedInt,
|
30
|
+
ClampedInt,
|
31
|
+
|
32
|
+
AnyInt8,
|
33
|
+
AnyInt16,
|
34
|
+
AnyInt32,
|
35
|
+
AnyInt64,
|
36
|
+
AnyInt128,
|
37
|
+
|
38
|
+
CheckedInt8,
|
39
|
+
CheckedInt16,
|
40
|
+
CheckedInt32,
|
41
|
+
CheckedInt64,
|
42
|
+
CheckedInt128,
|
43
|
+
|
44
|
+
CheckedUint8,
|
45
|
+
CheckedUint16,
|
46
|
+
CheckedUint32,
|
47
|
+
CheckedUint64,
|
48
|
+
CheckedUint128,
|
49
|
+
|
50
|
+
ClampedInt8,
|
51
|
+
ClampedInt16,
|
52
|
+
ClampedInt32,
|
53
|
+
ClampedInt64,
|
54
|
+
ClampedInt128,
|
55
|
+
|
56
|
+
ClampedUint8,
|
57
|
+
ClampedUint16,
|
58
|
+
ClampedUint32,
|
59
|
+
ClampedUint64,
|
60
|
+
ClampedUint128,
|
61
|
+
|
62
|
+
WrappedInt8,
|
63
|
+
WrappedInt16,
|
64
|
+
WrappedInt32,
|
65
|
+
WrappedInt64,
|
66
|
+
WrappedInt128,
|
67
|
+
|
68
|
+
WrappedUint8,
|
69
|
+
WrappedUint16,
|
70
|
+
WrappedUint32,
|
71
|
+
WrappedUint64,
|
72
|
+
WrappedUint128,
|
73
|
+
)
|
74
|
+
|
75
|
+
from .floats import ( # noqa
|
76
|
+
isclose,
|
77
|
+
float_to_bytes,
|
78
|
+
bytes_to_float,
|
79
|
+
)
|
80
|
+
|
81
|
+
from .stats import ( # noqa
|
82
|
+
get_quantile,
|
83
|
+
|
84
|
+
Stats,
|
85
|
+
)
|
86
|
+
|
87
|
+
from .histogram import ( # noqa
|
88
|
+
SamplingHistogram,
|
89
|
+
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omlish
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev419
|
4
4
|
Summary: omlish
|
5
5
|
Author: wrmsr
|
6
6
|
License-Expression: BSD-3-Clause
|
@@ -132,7 +132,7 @@ dependencies of any kind**.
|
|
132
132
|
of the presence or absence of an object, as in [many](https://en.cppreference.com/w/cpp/utility/optional)
|
133
133
|
[other](https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html)
|
134
134
|
[languages](https://doc.rust-lang.org/std/option/).
|
135
|
-
- **[
|
135
|
+
- **[maysync](https://github.com/wrmsr/omlish/blob/master/omlish/lite/maysync.py)** - A lightweight means of sharing
|
136
136
|
code between sync and async contexts, eliminating the need for maintaining sync and async versions of functions.
|
137
137
|
|
138
138
|
- **[bootstrap](https://github.com/wrmsr/omlish/blob/master/omlish/bootstrap)** - A centralized, configurable,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=FLw7xkPiSXuImZgqSP8BwrEib2R1doSzUPLUkc-QUIA,8410
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=wXkYG_Y6_dahHEzlSoF0MBVQcUkILpOeAz1OmAcP31I,3568
|
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
|
@@ -129,7 +129,7 @@ omlish/configs/processing/rewriting.py,sha256=2zmyf7HcdN6kfuO9UGA88yeA_0A3xToUZe
|
|
129
129
|
omlish/configs/processing/strings.py,sha256=Iw85H_AE2TG8vdpbgwhye-aqz5Hkn4J9mM32FdXEiGo,832
|
130
130
|
omlish/daemons/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
131
131
|
omlish/daemons/daemon.py,sha256=pUwomapIrUwXLnov9jlA5EU1vp4qEYcIiUxKD3SQyVo,3479
|
132
|
-
omlish/daemons/launching.py,sha256=
|
132
|
+
omlish/daemons/launching.py,sha256=OGr32q-g5fVHrIXfrXacCcwtpTEAKgO9EQtEQKmdf0s,3749
|
133
133
|
omlish/daemons/reparent.py,sha256=uEs7pjzQkL8zhM8xADJhedmXXA7eDsu28639F5HkmpU,590
|
134
134
|
omlish/daemons/services.py,sha256=laoUeJU7eVHuWl1062FBjPSD7jchOjhpYDc5FT2B3dM,3462
|
135
135
|
omlish/daemons/spawning.py,sha256=psR73zOYjMKTqNpx1bMib8uU9wAZz62tw5TaWHrTdyY,5337
|
@@ -280,7 +280,7 @@ omlish/formats/json/backends/__init__.py,sha256=K5nAP-fCgUvaSylHqgRvmJp6j6PTWdMj
|
|
280
280
|
omlish/formats/json/backends/base.py,sha256=Sv3lfDEx8X8t1yVerOGyN-ra3LeJDTKzuSsW9EBBxIk,1119
|
281
281
|
omlish/formats/json/backends/default.py,sha256=PXVM8kM0LWRA1-aEAJ0JMfu9BDuHpPFCDgBme6JNdAw,1317
|
282
282
|
omlish/formats/json/backends/jiter.py,sha256=8qv_XWGpcupPtVm6Z_egHio_iY1Kk8eqkvXTF6fVZr4,1193
|
283
|
-
omlish/formats/json/backends/orjson.py,sha256=
|
283
|
+
omlish/formats/json/backends/orjson.py,sha256=X2jhKgUYYwaVuAppPQmfyncbOs2PJ7drqH5BioP-AYI,3831
|
284
284
|
omlish/formats/json/backends/std.py,sha256=Hhiug5CkC1TXLFrE9rnMR2on7xP-RliSvfYA9ill_U0,3159
|
285
285
|
omlish/formats/json/backends/ujson.py,sha256=U3iOlAURfiCdXbiNlXfIjDdtJDbDaLZsSuZriTUvbxs,2307
|
286
286
|
omlish/formats/json/stream/__init__.py,sha256=LOQvJGUEqvm1exve1hnWoO3mlMadShaO2Cy7XjCiWbA,829
|
@@ -304,7 +304,7 @@ omlish/formats/json5/_antlr/Json5Visitor.py,sha256=fIp5GhQ2Sd-bKEBBcBd31FOoCLiV1
|
|
304
304
|
omlish/formats/json5/_antlr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
305
305
|
omlish/formats/toml/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
306
306
|
omlish/formats/toml/codec.py,sha256=5HFGWEPd9IFxPlRMRheX8FEDlRIzLe1moHEOj2_PFKU,342
|
307
|
-
omlish/formats/toml/parser.py,sha256=
|
307
|
+
omlish/formats/toml/parser.py,sha256=aaZlEEPk0IQhfux_kjCY2K5mYYYDPNQ-4wWgZXskoAM,30675
|
308
308
|
omlish/formats/toml/writer.py,sha256=9NT8sRy3I9KubxFx56Qbislvrdtbd23rEuBT-GSdUYA,3232
|
309
309
|
omlish/funcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
310
310
|
omlish/funcs/builders.py,sha256=Av41RkDFbsVGzQ7cWzevCG-UqZhLCBSDT8DhyWKq1rQ,4006
|
@@ -424,14 +424,14 @@ omlish/iterators/iterators.py,sha256=RxW35yQ5ed8vBQ22IqpDXFx-i5JiLQdp7-pkMZXhJJ8
|
|
424
424
|
omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,472
|
425
425
|
omlish/iterators/tools.py,sha256=M16LXrJhMdsz5ea2qH0vws30ZvhQuQSCVFSLpRf_gTg,2096
|
426
426
|
omlish/iterators/unique.py,sha256=BSE-eanva8byFCJi09Nt2zzTsVr8LnTqY1PIInGYRs0,1396
|
427
|
-
omlish/lang/__init__.py,sha256=
|
427
|
+
omlish/lang/__init__.py,sha256=uquYJI6DghD_i3axIHlaP66ei8xp4exV1AO5BtoGFzg,9725
|
428
428
|
omlish/lang/asyncs.py,sha256=SmzkYghQID77vcgm1Evnd3r9_jd5DlfzJ8uQK7nkh0E,1517
|
429
429
|
omlish/lang/attrs.py,sha256=zFiVuGVOq88x45464T_LxDa-ZEq_RD9zJLq2zeVEBDc,5105
|
430
430
|
omlish/lang/casing.py,sha256=cFUlbDdXLhwnWwcYx4qnM5c4zGX7hIRUfcjiZbxUD28,4636
|
431
431
|
omlish/lang/clsdct.py,sha256=HAGIvBSbCefzRjXriwYSBLO7QHKRv2UsE78jixOb-fA,1828
|
432
432
|
omlish/lang/collections.py,sha256=XI76WcSi4SclWmEGirErg7EzQUfjtmiK2xSK7jJISzY,2528
|
433
433
|
omlish/lang/comparison.py,sha256=MOwEG0Yny-jBPHO9kQto9FSRyeNpQW24UABsghkrHxY,1356
|
434
|
-
omlish/lang/contextmanagers.py,sha256=
|
434
|
+
omlish/lang/contextmanagers.py,sha256=aL2KPRq7b6ULp9lQDbxVLe0fOjutrhnRPHbxeWXgeKA,9010
|
435
435
|
omlish/lang/datetimes.py,sha256=01tg21QOx-PWDlm-CSFTalym3vpqF0EKzeinmtcVNoU,379
|
436
436
|
omlish/lang/descriptors.py,sha256=sVJ1Pr4ihp26Tu9UCvDSyfSf-DhBnFGnbpYIFF32c7g,6877
|
437
437
|
omlish/lang/enums.py,sha256=F9tflHfaAoV2MpyuhZzpfX9-H55M3zNa9hCszsngEo8,111
|
@@ -441,7 +441,7 @@ omlish/lang/generators.py,sha256=a4D5HU_mySs2T2z3xCmE_s3t4QJkj0YRrK4-hhpGd0A,519
|
|
441
441
|
omlish/lang/iterables.py,sha256=y1SX2Co3VsOeX2wlfFF7K3rwLvF7Dtre7VY6EpfwAwA,3338
|
442
442
|
omlish/lang/lazyglobals.py,sha256=G1hwpyIgM4PUkVJ_St3K-EdQkHQdWpFOcXao6I5LwyY,1435
|
443
443
|
omlish/lang/maybes.py,sha256=ES1LK-9ebh2GNKZ7YfrS4OEoYHFhfiWkme4wU6Blzo4,77
|
444
|
-
omlish/lang/
|
444
|
+
omlish/lang/maysync.py,sha256=Yt0iFeEm53-iQTq91oCqeDqe5i1I-H7yL5ORe9zhx9U,1627
|
445
445
|
omlish/lang/objects.py,sha256=eOhFyFiwvxqpbLs5QTEkXU3rdSt_tQXDgHoWF5SA28E,6119
|
446
446
|
omlish/lang/outcomes.py,sha256=0PqxoKaGbBXU9UYZ6AE2QSq94Z-gFDt6wYdp0KomNQw,8712
|
447
447
|
omlish/lang/overrides.py,sha256=IBzK6ljfLX6TLgIyKTSjhqTLcuKRkQNVtEOnBLS4nuA,2095
|
@@ -466,14 +466,14 @@ omlish/lang/classes/virtual.py,sha256=z0MYQD9Q5MkX8DzF325wDB4J9XoYbsB09jZ1omC62T
|
|
466
466
|
omlish/lang/imports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
467
467
|
omlish/lang/imports/conditional.py,sha256=R-E47QD95mMonPImWlrde3rnJrFKCCkYz71c94W05sc,1006
|
468
468
|
omlish/lang/imports/lazy.py,sha256=Fhtb5tSAttff6G2pZdF8bh__GZlqJWHaMKtA8KubuX4,1479
|
469
|
-
omlish/lang/imports/proxyinit.py,sha256=
|
469
|
+
omlish/lang/imports/proxyinit.py,sha256=Mw3_Or0x8Gz0YrMBIdyfdALnqNi4HXgv6ZZQDPMWL_o,19629
|
470
470
|
omlish/lang/imports/resolving.py,sha256=DeRarn35Fryg5JhVhy8wbiC9lvr58AnllI9B_reswUE,2085
|
471
471
|
omlish/lang/imports/traversal.py,sha256=pbFQIa880NGjSfcLsno2vE_G41_CLwDHb-7gWg2J3BI,2855
|
472
|
-
omlish/lifecycles/__init__.py,sha256=
|
473
|
-
omlish/lifecycles/abstract.py,sha256=
|
474
|
-
omlish/lifecycles/base.py,sha256=
|
472
|
+
omlish/lifecycles/__init__.py,sha256=zOuvV4pErPwxcKUSgshmME2Duw9GrjwckpNmW3FPKng,810
|
473
|
+
omlish/lifecycles/abstract.py,sha256=1nMCFVislFq-boMD6TK9APIkRm_5OzcpSsDs2XnByVQ,2248
|
474
|
+
omlish/lifecycles/base.py,sha256=sCmzj2F-JcFD2qDsjNOPhKSbDIJaT9CEKK19RqkP-sg,2462
|
475
475
|
omlish/lifecycles/contextmanagers.py,sha256=JAGYm11JYHDaq-9Vs5gPPQZMLTQDeHQWvWhcCVX4Qag,2078
|
476
|
-
omlish/lifecycles/controller.py,sha256=
|
476
|
+
omlish/lifecycles/controller.py,sha256=DkbwzwVLuP9ZvG67jmhfW-am4YbcsE2qLNC82lVTXWw,4756
|
477
477
|
omlish/lifecycles/manager.py,sha256=92s1IH_gDP25PM5tFuPMP2hD_6s5fPi_VzZiDS5549g,5449
|
478
478
|
omlish/lifecycles/states.py,sha256=6gTdY3hn7-1sJ60lA3GeMx5RVKvXtFBBXE4KEjoO1Hs,1297
|
479
479
|
omlish/lifecycles/transitions.py,sha256=3IFdWGtAeoy3XRlIyW7yCKV4e4Iof9ytkqklGMRFYQs,1944
|
@@ -490,7 +490,7 @@ omlish/lite/json.py,sha256=m0Ce9eqUZG23-H7-oOp8n1sf4fzno5vtK4AK_4Vc-Mg,706
|
|
490
490
|
omlish/lite/logs.py,sha256=CWFG0NKGhqNeEgryF5atN2gkPYbUdTINEw_s1phbINM,51
|
491
491
|
omlish/lite/marshal.py,sha256=K_wnZwfC8cftGILyE3RlmzQEYuZOfzkMLKey41zuwtM,20296
|
492
492
|
omlish/lite/maybes.py,sha256=0p_fzb6yiOjEpvMKaQ53Q6CH1VPW1or7v7Lt1JIKcgM,4359
|
493
|
-
omlish/lite/
|
493
|
+
omlish/lite/maysync.py,sha256=9_u3sS2VacmfffBjbUYiu5eYG2XJ2lCIpYewwbmvPDc,14391
|
494
494
|
omlish/lite/pycharm.py,sha256=FRHGcCDo42UzZXqNwW_DkhI-6kb_CmJKPiQ8F6mYkLA,1174
|
495
495
|
omlish/lite/reflect.py,sha256=gI-Qlws9V-jND7kvCQFaIhBFrndVpDsikTQ7C6U2z3w,2434
|
496
496
|
omlish/lite/reprs.py,sha256=2Bc7ukhKvYNTKmxPIuv9glZIph13C37y_W4fg9pBnu8,2006
|
@@ -534,7 +534,7 @@ omlish/marshal/base/errors.py,sha256=jmN3vl_U_hB6L0wAvuO7ORG27vXF7KEUk-1TxxK2mYA
|
|
534
534
|
omlish/marshal/base/funcs.py,sha256=OeSb8T3R0HZmEnAI4lOhI1HPRurTAezzV3TZWdGGK9s,1558
|
535
535
|
omlish/marshal/base/options.py,sha256=OoDErPmI0kswnqAtr7QYndlPYhIqIDarx833tKFT2R4,23
|
536
536
|
omlish/marshal/base/overrides.py,sha256=543hP4_y2JRThUOamCE0dPfgucbepVV8e_YF-_PJk6U,993
|
537
|
-
omlish/marshal/base/registries.py,sha256=
|
537
|
+
omlish/marshal/base/registries.py,sha256=CHxjr2VPEwh2NwmnCB17AMY3YE9mWT9kUtPNiyTzGM8,3416
|
538
538
|
omlish/marshal/base/types.py,sha256=DBczbVhz9z9zM4uux43KUnCEJUIW_JqVNyXMxPd--Cs,2472
|
539
539
|
omlish/marshal/base/values.py,sha256=QF6OateG5kjRPHYza08wscThhg20oryf-aVQrxjfkC0,212
|
540
540
|
omlish/marshal/composite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -581,7 +581,7 @@ omlish/marshal/trivial/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
|
|
581
581
|
omlish/marshal/trivial/any.py,sha256=XaqSW0fyq2FVE4PQ4IG0UaXr59kRVGccgZDlsNHrd_Q,852
|
582
582
|
omlish/marshal/trivial/forbidden.py,sha256=fkvyBViUjrpfB6JJu47k-yxAvLkJw7JSZqSP-Abr_04,1092
|
583
583
|
omlish/marshal/trivial/nop.py,sha256=PDXT0B9RR-ghG6ExuK9BH2J-nHEnoTYGNdVaNAyRzSk,506
|
584
|
-
omlish/math/__init__.py,sha256=
|
584
|
+
omlish/math/__init__.py,sha256=bcdEEM3l4YNPJvTY_gD-7ARa5HEBNFTfvkVDTTzaNOQ,1531
|
585
585
|
omlish/math/bits.py,sha256=pcTuWxNXXfG-CtTITNNbW3YConAkCeU8PLNcglCc43E,533
|
586
586
|
omlish/math/c.py,sha256=JUHHZfVUUE4sb-6_LxJksbcLOLi9za0LdPs4dky5Ba8,308
|
587
587
|
omlish/math/fixed.py,sha256=pplyqqD6BxZWS9UEc8MHLsiMwx0-D1GLTeB8EL6yxHs,7419
|
@@ -779,7 +779,7 @@ omlish/subprocesses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
779
779
|
omlish/subprocesses/asyncs.py,sha256=G9wj275s3r0ueftHFl73Lt4kMRBc2hJOKcoJQCDlBms,2663
|
780
780
|
omlish/subprocesses/base.py,sha256=r60N3ad4ooSvdgFmT94L_xZEy7FMbMX6JcG2VgpHo6w,6139
|
781
781
|
omlish/subprocesses/editor.py,sha256=xBrd7gY0akhRfDIBK5YIBrYMHECtl_8r499iKViyfpQ,2634
|
782
|
-
omlish/subprocesses/
|
782
|
+
omlish/subprocesses/maysync.py,sha256=zMs54wliA5-Kd986shgo4YY3W_4pOCJKpIrun0VYPyM,1444
|
783
783
|
omlish/subprocesses/run.py,sha256=8EeMm2FdNEFmEmbhhzJyHXASUhCCMMRN_-8ybqFhgLI,4378
|
784
784
|
omlish/subprocesses/sync.py,sha256=L-ZNj9RrZd69XjlKrXjt-EJ-XUpQF8E35Mh3b3SI3vc,3671
|
785
785
|
omlish/subprocesses/utils.py,sha256=v5uEzxmbmRvXwOl_0DtBa5Il6yITKYRgmVSGHcLsT4o,402
|
@@ -923,9 +923,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
|
|
923
923
|
omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
|
924
924
|
omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
|
925
925
|
omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
|
926
|
-
omlish-0.0.0.
|
927
|
-
omlish-0.0.0.
|
928
|
-
omlish-0.0.0.
|
929
|
-
omlish-0.0.0.
|
930
|
-
omlish-0.0.0.
|
931
|
-
omlish-0.0.0.
|
926
|
+
omlish-0.0.0.dev419.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
927
|
+
omlish-0.0.0.dev419.dist-info/METADATA,sha256=G3EL-J9uLveMopCZ00adkjfg8wh3IqMtmQm8iyZ0iGc,19242
|
928
|
+
omlish-0.0.0.dev419.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
929
|
+
omlish-0.0.0.dev419.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
930
|
+
omlish-0.0.0.dev419.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
931
|
+
omlish-0.0.0.dev419.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|