omlish 0.0.0.dev150__py3-none-any.whl → 0.0.0.dev152__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/argparse/cli.py +54 -13
- omlish/asyncs/__init__.py +0 -35
- omlish/asyncs/all.py +35 -0
- omlish/bootstrap/sys.py +2 -2
- omlish/diag/procfs.py +8 -8
- omlish/docker/__init__.py +0 -37
- omlish/docker/all.py +31 -0
- omlish/docker/consts.py +4 -0
- omlish/{lite/docker.py → docker/detect.py} +16 -1
- omlish/docker/{helpers.py → timebomb.py} +0 -15
- omlish/inject/managed.py +2 -2
- omlish/lite/check.py +1 -1
- omlish/lite/subprocesses.py +1 -1
- omlish/os/__init__.py +0 -0
- omlish/{lite → os}/deathsig.py +1 -0
- omlish/{os.py → os/files.py} +0 -9
- omlish/{lite → os}/journald.py +2 -1
- omlish/{lite → os}/pidfile.py +1 -0
- omlish/os/sizes.py +9 -0
- omlish/sql/alchemy/asyncs.py +1 -1
- omlish/testing/pytest/plugins/switches.py +1 -1
- {omlish-0.0.0.dev150.dist-info → omlish-0.0.0.dev152.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev150.dist-info → omlish-0.0.0.dev152.dist-info}/RECORD +28 -23
- {omlish-0.0.0.dev150.dist-info → omlish-0.0.0.dev152.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev150.dist-info → omlish-0.0.0.dev152.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev150.dist-info → omlish-0.0.0.dev152.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev150.dist-info → omlish-0.0.0.dev152.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
omlish/argparse/cli.py
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
TODO:
|
5
5
|
- default command
|
6
6
|
- auto match all underscores to hyphens
|
7
|
+
- pre-run, post-run hooks
|
8
|
+
- exitstack?
|
7
9
|
"""
|
8
10
|
import argparse
|
9
11
|
import dataclasses as dc
|
@@ -136,11 +138,12 @@ class ArgparseCli:
|
|
136
138
|
|
137
139
|
self._args, self._unknown_args = self.get_parser().parse_known_args(self._argv)
|
138
140
|
|
141
|
+
#
|
142
|
+
|
139
143
|
def __init_subclass__(cls, **kwargs: ta.Any) -> None:
|
140
144
|
super().__init_subclass__(**kwargs)
|
141
145
|
|
142
146
|
ns = cls.__dict__
|
143
|
-
|
144
147
|
objs = {}
|
145
148
|
mro = cls.__mro__[::-1]
|
146
149
|
for bns in [bcls.__dict__ for bcls in reversed(mro)] + [ns]:
|
@@ -153,24 +156,33 @@ class ArgparseCli:
|
|
153
156
|
elif k in objs:
|
154
157
|
del [k]
|
155
158
|
|
159
|
+
#
|
160
|
+
|
156
161
|
anns = ta.get_type_hints(_ArgparseCliAnnotationBox({
|
157
162
|
**{k: v for bcls in reversed(mro) for k, v in getattr(bcls, '__annotations__', {}).items()},
|
158
163
|
**ns.get('__annotations__', {}),
|
159
164
|
}), globalns=ns.get('__globals__', {}))
|
160
165
|
|
166
|
+
#
|
167
|
+
|
161
168
|
if '_parser' in ns:
|
162
169
|
parser = check.isinstance(ns['_parser'], argparse.ArgumentParser)
|
163
170
|
else:
|
164
171
|
parser = argparse.ArgumentParser()
|
165
172
|
setattr(cls, '_parser', parser)
|
166
173
|
|
174
|
+
#
|
175
|
+
|
167
176
|
subparsers = parser.add_subparsers()
|
177
|
+
|
168
178
|
for att, obj in objs.items():
|
169
179
|
if isinstance(obj, ArgparseCommand):
|
170
180
|
if obj.parent is not None:
|
171
181
|
raise NotImplementedError
|
182
|
+
|
172
183
|
for cn in [obj.name, *(obj.aliases or [])]:
|
173
|
-
|
184
|
+
subparser = subparsers.add_parser(cn)
|
185
|
+
|
174
186
|
for arg in (obj.args or []):
|
175
187
|
if (
|
176
188
|
len(arg.args) == 1 and
|
@@ -178,29 +190,34 @@ class ArgparseCli:
|
|
178
190
|
not (n := check.isinstance(arg.args[0], str)).startswith('-') and
|
179
191
|
'metavar' not in arg.kwargs
|
180
192
|
):
|
181
|
-
|
193
|
+
subparser.add_argument(
|
182
194
|
n.replace('-', '_'),
|
183
195
|
**arg.kwargs,
|
184
196
|
metavar=n,
|
185
197
|
)
|
186
198
|
else:
|
187
|
-
|
188
|
-
|
199
|
+
subparser.add_argument(*arg.args, **arg.kwargs)
|
200
|
+
|
201
|
+
subparser.set_defaults(_cmd=obj)
|
189
202
|
|
190
203
|
elif isinstance(obj, ArgparseArg):
|
191
204
|
if att in anns:
|
192
|
-
|
193
|
-
obj.kwargs = {**
|
205
|
+
ann_kwargs = _get_argparse_arg_ann_kwargs(anns[att])
|
206
|
+
obj.kwargs = {**ann_kwargs, **obj.kwargs}
|
207
|
+
|
194
208
|
if not obj.dest:
|
195
209
|
if 'dest' in obj.kwargs:
|
196
210
|
obj.dest = obj.kwargs['dest']
|
197
211
|
else:
|
198
212
|
obj.dest = obj.kwargs['dest'] = att # type: ignore
|
213
|
+
|
199
214
|
parser.add_argument(*obj.args, **obj.kwargs)
|
200
215
|
|
201
216
|
else:
|
202
217
|
raise TypeError(obj)
|
203
218
|
|
219
|
+
#
|
220
|
+
|
204
221
|
_parser: ta.ClassVar[argparse.ArgumentParser]
|
205
222
|
|
206
223
|
@classmethod
|
@@ -219,10 +236,12 @@ class ArgparseCli:
|
|
219
236
|
def unknown_args(self) -> ta.Sequence[str]:
|
220
237
|
return self._unknown_args
|
221
238
|
|
222
|
-
|
223
|
-
|
239
|
+
#
|
240
|
+
|
241
|
+
def _bind_cli_cmd(self, cmd: ArgparseCommand) -> ta.Callable:
|
242
|
+
return cmd.__get__(self, type(self))
|
224
243
|
|
225
|
-
def
|
244
|
+
def prepare_cli_run(self) -> ta.Optional[ta.Callable]:
|
226
245
|
cmd = getattr(self.args, '_cmd', None)
|
227
246
|
|
228
247
|
if self._unknown_args and not (cmd is not None and cmd.accepts_unknown):
|
@@ -234,9 +253,31 @@ class ArgparseCli:
|
|
234
253
|
|
235
254
|
if cmd is None:
|
236
255
|
self.get_parser().print_help()
|
256
|
+
return None
|
257
|
+
|
258
|
+
return self._bind_cli_cmd(cmd)
|
259
|
+
|
260
|
+
#
|
261
|
+
|
262
|
+
def cli_run(self) -> ta.Optional[int]:
|
263
|
+
if (fn := self.prepare_cli_run()) is None:
|
237
264
|
return 0
|
238
265
|
|
239
|
-
return
|
266
|
+
return fn()
|
267
|
+
|
268
|
+
def cli_run_and_exit(self) -> ta.NoReturn:
|
269
|
+
sys.exit(rc if isinstance(rc := self.cli_run(), int) else 0)
|
270
|
+
|
271
|
+
def __call__(self, *, exit: bool = False) -> ta.Optional[int]: # noqa
|
272
|
+
if exit:
|
273
|
+
return self.cli_run_and_exit()
|
274
|
+
else:
|
275
|
+
return self.cli_run()
|
276
|
+
|
277
|
+
#
|
278
|
+
|
279
|
+
async def async_cli_run(self) -> ta.Optional[int]:
|
280
|
+
if (fn := self.prepare_cli_run()) is None:
|
281
|
+
return 0
|
240
282
|
|
241
|
-
|
242
|
-
sys.exit(rc if isinstance(rc := self(), int) else 0)
|
283
|
+
return await fn()
|
omlish/asyncs/__init__.py
CHANGED
@@ -1,35 +0,0 @@
|
|
1
|
-
from .asyncs import ( # noqa
|
2
|
-
SyncableIterable,
|
3
|
-
async_list,
|
4
|
-
sync_await,
|
5
|
-
sync_list,
|
6
|
-
syncable_iterable,
|
7
|
-
)
|
8
|
-
|
9
|
-
from .bridge import ( # noqa
|
10
|
-
a_to_s,
|
11
|
-
is_in_bridge,
|
12
|
-
s_to_a,
|
13
|
-
s_to_a_await,
|
14
|
-
trivial_a_to_s,
|
15
|
-
trivial_s_to_a,
|
16
|
-
)
|
17
|
-
|
18
|
-
from .flavors import ( # noqa
|
19
|
-
ContextManagerAdapter,
|
20
|
-
Flavor,
|
21
|
-
adapt,
|
22
|
-
adapt_context,
|
23
|
-
from_anyio,
|
24
|
-
from_anyio_context,
|
25
|
-
from_asyncio,
|
26
|
-
from_asyncio_context,
|
27
|
-
from_trio,
|
28
|
-
from_trio_context,
|
29
|
-
get_flavor,
|
30
|
-
mark_anyio,
|
31
|
-
mark_asyncio,
|
32
|
-
mark_flavor,
|
33
|
-
mark_trio,
|
34
|
-
with_adapter_loop,
|
35
|
-
)
|
omlish/asyncs/all.py
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
from .asyncs import ( # noqa
|
2
|
+
SyncableIterable,
|
3
|
+
async_list,
|
4
|
+
sync_await,
|
5
|
+
sync_list,
|
6
|
+
syncable_iterable,
|
7
|
+
)
|
8
|
+
|
9
|
+
from .bridge import ( # noqa
|
10
|
+
a_to_s,
|
11
|
+
is_in_bridge,
|
12
|
+
s_to_a,
|
13
|
+
s_to_a_await,
|
14
|
+
trivial_a_to_s,
|
15
|
+
trivial_s_to_a,
|
16
|
+
)
|
17
|
+
|
18
|
+
from .flavors import ( # noqa
|
19
|
+
ContextManagerAdapter,
|
20
|
+
Flavor,
|
21
|
+
adapt,
|
22
|
+
adapt_context,
|
23
|
+
from_anyio,
|
24
|
+
from_anyio_context,
|
25
|
+
from_asyncio,
|
26
|
+
from_asyncio_context,
|
27
|
+
from_trio,
|
28
|
+
from_trio_context,
|
29
|
+
get_flavor,
|
30
|
+
mark_anyio,
|
31
|
+
mark_asyncio,
|
32
|
+
mark_flavor,
|
33
|
+
mark_trio,
|
34
|
+
with_adapter_loop,
|
35
|
+
)
|
omlish/bootstrap/sys.py
CHANGED
@@ -23,13 +23,13 @@ if ta.TYPE_CHECKING:
|
|
23
23
|
from .. import libc
|
24
24
|
from .. import logs
|
25
25
|
from ..formats import dotenv
|
26
|
-
from ..
|
26
|
+
from ..os import pidfile
|
27
27
|
|
28
28
|
else:
|
29
29
|
libc = lang.proxy_import('..libc', __package__)
|
30
30
|
logs = lang.proxy_import('..logs', __package__)
|
31
31
|
dotenv = lang.proxy_import('..formats.dotenv', __package__)
|
32
|
-
pidfile = lang.proxy_import('..
|
32
|
+
pidfile = lang.proxy_import('..os.pidfile', __package__)
|
33
33
|
|
34
34
|
|
35
35
|
##
|
omlish/diag/procfs.py
CHANGED
@@ -13,8 +13,8 @@ import typing as ta
|
|
13
13
|
|
14
14
|
from .. import iterators as it
|
15
15
|
from .. import lang
|
16
|
-
from .. import os as oos
|
17
16
|
from ..formats import json
|
17
|
+
from ..os.sizes import PAGE_SIZE
|
18
18
|
from .procstats import ProcStats
|
19
19
|
|
20
20
|
|
@@ -239,8 +239,8 @@ def get_process_range_pagemaps(start: int, end: int, pid: PidLike = 'self') -> t
|
|
239
239
|
"""https://www.kernel.org/doc/Documentation/vm/pagemap.txt"""
|
240
240
|
|
241
241
|
_check_linux()
|
242
|
-
offset = (start //
|
243
|
-
npages = ((end - start) //
|
242
|
+
offset = (start // PAGE_SIZE) * 8
|
243
|
+
npages = ((end - start) // PAGE_SIZE)
|
244
244
|
size = npages * 8
|
245
245
|
with open(f'/proc/{pid}/pagemap', 'rb') as pagemap_file:
|
246
246
|
pagemap_file.seek(offset)
|
@@ -251,7 +251,7 @@ def get_process_range_pagemaps(start: int, end: int, pid: PidLike = 'self') -> t
|
|
251
251
|
for pagenum in range(npages):
|
252
252
|
[packed] = _struct_unpack('Q', pagemap_buf[pagenum * 8:(pagenum + 1) * 8])
|
253
253
|
yield {
|
254
|
-
'address': start + (pagenum *
|
254
|
+
'address': start + (pagenum * PAGE_SIZE),
|
255
255
|
'pfn': (packed & ((1 << (54 + 1)) - 1)),
|
256
256
|
'swap_type': (packed & ((1 << (4 + 1)) - 1)),
|
257
257
|
'swap_offset': (packed & ((1 << (54 + 1)) - 1)) >> 5,
|
@@ -280,7 +280,7 @@ def _dump_cmd(args: ta.Any) -> None:
|
|
280
280
|
sys.stdout.write('\n')
|
281
281
|
for pm in get_process_range_pagemaps(m['address'], m['end_address'], args.pid):
|
282
282
|
if pm['pte_soft_dirty']:
|
283
|
-
dirty_total +=
|
283
|
+
dirty_total += PAGE_SIZE
|
284
284
|
sys.stdout.write(json.dumps({'page': tuple(pm[k] for k in PAGEMAP_KEYS)}))
|
285
285
|
sys.stdout.write('\n')
|
286
286
|
dct = {
|
@@ -326,11 +326,11 @@ def _cmp_cmd(args: ta.Any) -> None:
|
|
326
326
|
r_pages += c_pages
|
327
327
|
dct = {
|
328
328
|
'l_pages': l_pages,
|
329
|
-
'l_bytes': l_pages *
|
329
|
+
'l_bytes': l_pages * PAGE_SIZE,
|
330
330
|
'r_pages': r_pages,
|
331
|
-
'r_bytes': r_pages *
|
331
|
+
'r_bytes': r_pages * PAGE_SIZE,
|
332
332
|
'c_pages': c_pages,
|
333
|
-
'c_bytes': c_pages *
|
333
|
+
'c_bytes': c_pages * PAGE_SIZE,
|
334
334
|
}
|
335
335
|
sys.stdout.write(json.dumps(dct))
|
336
336
|
sys.stdout.write('\n')
|
omlish/docker/__init__.py
CHANGED
@@ -1,37 +0,0 @@
|
|
1
|
-
from .cli import ( # noqa
|
2
|
-
Inspect,
|
3
|
-
Port,
|
4
|
-
PsItem,
|
5
|
-
cli_inspect,
|
6
|
-
cli_ps,
|
7
|
-
has_cli,
|
8
|
-
parse_port,
|
9
|
-
)
|
10
|
-
|
11
|
-
from .compose import ( # noqa
|
12
|
-
ComposeConfig,
|
13
|
-
get_compose_port,
|
14
|
-
)
|
15
|
-
|
16
|
-
from .helpers import ( # noqa
|
17
|
-
DOCKER_HOST_PLATFORM_KEY,
|
18
|
-
get_docker_host_platform,
|
19
|
-
timebomb_payload,
|
20
|
-
)
|
21
|
-
|
22
|
-
from .hub import ( # noqa
|
23
|
-
HubRepoInfo,
|
24
|
-
get_hub_repo_info,
|
25
|
-
select_latest_tag,
|
26
|
-
split_tag_suffix,
|
27
|
-
)
|
28
|
-
|
29
|
-
|
30
|
-
##
|
31
|
-
|
32
|
-
|
33
|
-
from ..lite.docker import ( # noqa
|
34
|
-
DOCKER_FOR_MAC_HOSTNAME,
|
35
|
-
|
36
|
-
is_likely_in_docker,
|
37
|
-
)
|
omlish/docker/all.py
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
from .cli import ( # noqa
|
2
|
+
Inspect,
|
3
|
+
Port,
|
4
|
+
PsItem,
|
5
|
+
cli_inspect,
|
6
|
+
cli_ps,
|
7
|
+
has_cli,
|
8
|
+
parse_port,
|
9
|
+
)
|
10
|
+
|
11
|
+
from .compose import ( # noqa
|
12
|
+
ComposeConfig,
|
13
|
+
get_compose_port,
|
14
|
+
)
|
15
|
+
|
16
|
+
from .detect import ( # noqa
|
17
|
+
DOCKER_HOST_PLATFORM_KEY,
|
18
|
+
get_docker_host_platform,
|
19
|
+
is_likely_in_docker,
|
20
|
+
)
|
21
|
+
|
22
|
+
from .hub import ( # noqa
|
23
|
+
HubRepoInfo,
|
24
|
+
get_hub_repo_info,
|
25
|
+
select_latest_tag,
|
26
|
+
split_tag_suffix,
|
27
|
+
)
|
28
|
+
|
29
|
+
from .timebomb import ( # noqa
|
30
|
+
timebomb_payload,
|
31
|
+
)
|
omlish/docker/consts.py
ADDED
@@ -1,8 +1,23 @@
|
|
1
|
+
# ruff: noqa: UP006 UP007
|
2
|
+
# @omlish-lite
|
3
|
+
import os
|
1
4
|
import re
|
2
5
|
import sys
|
6
|
+
import typing as ta
|
3
7
|
|
4
8
|
|
5
|
-
|
9
|
+
##
|
10
|
+
|
11
|
+
|
12
|
+
# Set by pyproject, docker-dev script
|
13
|
+
DOCKER_HOST_PLATFORM_KEY = 'DOCKER_HOST_PLATFORM'
|
14
|
+
|
15
|
+
|
16
|
+
def get_docker_host_platform() -> ta.Optional[str]:
|
17
|
+
return os.environ.get(DOCKER_HOST_PLATFORM_KEY)
|
18
|
+
|
19
|
+
|
20
|
+
##
|
6
21
|
|
7
22
|
|
8
23
|
_LIKELY_IN_DOCKER_PATTERN = re.compile(r'^overlay / .*/(docker|desktop-containerd)/')
|
@@ -1,10 +1,6 @@
|
|
1
|
-
import os
|
2
1
|
import shlex
|
3
2
|
|
4
3
|
|
5
|
-
##
|
6
|
-
|
7
|
-
|
8
4
|
_DEFAULT_TIMEBOMB_NAME = '-'.join([*__name__.split('.'), 'timebomb'])
|
9
5
|
|
10
6
|
|
@@ -16,14 +12,3 @@ def timebomb_payload(delay_s: float, name: str = _DEFAULT_TIMEBOMB_NAME) -> str:
|
|
16
12
|
'sh -c \'killall5 -9 -o $PPID -o $$ ; kill 1\''
|
17
13
|
') &'
|
18
14
|
)
|
19
|
-
|
20
|
-
|
21
|
-
##
|
22
|
-
|
23
|
-
|
24
|
-
# Set by pyproject, docker-dev script
|
25
|
-
DOCKER_HOST_PLATFORM_KEY = 'DOCKER_HOST_PLATFORM'
|
26
|
-
|
27
|
-
|
28
|
-
def get_docker_host_platform() -> str | None:
|
29
|
-
return os.environ.get(DOCKER_HOST_PLATFORM_KEY)
|
omlish/inject/managed.py
CHANGED
@@ -14,9 +14,9 @@ from .injector import create_injector
|
|
14
14
|
|
15
15
|
|
16
16
|
if ta.TYPE_CHECKING:
|
17
|
-
from .. import
|
17
|
+
from ..asyncs import all as _asyncs
|
18
18
|
else:
|
19
|
-
_asyncs = lang.proxy_import('..asyncs', __package__)
|
19
|
+
_asyncs = lang.proxy_import('..asyncs.all', __package__)
|
20
20
|
|
21
21
|
|
22
22
|
T = ta.TypeVar('T')
|
omlish/lite/check.py
CHANGED
@@ -14,7 +14,7 @@ T = ta.TypeVar('T')
|
|
14
14
|
SizedT = ta.TypeVar('SizedT', bound=ta.Sized)
|
15
15
|
|
16
16
|
CheckMessage = ta.Union[str, ta.Callable[..., ta.Optional[str]], None] # ta.TypeAlias
|
17
|
-
CheckLateConfigureFn = ta.Callable[['Checks'], None]
|
17
|
+
CheckLateConfigureFn = ta.Callable[['Checks'], None] # ta.TypeAlias
|
18
18
|
CheckOnRaiseFn = ta.Callable[[Exception], None] # ta.TypeAlias
|
19
19
|
CheckExceptionFactory = ta.Callable[..., Exception] # ta.TypeAlias
|
20
20
|
CheckArgsRenderer = ta.Callable[..., ta.Optional[str]] # ta.TypeAlias
|
omlish/lite/subprocesses.py
CHANGED
omlish/os/__init__.py
ADDED
File without changes
|
omlish/{lite → os}/deathsig.py
RENAMED
omlish/{os.py → os/files.py}
RENAMED
@@ -1,19 +1,10 @@
|
|
1
1
|
import contextlib
|
2
2
|
import os
|
3
|
-
import resource
|
4
3
|
import shutil
|
5
4
|
import tempfile
|
6
5
|
import typing as ta
|
7
6
|
|
8
7
|
|
9
|
-
PAGE_SIZE = resource.getpagesize()
|
10
|
-
|
11
|
-
|
12
|
-
def round_to_page_size(sz: int) -> int:
|
13
|
-
sz += PAGE_SIZE - 1
|
14
|
-
return sz - (sz % PAGE_SIZE)
|
15
|
-
|
16
|
-
|
17
8
|
@contextlib.contextmanager
|
18
9
|
def tmp_dir(
|
19
10
|
root_dir: str | None = None,
|
omlish/{lite → os}/journald.py
RENAMED
@@ -1,4 +1,5 @@
|
|
1
1
|
# ruff: noqa: UP007 UP012
|
2
|
+
# @omlish-lite
|
2
3
|
import ctypes as ct
|
3
4
|
import logging
|
4
5
|
import sys
|
@@ -6,7 +7,7 @@ import syslog
|
|
6
7
|
import threading
|
7
8
|
import typing as ta
|
8
9
|
|
9
|
-
from .cached import cached_nullary
|
10
|
+
from ..lite.cached import cached_nullary
|
10
11
|
|
11
12
|
|
12
13
|
##
|
omlish/{lite → os}/pidfile.py
RENAMED
omlish/os/sizes.py
ADDED
omlish/sql/alchemy/asyncs.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=RX24SRc6DCEg77PUVnaXOKCWa5TF_c9RQJdGIf7gl9c,1135
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=Ns9xWW8wbI1DTKwID9EOPabBkKEIOnxYGWygqeQ6Z94,3409
|
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
|
@@ -10,7 +10,6 @@ omlish/dynamic.py,sha256=35C_cCX_Vq2HrHzGk5T-zbrMvmUdiIiwDzDNixczoDo,6541
|
|
10
10
|
omlish/iterators.py,sha256=GGLC7RIT86uXMjhIIIqnff_Iu5SI_b9rXYywYGFyzmo,7292
|
11
11
|
omlish/libc.py,sha256=8r7Ejyhttk9ruCfBkxNTrlzir5WPbDE2vmY7VPlceMA,15362
|
12
12
|
omlish/multiprocessing.py,sha256=QZT4C7I-uThCAjaEY3xgUYb-5GagUlnE4etN01LDyU4,5186
|
13
|
-
omlish/os.py,sha256=5nJ-a9JKSMoaZVZ1eOa5BAbfL7o7CF7ue_PyJwufnwY,1460
|
14
13
|
omlish/runmodule.py,sha256=PWvuAaJ9wQQn6bx9ftEL3_d04DyotNn8dR_twm2pgw0,700
|
15
14
|
omlish/sync.py,sha256=QJ79kxmIqDP9SeHDoZAf--DpFIhDQe1jACy8H4N0yZI,2928
|
16
15
|
omlish/term.py,sha256=BXJSE9gfM461bh4z_gysx0oavZSafqcQs5ayZK-kTUo,9284
|
@@ -76,8 +75,9 @@ omlish/antlr/_runtime/xpath/XPathLexer.py,sha256=xFtdr4ZXMZxb2dnB_ggWyhvlQiC7RXQ
|
|
76
75
|
omlish/antlr/_runtime/xpath/__init__.py,sha256=lMd_BbXYdlDhZQN_q0TKN978XW5G0pq618F0NaLkpFE,71
|
77
76
|
omlish/argparse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
78
77
|
omlish/argparse/all.py,sha256=EfUSf27vFWqa4Q93AycU5YRsrHt-Nx3pU3uNVapb-EE,1054
|
79
|
-
omlish/argparse/cli.py,sha256=
|
80
|
-
omlish/asyncs/__init__.py,sha256=
|
78
|
+
omlish/argparse/cli.py,sha256=RrFql1bS1Lw3GA1ooLCJDQX4bK_Ci-dDqD5nEkVgHGI,8072
|
79
|
+
omlish/asyncs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
80
|
+
omlish/asyncs/all.py,sha256=uUz9ziKh4_QrgmdhKFMgq6j7mFbiZd3LiogguDCQsGI,587
|
81
81
|
omlish/asyncs/anyio.py,sha256=gfpx-D8QGmUfhnQxHEaHXcAP8zSMQjcGw4COFTGNnHI,8021
|
82
82
|
omlish/asyncs/asyncio.py,sha256=JfM59QgB3asgEbrps0zoVbNjWD4kL2XdsEkRMEIoFos,971
|
83
83
|
omlish/asyncs/asyncs.py,sha256=Tf7ZodTGepkM7HAuFcDNh9lLzzrMw6rELWvopGmFkh4,2035
|
@@ -92,7 +92,7 @@ omlish/bootstrap/diag.py,sha256=iemH0nQEHEDzyZztvd_ygGGVpRpgn5UG6naxeQTvXp0,5347
|
|
92
92
|
omlish/bootstrap/harness.py,sha256=VW8YP-yENGyXIuJ8GL_xintArF13nafwpz-iAghPt34,1967
|
93
93
|
omlish/bootstrap/main.py,sha256=yZhOHDDlj4xB5a89dRdT8z58FsqqnpoBg1-tvY2CJe4,5903
|
94
94
|
omlish/bootstrap/marshal.py,sha256=ZxdAeMNd2qXRZ1HUK89HmEhz8tqlS9OduW34QBscKw0,516
|
95
|
-
omlish/bootstrap/sys.py,sha256=
|
95
|
+
omlish/bootstrap/sys.py,sha256=S6HgjfCKYNuC_iW6gIJNVp8-eJ_wm0JTBMyQRZLE6eQ,8758
|
96
96
|
omlish/collections/__init__.py,sha256=zeUvcAz073ekko37QKya6sElTMfKTuF1bKrdbMtaRpI,2142
|
97
97
|
omlish/collections/abc.py,sha256=sP7BpTVhx6s6C59mTFeosBi4rHOWC6tbFBYbxdZmvh0,2365
|
98
98
|
omlish/collections/coerce.py,sha256=g68ROb_-5HgH-vI8612mU2S0FZ8-wp2ZHK5_Zy_kVC0,7037
|
@@ -151,7 +151,7 @@ omlish/dataclasses/impl/utils.py,sha256=aER2iL3UAtgS1BdLuEvTr9Tr2wC28wk1kiOeO-jI
|
|
151
151
|
omlish/diag/__init__.py,sha256=4S8v0myJM4Zld6_FV6cPe_nSv0aJb6kXftEit0HkiGE,1141
|
152
152
|
omlish/diag/asts.py,sha256=BveUUNUcaAm4Hg55f4ZxGSI313E4L8cCZ5XjHpEkKVI,3325
|
153
153
|
omlish/diag/debug.py,sha256=ClED7kKXeVMyKrjGIxcq14kXk9kvUJfytBQwK9y7c4Q,1637
|
154
|
-
omlish/diag/procfs.py,sha256=
|
154
|
+
omlish/diag/procfs.py,sha256=KaGTAA2Gj8eEEp7MjClRe4aimwzd-HDABThFzvq2cBQ,9684
|
155
155
|
omlish/diag/procstats.py,sha256=UkqxREqfd-38xPYZ9T1SIJISz5ARQCEhTtOZrxtm2dE,777
|
156
156
|
omlish/diag/ps.py,sha256=1JWxZen3fVG-20R6ZZ8BtO_gpzw_5bhHZiKdoHkgxoU,1004
|
157
157
|
omlish/diag/pycharm.py,sha256=7-r_F-whXt8v-0dehxAX-MeMFPM3iZXX9IfeL0GfUtk,4643
|
@@ -169,12 +169,15 @@ omlish/dispatch/_dispatch3.py,sha256=Vnu5DfoPWFJLodudBqoZBXGTi2wYk-Az56MXJgdQvwc
|
|
169
169
|
omlish/dispatch/dispatch.py,sha256=8XQiLVoAq4u2oO0DnDSXQB9Q5qDk569l4CIFBqwDSyc,3847
|
170
170
|
omlish/dispatch/functions.py,sha256=S8ElsLi6DKxTdtFGigWaF0vAquwy2sK-3f4iRLaYq70,1522
|
171
171
|
omlish/dispatch/methods.py,sha256=XHjwwC9Gn4iDWxbyLAcbdSwRgVaq-8Bnn5cAwf5oZdA,5403
|
172
|
-
omlish/docker/__init__.py,sha256=
|
172
|
+
omlish/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
173
|
+
omlish/docker/all.py,sha256=2BqXMehpqj4j6-rVq_iOMcjoWgw4oyC3jWeHd_jPOZo,487
|
173
174
|
omlish/docker/cli.py,sha256=gtb9kitVfGnd4cr587NsVVk8D5Ok5y5SAsqD_SwGrSA,2565
|
174
175
|
omlish/docker/compose.py,sha256=4drmnGQzbkOFJ9B6XSg9rnXkJeZz1ETmdcMe1PE790U,1237
|
175
|
-
omlish/docker/
|
176
|
+
omlish/docker/consts.py,sha256=wvwfUtEFrEWZKfREWqSMrx8xjjl8P5MNUSF6qzzgJHY,70
|
177
|
+
omlish/docker/detect.py,sha256=Qrdbosm2wJkxKDuy8gaGmbQoxk4Wnp1HJjAEz58NA8Y,614
|
176
178
|
omlish/docker/hub.py,sha256=7LIuJGdA-N1Y1dmo50ynKM1KUTcnQM_5XbtPbdT_QLU,3940
|
177
179
|
omlish/docker/manifests.py,sha256=LR4FpOGNUT3bZQ-gTjB6r_-1C3YiG30QvevZjrsVUQM,7068
|
180
|
+
omlish/docker/timebomb.py,sha256=A_pgIDaXKsQwPiikrCTgIJl91gwYqkPGFY6j-Naq07Q,342
|
178
181
|
omlish/formats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
179
182
|
omlish/formats/dotenv.py,sha256=qoDG4Ayu7B-8LjBBhcmNiLZW0_9LgCi3Ri2aPo9DEQ8,19314
|
180
183
|
omlish/formats/props.py,sha256=cek3JLFLIrpE76gvs8rs_B8yF4SpY8ooDH8apWsquwE,18953
|
@@ -243,7 +246,7 @@ omlish/inject/injector.py,sha256=CoCUeMm1Oot4sG4Ti1sKCWrhlvtJ5QAeAI22AFWu2RQ,106
|
|
243
246
|
omlish/inject/inspect.py,sha256=tw49r1RJVHrEHmT8WWA3_Bl9Z0L3lEGRqlLhbM5OmAM,592
|
244
247
|
omlish/inject/keys.py,sha256=BczsGcNvoziQYggGKX3_XpRZQ3b0F_pYWSDLBg5lRvE,654
|
245
248
|
omlish/inject/listeners.py,sha256=AIWUs4OTUPeURU1tS2CXeEbJwC1bZiuya9K6I2ElMns,581
|
246
|
-
omlish/inject/managed.py,sha256=
|
249
|
+
omlish/inject/managed.py,sha256=ASHaY57v9POUOpwgCiinTbE14U28ysl3D6RcFkLfcOQ,2114
|
247
250
|
omlish/inject/multis.py,sha256=a3DparPZjLdkAYFuEFTI6kM3BhNpJbtjeAMRdbeJx0c,3363
|
248
251
|
omlish/inject/origins.py,sha256=OVQkiuRxx6ZtE8ZliufdndtFexcfpj-wZSDkUeGUCYM,534
|
249
252
|
omlish/inject/overrides.py,sha256=hrm243slCw_DDRbn3dK5QK1jfHezVokG-WYO2JaQOV8,535
|
@@ -326,17 +329,13 @@ omlish/lifecycles/states.py,sha256=zqMOU2ZU-MDNnWuwauM3_anIAiXM8LoBDElDEraptFg,1
|
|
326
329
|
omlish/lifecycles/transitions.py,sha256=qQtFby-h4VzbvgaUqT2NnbNumlcOx9FVVADP9t83xj4,1939
|
327
330
|
omlish/lite/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
328
331
|
omlish/lite/cached.py,sha256=hBW77-F7ZLtFqbLwVrlqaJ4-iFHMQleMWZXaZN1IubA,1308
|
329
|
-
omlish/lite/check.py,sha256=
|
332
|
+
omlish/lite/check.py,sha256=tAKB99X_oHG3JADUgZXMdPzgN8aNF9UBuJv4WeSgM_A,12877
|
330
333
|
omlish/lite/contextmanagers.py,sha256=4tKuBYyxn-aI31QowIuClHgpML8JsdzCW3j5ms_-uuY,1418
|
331
|
-
omlish/lite/deathsig.py,sha256=Etz04WX6R2PXQ-BgqJyVJ0C5Pqym6Ds6PAG7p1cqr5o,626
|
332
|
-
omlish/lite/docker.py,sha256=Dj_7lQjs2sFPc_SmUn5CpJF3LnQQnckEBYGBKz8u5tE,392
|
333
334
|
omlish/lite/inject.py,sha256=729Qi0TLbQgBtkvx97q1EUMe73VFYA1hu4woXkOTcwM,23572
|
334
|
-
omlish/lite/journald.py,sha256=f5Y2Q6-6O3iK_7MoGiwZwoQEOcP7LfkxxQNUR9tMjJM,3882
|
335
335
|
omlish/lite/json.py,sha256=7-02Ny4fq-6YAu5ynvqoijhuYXWpLmfCI19GUeZnb1c,740
|
336
336
|
omlish/lite/logs.py,sha256=1pcGu0ekhVCcLUckLSP16VccnAoprjtl5Vkdfm7y1Wg,6184
|
337
337
|
omlish/lite/marshal.py,sha256=6dCv_H4MF0BgzQ1XfIn30eE5jr4S96IfDi7anbBFl2c,13485
|
338
338
|
omlish/lite/maybes.py,sha256=7OlHJ8Q2r4wQ-aRbZSlJY7x0e8gDvufFdlohGEIJ3P4,833
|
339
|
-
omlish/lite/pidfile.py,sha256=PRSDOAXmNkNwxh-Vwif0Nrs8RAmWroiNhLKIbdjwzBc,1723
|
340
339
|
omlish/lite/pycharm.py,sha256=pUOJevrPClSqTCEOkQBO11LKX2003tfDcp18a03QFrc,1163
|
341
340
|
omlish/lite/reflect.py,sha256=ad_ya_zZJOQB8HoNjs9yc66R54zgflwJVPJqiBXMzqA,1681
|
342
341
|
omlish/lite/resources.py,sha256=YNSmX1Ohck1aoWRs55a-o5ChVbFJIQhtbqE-XwF55Oc,326
|
@@ -345,7 +344,7 @@ omlish/lite/secrets.py,sha256=3Mz3V2jf__XU9qNHcH56sBSw95L3U2UPL24bjvobG0c,816
|
|
345
344
|
omlish/lite/socket.py,sha256=7OYgkXTcQv0wq7TQuLnl9y6dJA1ZT6Vbc1JH59QlxgY,1792
|
346
345
|
omlish/lite/socketserver.py,sha256=doTXIctu_6c8XneFtzPFVG_Wq6xVmA3p9ymut8IvBoU,1586
|
347
346
|
omlish/lite/strings.py,sha256=QURcE4-1pKVW8eT_5VCJpXaHDWR2dW2pYOChTJnZDiQ,1504
|
348
|
-
omlish/lite/subprocesses.py,sha256=
|
347
|
+
omlish/lite/subprocesses.py,sha256=iN-HX44g9uxkZ7HII2Upvkfjp7YK6qQuhPrBqM4Hnp0,4934
|
349
348
|
omlish/lite/typing.py,sha256=U3-JaEnkDSYxK4tsu_MzUn3RP6qALBe5FXQXpD-licE,1090
|
350
349
|
omlish/lite/asyncio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
351
350
|
omlish/lite/asyncio/asyncio.py,sha256=tsqQSLl5rG4GZHPYOBqI7V2yuw45ZVuGZEHe-J4QEhE,1320
|
@@ -394,6 +393,12 @@ omlish/math/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
394
393
|
omlish/math/bits.py,sha256=yip1l8agOYzT7bFyMGc0RR3XlnGCfHMpjw_SECLLh1I,3477
|
395
394
|
omlish/math/floats.py,sha256=UimhOT7KRl8LXTzOI5cQWoX_9h6WNWe_3vcOuO7-h_8,327
|
396
395
|
omlish/math/stats.py,sha256=MegzKVsmv2kra4jDWLOUgV0X7Ee2Tbl5u6ql1v4-dEY,10053
|
396
|
+
omlish/os/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
397
|
+
omlish/os/deathsig.py,sha256=hk9Yq2kyDdI-cI7OQH7mOfpRbOKzY_TfPKEqgrjVYbA,641
|
398
|
+
omlish/os/files.py,sha256=1tNy1z5I_CgYKA5c6lOfsXc-hknP4tQDbSShdz8HArw,1308
|
399
|
+
omlish/os/journald.py,sha256=2nI8Res1poXkbLc31--MPUlzYMESnCcPUkIxDOCjZW0,3903
|
400
|
+
omlish/os/pidfile.py,sha256=S4Nbe00oSxckY0qCC9AeTEZe7NSw4eJudnQX7wCXzks,1738
|
401
|
+
omlish/os/sizes.py,sha256=ohkALLvqSqBX4iR-7DMKJ4pfOCRdZXV8htH4QywUNM0,152
|
397
402
|
omlish/reflect/__init__.py,sha256=4-EuCSX1qpEWfScCFzAJv_XghHFu4cXxpxKeBKrosQ4,720
|
398
403
|
omlish/reflect/inspect.py,sha256=veJ424-9oZrqyvhVpvxOi7hcKW-PDBkdYL2yjrFlk4o,495
|
399
404
|
omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
|
@@ -455,7 +460,7 @@ omlish/sql/dbs.py,sha256=lpdFmm2vTwLoBiVYGj9yPsVcTEYYNCxlYZZpjfChzkY,1870
|
|
455
460
|
omlish/sql/params.py,sha256=Z4VPet6GhNqD1T_MXSWSHkdy3cpUEhST-OplC4B_fYI,4433
|
456
461
|
omlish/sql/qualifiedname.py,sha256=rlW3gVmyucJbqwcxj_7BfK4X2HoXrMroZT2H45zPgJQ,2264
|
457
462
|
omlish/sql/alchemy/__init__.py,sha256=1ruDMiviH5fjevn2xVki-QspcE9O3VPy4hxOqpHjI2s,224
|
458
|
-
omlish/sql/alchemy/asyncs.py,sha256=
|
463
|
+
omlish/sql/alchemy/asyncs.py,sha256=MwZwWIaZsUCQLcTA8mdHUPZmR-pXEVSAsvd15FCm3W4,3692
|
459
464
|
omlish/sql/alchemy/duckdb.py,sha256=kr7pIhiBLNAuZrcigHDtFg9zHkVcrRW3LfryO9VJ4mk,3749
|
460
465
|
omlish/sql/alchemy/exprs.py,sha256=gO4Fj4xEY-PuDgV-N8hBMy55glZz7O-4H7v1LWabfZY,323
|
461
466
|
omlish/sql/alchemy/secrets.py,sha256=EMfy4EfTbEvrlv_41oOhn8qsoF-eTkY7HciPenIE6rI,178
|
@@ -501,7 +506,7 @@ omlish/testing/pytest/plugins/pydevd.py,sha256=AXtN83M39ZKJ4VH3MJEhvPnAmYzD5u1r8
|
|
501
506
|
omlish/testing/pytest/plugins/repeat.py,sha256=flSQzE9GFOWksVKz-mUGnpxJpv3yRqn1G4K8pW7JHs0,498
|
502
507
|
omlish/testing/pytest/plugins/skips.py,sha256=EoZDg1uWccgbAegmzqI85c7RliycD1e2J4Y7vfDRhwM,1041
|
503
508
|
omlish/testing/pytest/plugins/spacing.py,sha256=JQQhi9q3c523Ro1a_K_9RGAb7HotiO74N8bYX2VESFE,707
|
504
|
-
omlish/testing/pytest/plugins/switches.py,sha256=
|
509
|
+
omlish/testing/pytest/plugins/switches.py,sha256=CflHe6gLhkLt_9OcAmzskuZsrhZhwOuL_bIdogibARc,3815
|
505
510
|
omlish/testing/pytest/plugins/utils.py,sha256=L5C622UXcA_AUKDcvyh5IMiRfqSGGz0McdhwZWvfMlU,261
|
506
511
|
omlish/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
507
512
|
omlish/text/asdl.py,sha256=AS3irh-sag5pqyH3beJif78PjCbOaFso1NeKq-HXuTs,16867
|
@@ -510,9 +515,9 @@ omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,329
|
|
510
515
|
omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
|
511
516
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
512
517
|
omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
|
513
|
-
omlish-0.0.0.
|
514
|
-
omlish-0.0.0.
|
515
|
-
omlish-0.0.0.
|
516
|
-
omlish-0.0.0.
|
517
|
-
omlish-0.0.0.
|
518
|
-
omlish-0.0.0.
|
518
|
+
omlish-0.0.0.dev152.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
519
|
+
omlish-0.0.0.dev152.dist-info/METADATA,sha256=uBMDbkXKL4n5VAP4o0TmBKEkOBfv549S6LO7Xo_AXCQ,4264
|
520
|
+
omlish-0.0.0.dev152.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
521
|
+
omlish-0.0.0.dev152.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
522
|
+
omlish-0.0.0.dev152.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
523
|
+
omlish-0.0.0.dev152.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|