omlish 0.0.0.dev39__py3-none-any.whl → 0.0.0.dev41__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 +7 -4
- omlish/argparse.py +2 -2
- omlish/bootstrap/base.py +1 -1
- omlish/c3.py +6 -3
- omlish/check.py +33 -23
- omlish/concurrent/threadlets.py +1 -1
- omlish/diag/pycharm.py +2 -2
- omlish/docker/__init__.py +27 -0
- omlish/docker/cli.py +101 -0
- omlish/docker/compose.py +51 -0
- omlish/docker/helpers.py +48 -0
- omlish/docker/hub.py +75 -0
- omlish/docker/manifests.py +166 -0
- omlish/lang/__init__.py +1 -0
- omlish/lang/strings.py +25 -37
- omlish/specs/jsonschema/keywords/base.py +5 -5
- omlish/specs/jsonschema/keywords/core.py +1 -2
- omlish/specs/jsonschema/keywords/metadata.py +1 -2
- omlish/specs/jsonschema/keywords/parse.py +3 -4
- omlish/specs/jsonschema/keywords/validation.py +1 -2
- omlish/testing/pytest/__init__.py +2 -4
- omlish/testing/pytest/marks.py +0 -27
- omlish/testing/pytest/skip.py +30 -0
- {omlish-0.0.0.dev39.dist-info → omlish-0.0.0.dev41.dist-info}/METADATA +13 -11
- {omlish-0.0.0.dev39.dist-info → omlish-0.0.0.dev41.dist-info}/RECORD +29 -23
- omlish/docker.py +0 -270
- {omlish-0.0.0.dev39.dist-info → omlish-0.0.0.dev41.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev39.dist-info → omlish-0.0.0.dev41.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev39.dist-info → omlish-0.0.0.dev41.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev39.dist-info → omlish-0.0.0.dev41.dist-info}/top_level.txt +0 -0
omlish/lang/strings.py
CHANGED
@@ -2,63 +2,51 @@ import typing as ta
|
|
2
2
|
import unicodedata
|
3
3
|
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
@ta.overload
|
8
|
-
def prefix_delimited(s: str, p: str, d: str) -> str:
|
9
|
-
...
|
5
|
+
StrOrBytes: ta.TypeAlias = str | bytes
|
6
|
+
StrOrBytesT = ta.TypeVar('StrOrBytesT', bound=StrOrBytes)
|
10
7
|
|
11
8
|
|
12
|
-
|
13
|
-
def prefix_delimited(s: bytes, p: bytes, d: bytes) -> bytes:
|
14
|
-
...
|
9
|
+
##
|
15
10
|
|
16
11
|
|
17
|
-
def prefix_delimited(s, p, d):
|
18
|
-
return d.join([p + l for l in s.split(d)])
|
12
|
+
def prefix_delimited(s: StrOrBytesT, p: StrOrBytesT, d: StrOrBytesT) -> StrOrBytesT:
|
13
|
+
return d.join([p + l for l in s.split(d)]) # type: ignore
|
19
14
|
|
20
15
|
|
21
|
-
def prefix_lines(s:
|
22
|
-
return prefix_delimited(s, p, '\n')
|
16
|
+
def prefix_lines(s: StrOrBytesT, p: StrOrBytesT) -> StrOrBytesT:
|
17
|
+
return prefix_delimited(s, p, '\n' if isinstance(s, str) else b'\n')
|
23
18
|
|
24
19
|
|
25
|
-
def indent_lines(s:
|
26
|
-
return prefix_lines(s, ' ' * num)
|
20
|
+
def indent_lines(s: StrOrBytesT, num: StrOrBytesT) -> StrOrBytesT:
|
21
|
+
return prefix_lines(s, (' ' if isinstance(s, str) else b' ') * num) # type: ignore
|
27
22
|
|
28
23
|
|
29
24
|
##
|
30
25
|
|
31
26
|
|
32
|
-
|
33
|
-
|
34
|
-
...
|
35
|
-
|
36
|
-
|
37
|
-
@ta.overload
|
38
|
-
def strip_prefix(s: bytes, pfx: bytes) -> bytes:
|
39
|
-
...
|
40
|
-
|
41
|
-
|
42
|
-
def strip_prefix(s, pfx):
|
43
|
-
if not s.startswith(pfx):
|
27
|
+
def strip_prefix(s: StrOrBytesT, pfx: StrOrBytesT) -> StrOrBytesT:
|
28
|
+
if not s.startswith(pfx): # type: ignore
|
44
29
|
raise ValueError(f'{s!r} does not start with {pfx!r}')
|
45
|
-
return s[len(pfx):]
|
30
|
+
return s[len(pfx):] # type: ignore
|
46
31
|
|
47
32
|
|
48
|
-
|
49
|
-
|
50
|
-
|
33
|
+
def strip_suffix(s: StrOrBytesT, sfx: StrOrBytesT) -> StrOrBytesT:
|
34
|
+
if not s.endswith(sfx): # type: ignore
|
35
|
+
raise ValueError(f'{s!r} does not end with {sfx!r}')
|
36
|
+
return s[:-len(sfx)] # type: ignore
|
51
37
|
|
52
38
|
|
53
|
-
|
54
|
-
def strip_suffix(s: bytes, sfx: bytes) -> bytes:
|
55
|
-
...
|
39
|
+
##
|
56
40
|
|
57
41
|
|
58
|
-
def
|
59
|
-
|
60
|
-
|
61
|
-
|
42
|
+
def replace_many(
|
43
|
+
s: StrOrBytesT,
|
44
|
+
old: ta.Iterable[StrOrBytesT],
|
45
|
+
new: StrOrBytesT, count_each: int = -1,
|
46
|
+
) -> StrOrBytesT:
|
47
|
+
for o in old:
|
48
|
+
s = s.replace(o, new, count_each) # type: ignore
|
49
|
+
return s
|
62
50
|
|
63
51
|
|
64
52
|
##
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import operator
|
2
2
|
import typing as ta
|
3
3
|
|
4
|
-
from
|
5
|
-
from
|
6
|
-
from
|
7
|
-
from
|
8
|
-
from
|
4
|
+
from .... import cached
|
5
|
+
from .... import check
|
6
|
+
from .... import collections as col
|
7
|
+
from .... import dataclasses as dc
|
8
|
+
from .... import lang
|
9
9
|
|
10
10
|
|
11
11
|
KeywordT = ta.TypeVar('KeywordT', bound='Keyword')
|
@@ -1,10 +1,9 @@
|
|
1
1
|
import operator
|
2
2
|
import typing as ta
|
3
3
|
|
4
|
-
from
|
5
|
-
from
|
6
|
-
from
|
7
|
-
|
4
|
+
from .... import check
|
5
|
+
from .... import collections as col
|
6
|
+
from .... import lang
|
8
7
|
from . import core # noqa
|
9
8
|
from . import metadata # noqa
|
10
9
|
from . import validation # noqa
|
@@ -4,11 +4,9 @@ from .helpers import ( # noqa
|
|
4
4
|
|
5
5
|
from .marks import ( # noqa
|
6
6
|
drain_asyncio,
|
7
|
-
skip_if_cant_import,
|
8
|
-
skip_if_nogil,
|
9
|
-
skip_if_not_on_path,
|
10
|
-
skip_if_python_version_less_than,
|
11
7
|
)
|
12
8
|
|
9
|
+
from . import skip # noqa
|
10
|
+
|
13
11
|
# Imported for convenience in things that import this but not lang.
|
14
12
|
from ...lang import breakpoint_on_exception # noqa
|
omlish/testing/pytest/marks.py
CHANGED
@@ -1,44 +1,17 @@
|
|
1
|
-
import shutil
|
2
|
-
import sys
|
3
|
-
import sysconfig
|
4
1
|
import typing as ta
|
5
2
|
|
6
3
|
import pytest
|
7
4
|
|
8
5
|
from ... import lang # noqa
|
9
|
-
from ..testing import can_import
|
10
6
|
from .plugins.managermarks import ManagerMark # noqa
|
11
7
|
|
12
8
|
|
13
9
|
if ta.TYPE_CHECKING:
|
14
10
|
from ...asyncs import asyncio as aiu
|
15
|
-
|
16
11
|
else:
|
17
12
|
aiu = lang.proxy_import('...asyncs.asyncio', __package__)
|
18
13
|
|
19
14
|
|
20
|
-
def skip_if_cant_import(module: str, *args, **kwargs):
|
21
|
-
return pytest.mark.skipif(not can_import(module, *args, **kwargs), reason=f'requires import {module}')
|
22
|
-
|
23
|
-
|
24
|
-
def skip_if_not_on_path(exe: str):
|
25
|
-
return pytest.mark.skipif(shutil.which(exe) is None, reason=f'requires exe on path {exe}')
|
26
|
-
|
27
|
-
|
28
|
-
def skip_if_python_version_less_than(num: ta.Sequence[int]):
|
29
|
-
return pytest.mark.skipif(sys.version_info < tuple(num), reason=f'python version {tuple(sys.version_info)} < {tuple(num)}') # noqa
|
30
|
-
|
31
|
-
|
32
|
-
def skip_if_not_single():
|
33
|
-
# FIXME
|
34
|
-
# [resolve_collection_argument(a) for a in session.config.args]
|
35
|
-
raise NotImplementedError
|
36
|
-
|
37
|
-
|
38
|
-
def skip_if_nogil():
|
39
|
-
return pytest.mark.skipif(sysconfig.get_config_var('Py_GIL_DISABLED'), reason='requires gil build')
|
40
|
-
|
41
|
-
|
42
15
|
class drain_asyncio(ManagerMark): # noqa
|
43
16
|
def __call__(self, item: pytest.Function) -> ta.Iterator[None]:
|
44
17
|
with aiu.draining_asyncio_tasks():
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import shutil
|
2
|
+
import sys
|
3
|
+
import sysconfig
|
4
|
+
import typing as ta
|
5
|
+
|
6
|
+
import pytest
|
7
|
+
|
8
|
+
from ..testing import can_import
|
9
|
+
|
10
|
+
|
11
|
+
def if_cant_import(module: str, *args, **kwargs):
|
12
|
+
return pytest.mark.skipif(not can_import(module, *args, **kwargs), reason=f'requires import {module}')
|
13
|
+
|
14
|
+
|
15
|
+
def if_not_on_path(exe: str):
|
16
|
+
return pytest.mark.skipif(shutil.which(exe) is None, reason=f'requires exe on path {exe}')
|
17
|
+
|
18
|
+
|
19
|
+
def if_python_version_less_than(num: ta.Sequence[int]):
|
20
|
+
return pytest.mark.skipif(sys.version_info < tuple(num), reason=f'python version {tuple(sys.version_info)} < {tuple(num)}') # noqa
|
21
|
+
|
22
|
+
|
23
|
+
def if_not_single():
|
24
|
+
# FIXME
|
25
|
+
# [resolve_collection_argument(a) for a in session.config.args]
|
26
|
+
raise NotImplementedError
|
27
|
+
|
28
|
+
|
29
|
+
def if_nogil():
|
30
|
+
return pytest.mark.skipif(sysconfig.get_config_var('Py_GIL_DISABLED'), reason='requires gil build')
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: omlish
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev41
|
4
4
|
Summary: omlish
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -18,7 +18,7 @@ Requires-Dist: sniffio ~=1.3 ; extra == 'all'
|
|
18
18
|
Requires-Dist: greenlet ~=3.1 ; extra == 'all'
|
19
19
|
Requires-Dist: trio ~=0.26 ; extra == 'all'
|
20
20
|
Requires-Dist: trio-asyncio ~=0.15 ; extra == 'all'
|
21
|
-
Requires-Dist: lz4 ~=4.
|
21
|
+
Requires-Dist: lz4 ~=4.3 ; extra == 'all'
|
22
22
|
Requires-Dist: zstd ~=1.5 ; extra == 'all'
|
23
23
|
Requires-Dist: asttokens ~=2.4 ; extra == 'all'
|
24
24
|
Requires-Dist: executing ~=2.1 ; extra == 'all'
|
@@ -37,6 +37,7 @@ Requires-Dist: pg8000 ~=1.31 ; extra == 'all'
|
|
37
37
|
Requires-Dist: pymysql ~=1.1 ; extra == 'all'
|
38
38
|
Requires-Dist: aiomysql ~=0.2 ; extra == 'all'
|
39
39
|
Requires-Dist: aiosqlite ~=0.20 ; extra == 'all'
|
40
|
+
Requires-Dist: apsw ~=3.46 ; extra == 'all'
|
40
41
|
Requires-Dist: duckdb ~=1.1 ; extra == 'all'
|
41
42
|
Requires-Dist: pytest ~=8.0 ; extra == 'all'
|
42
43
|
Requires-Dist: python-snappy ~=0.7 ; (python_version < "3.13") and extra == 'all'
|
@@ -49,7 +50,7 @@ Requires-Dist: greenlet ~=3.1 ; extra == 'async'
|
|
49
50
|
Requires-Dist: trio ~=0.26 ; extra == 'async'
|
50
51
|
Requires-Dist: trio-asyncio ~=0.15 ; extra == 'async'
|
51
52
|
Provides-Extra: compress
|
52
|
-
Requires-Dist: lz4 ~=4.
|
53
|
+
Requires-Dist: lz4 ~=4.3 ; extra == 'compress'
|
53
54
|
Requires-Dist: zstd ~=1.5 ; extra == 'compress'
|
54
55
|
Requires-Dist: python-snappy ~=0.7 ; (python_version < "3.13") and extra == 'compress'
|
55
56
|
Provides-Extra: diag
|
@@ -71,14 +72,15 @@ Provides-Extra: secrets
|
|
71
72
|
Requires-Dist: cryptography ~=43.0 ; extra == 'secrets'
|
72
73
|
Provides-Extra: sqlalchemy
|
73
74
|
Requires-Dist: sqlalchemy[asyncio] ~=2.0 ; extra == 'sqlalchemy'
|
74
|
-
Provides-Extra:
|
75
|
-
Requires-Dist: pg8000 ~=1.31 ; extra == '
|
76
|
-
Requires-Dist: pymysql ~=1.1 ; extra == '
|
77
|
-
Requires-Dist: aiomysql ~=0.2 ; extra == '
|
78
|
-
Requires-Dist: aiosqlite ~=0.20 ; extra == '
|
79
|
-
Requires-Dist:
|
80
|
-
Requires-Dist:
|
81
|
-
Requires-Dist:
|
75
|
+
Provides-Extra: sqldrivers
|
76
|
+
Requires-Dist: pg8000 ~=1.31 ; extra == 'sqldrivers'
|
77
|
+
Requires-Dist: pymysql ~=1.1 ; extra == 'sqldrivers'
|
78
|
+
Requires-Dist: aiomysql ~=0.2 ; extra == 'sqldrivers'
|
79
|
+
Requires-Dist: aiosqlite ~=0.20 ; extra == 'sqldrivers'
|
80
|
+
Requires-Dist: apsw ~=3.46 ; extra == 'sqldrivers'
|
81
|
+
Requires-Dist: duckdb ~=1.1 ; extra == 'sqldrivers'
|
82
|
+
Requires-Dist: asyncpg ~=0.29 ; (python_version < "3.13") and extra == 'sqldrivers'
|
83
|
+
Requires-Dist: sqlean.py ~=3.45 ; (python_version < "3.13") and extra == 'sqldrivers'
|
82
84
|
Provides-Extra: testing
|
83
85
|
Requires-Dist: pytest ~=8.0 ; extra == 'testing'
|
84
86
|
|
@@ -1,13 +1,12 @@
|
|
1
1
|
omlish/.manifests.json,sha256=FPSgLg_3QDVzKlNOuqV3dMqhja2KG_TUfKdGmHE8Eg4,803
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=7FsOWhuWPr63aM9w6D-8mkjM3PSH0TI7v26pjaJDmCg,2919
|
3
3
|
omlish/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
|
-
omlish/argparse.py,sha256=
|
5
|
-
omlish/c3.py,sha256=
|
4
|
+
omlish/argparse.py,sha256=QUUS6sv2ftfcmhDj4qU429mEE_lfWa0UN5yYpPG65B0,6265
|
5
|
+
omlish/c3.py,sha256=4vogWgwPb8TbNS2KkZxpoWbwjj7MuHG2lQG-hdtkvjI,8062
|
6
6
|
omlish/cached.py,sha256=UAizxlH4eMWHPzQtmItmyE6FEpFEUFzIkxaO2BHWZ5s,196
|
7
|
-
omlish/check.py,sha256=
|
7
|
+
omlish/check.py,sha256=fgWiBoHvqZlE8tjaxK7OMW4J8z3_rEGRENTka3EohbI,10378
|
8
8
|
omlish/datetimes.py,sha256=HajeM1kBvwlTa-uR1TTZHmZ3zTPnnUr1uGGQhiO1XQ0,2152
|
9
9
|
omlish/defs.py,sha256=T3bq_7h_tO3nDB5RAFBn7DkdeQgqheXzkFColbOHZko,4890
|
10
|
-
omlish/docker.py,sha256=uRVJUJwGtTFYhm4XeztrVEYk93f0NI5VpjEKQaN_5uY,6453
|
11
10
|
omlish/dynamic.py,sha256=35C_cCX_Vq2HrHzGk5T-zbrMvmUdiIiwDzDNixczoDo,6541
|
12
11
|
omlish/fnpairs.py,sha256=Sl8CMFNyDS-1JYAjSWqnT5FmUm9Lj6o7FxSRo7g4jww,10875
|
13
12
|
omlish/fnpipes.py,sha256=AJkgz9nvRRm7oqw7ZgYyz21klu276LWi54oYCLg-vOg,2196
|
@@ -30,7 +29,7 @@ omlish/asyncs/trio.py,sha256=fmZ5b_lKdVV8NQ3euCUutWgnkqTFzSnOjvJSA_jvmrE,367
|
|
30
29
|
omlish/asyncs/trio_asyncio.py,sha256=oqdOHy0slj9PjVxaDf3gJkq9AAgg7wYZbB469jOftVw,1327
|
31
30
|
omlish/bootstrap/__init__.py,sha256=-Rtsg7uPQNhh1dIT9nqrz96XlqizwoLnWf-FwOEstJI,730
|
32
31
|
omlish/bootstrap/__main__.py,sha256=4jCwsaogp0FrJjJZ85hzF4-WqluPeheHbfeoKynKvNs,194
|
33
|
-
omlish/bootstrap/base.py,sha256=
|
32
|
+
omlish/bootstrap/base.py,sha256=d8hqn4hp1XMMi5PgcJBQXPKmW47epu8CxBlqDZiRZb4,1073
|
34
33
|
omlish/bootstrap/diag.py,sha256=x_BKS_uhfW8QFk1NeH_VIocHif-A6FVTZ37262qCgZ0,5052
|
35
34
|
omlish/bootstrap/harness.py,sha256=pIeSXKfMsF7-3ZkU0gGpde-PtLAKKcVrWaxcin7Xzy0,2041
|
36
35
|
omlish/bootstrap/main.py,sha256=u-TfxO4GkAK3LbRweQERogtO4kT0z3gqXRjnXvtJzC8,5328
|
@@ -60,7 +59,7 @@ omlish/collections/cache/types.py,sha256=yNjwd6CGyTJQdxN2CQxFqqBAlcs1Z7vvNV-aU1K
|
|
60
59
|
omlish/concurrent/__init__.py,sha256=9p-s8MvBEYDqHIoYU3OYoe-Nni22QdkW7nhZGEukJTM,197
|
61
60
|
omlish/concurrent/executors.py,sha256=FYKCDYYuj-OgMa8quLsA47SfFNX3KDJvRENVk8NDsrA,1292
|
62
61
|
omlish/concurrent/futures.py,sha256=J2s9wYURUskqRJiBbAR0PNEAp1pXbIMYldOVBTQduQY,4239
|
63
|
-
omlish/concurrent/threadlets.py,sha256=
|
62
|
+
omlish/concurrent/threadlets.py,sha256=rTuGp4odJv23eiGTR0E73_gXKgjh4AOeRhutUcEFh70,2378
|
64
63
|
omlish/configs/__init__.py,sha256=3uh09ezodTwkMI0nRmAMP0eEuJ_0VdF-LYyNmPjHiCE,77
|
65
64
|
omlish/configs/classes.py,sha256=GLbB8xKjHjjoUQRCUQm3nEjM8z1qNTx9gPV7ODSt5dg,1317
|
66
65
|
omlish/configs/flattening.py,sha256=AOlRpBHm449MxwMp3CiIRGunStOC1DUNs1f3CLou0wc,4731
|
@@ -96,7 +95,7 @@ omlish/diag/asts.py,sha256=BveUUNUcaAm4Hg55f4ZxGSI313E4L8cCZ5XjHpEkKVI,3325
|
|
96
95
|
omlish/diag/procfs.py,sha256=vBovaMvAUKdl7FbtFq3TNsSmdhs8DaYfhoEsKeWYta8,9704
|
97
96
|
omlish/diag/procstats.py,sha256=UkqxREqfd-38xPYZ9T1SIJISz5ARQCEhTtOZrxtm2dE,777
|
98
97
|
omlish/diag/ps.py,sha256=1JWxZen3fVG-20R6ZZ8BtO_gpzw_5bhHZiKdoHkgxoU,1004
|
99
|
-
omlish/diag/pycharm.py,sha256=
|
98
|
+
omlish/diag/pycharm.py,sha256=HoEYtBuz04RyQhCMRslSEqMwnMlDU49bjOTBwGeivMk,3181
|
100
99
|
omlish/diag/pydevd.py,sha256=Fsx9rfCOnwLD6RLBqH0uAdtq75rbNeBAQfiDvIBd3e0,7295
|
101
100
|
omlish/diag/threads.py,sha256=1-x02VCDZ407gfbtXm1pWK-ubqhqfePm9PMqkHCVoqk,3642
|
102
101
|
omlish/diag/replserver/__init__.py,sha256=uLo6V2aQ29v9z3IMELlPDSlG3_2iOT4-_X8VniF-EgE,235
|
@@ -109,6 +108,12 @@ omlish/dispatch/_dispatch3.py,sha256=Vnu5DfoPWFJLodudBqoZBXGTi2wYk-Az56MXJgdQvwc
|
|
109
108
|
omlish/dispatch/dispatch.py,sha256=8B66wOat30HckcIsCq4pnutBy20iSPwPQOqJ4msHaGU,3739
|
110
109
|
omlish/dispatch/functions.py,sha256=S8ElsLi6DKxTdtFGigWaF0vAquwy2sK-3f4iRLaYq70,1522
|
111
110
|
omlish/dispatch/methods.py,sha256=XHjwwC9Gn4iDWxbyLAcbdSwRgVaq-8Bnn5cAwf5oZdA,5403
|
111
|
+
omlish/docker/__init__.py,sha256=LGL5ByHrd7EaQnIDO6eLQvovDamngUiTfnpThV_4-MA,437
|
112
|
+
omlish/docker/cli.py,sha256=gtb9kitVfGnd4cr587NsVVk8D5Ok5y5SAsqD_SwGrSA,2565
|
113
|
+
omlish/docker/compose.py,sha256=4drmnGQzbkOFJ9B6XSg9rnXkJeZz1ETmdcMe1PE790U,1237
|
114
|
+
omlish/docker/helpers.py,sha256=j2eZIqIUpy34ZmoGyIzsYuKx9HeewwYBfrGNC99EFYk,928
|
115
|
+
omlish/docker/hub.py,sha256=YcDYOi6t1FA2Sp0RVrmZ9cBXbzFWQ8wTps3wOskA-K0,1955
|
116
|
+
omlish/docker/manifests.py,sha256=LR4FpOGNUT3bZQ-gTjB6r_-1C3YiG30QvevZjrsVUQM,7068
|
112
117
|
omlish/formats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
113
118
|
omlish/formats/dotenv.py,sha256=UjZl3gac-0U24sDjCCGMcCqO1UCWG2Zs8PZ4JdAg2YE,17348
|
114
119
|
omlish/formats/json.py,sha256=61XG6rveb3SSXmYrKvUmRdaVDyMD6C-7yVqXBBMu8t8,1017
|
@@ -163,7 +168,7 @@ omlish/inject/impl/privates.py,sha256=alpCYyk5VJ9lJknbRH2nLVNFYVvFhkj-VC1Vco3zCF
|
|
163
168
|
omlish/inject/impl/providers.py,sha256=QnwhsujJFIHC0JTgd2Wlo1kP53i3CWTrj1nKU2DNxwg,2375
|
164
169
|
omlish/inject/impl/proxy.py,sha256=1ko0VaKqzu9UG8bIldp9xtUrAVUOFTKWKTjOCqIGr4s,1636
|
165
170
|
omlish/inject/impl/scopes.py,sha256=ASfULXgP_ETlsAqFJfrZmyEaZt64Zr8tNn5ScA-EoXk,5900
|
166
|
-
omlish/lang/__init__.py,sha256
|
171
|
+
omlish/lang/__init__.py,sha256=-DRmyoSAwSWOh7nJh4UrpR-w_hGQfe-e06S9qLjHZF8,3636
|
167
172
|
omlish/lang/cached.py,sha256=92TvRZQ6sWlm7dNn4hgl7aWKbX0J1XUEo3DRjBpgVQk,7834
|
168
173
|
omlish/lang/clsdct.py,sha256=AjtIWLlx2E6D5rC97zQ3Lwq2SOMkbg08pdO_AxpzEHI,1744
|
169
174
|
omlish/lang/cmp.py,sha256=5vbzWWbqdzDmNKAGL19z6ZfUKe5Ci49e-Oegf9f4BsE,1346
|
@@ -178,7 +183,7 @@ omlish/lang/maybes.py,sha256=NYHZDjqDtwPMheDrj2VtUVujxRPf8Qpgk4ZlZCTvBZc,3492
|
|
178
183
|
omlish/lang/objects.py,sha256=1dY8dX5voIZf5FBYUiN0BRsWg2JCdsgRbDl9fLG7OtY,4310
|
179
184
|
omlish/lang/resolving.py,sha256=OuN2mDTPNyBUbcrswtvFKtj4xgH4H4WglgqSKv3MTy0,1606
|
180
185
|
omlish/lang/resources.py,sha256=-NmVTrSMKFZ6smVfOMz46ekZYVGgYh8cPooxQlFpG6s,2135
|
181
|
-
omlish/lang/strings.py,sha256=
|
186
|
+
omlish/lang/strings.py,sha256=LWgUy9WghUyV0zmZ1c3HZjEfekLlNPy7Jl6J1Z5vzp0,3882
|
182
187
|
omlish/lang/sys.py,sha256=UoZz_PJYVKLQAKqYxxn-LHz1okK_38I__maZgnXMcxU,406
|
183
188
|
omlish/lang/timeouts.py,sha256=vECdWYhc_IZgcal1Ng1Y42wf2FV3KAx-i8As-MgGHIQ,1186
|
184
189
|
omlish/lang/typing.py,sha256=lJ2NGe4Pmb61I0Tx4A_rOqXNFTws1XHOzafg2knRUio,4155
|
@@ -265,12 +270,12 @@ omlish/specs/jsonrpc/types.py,sha256=g19j2_FCVJDXFqAkQ5U4LICkL4Z7vEBMU0t_aOEqio4
|
|
265
270
|
omlish/specs/jsonschema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
266
271
|
omlish/specs/jsonschema/types.py,sha256=qoxExgKfrI-UZXdk3qcVZIEyp1WckFbb85_eGInEoAY,467
|
267
272
|
omlish/specs/jsonschema/keywords/__init__.py,sha256=Zt2g1BXd654uU2AQ5P7_-x2Wrtf6cNbP9mxI1wGN4wo,596
|
268
|
-
omlish/specs/jsonschema/keywords/base.py,sha256=
|
269
|
-
omlish/specs/jsonschema/keywords/core.py,sha256=
|
270
|
-
omlish/specs/jsonschema/keywords/metadata.py,sha256=
|
271
|
-
omlish/specs/jsonschema/keywords/parse.py,sha256=
|
273
|
+
omlish/specs/jsonschema/keywords/base.py,sha256=6w2PdquW-6TvagTplIsDFBp1W8dW1uFm6GR-nxzmBkI,1943
|
274
|
+
omlish/specs/jsonschema/keywords/core.py,sha256=wbftFHs-P8befiS115eemo51T1Fx9eOwqcJ3kXAnA-o,365
|
275
|
+
omlish/specs/jsonschema/keywords/metadata.py,sha256=CsodNy9H07--QWPe9OYvLS9J9_EoMd-BT9FQY80lugM,313
|
276
|
+
omlish/specs/jsonschema/keywords/parse.py,sha256=S7rLXoxvYLq-Rr8ZdzUiXBltp6gmrjPpRZTOMVSLXVg,1927
|
272
277
|
omlish/specs/jsonschema/keywords/render.py,sha256=enGkw1S8Zxfn1IBkKqZTK81yG21MVKk54B8rqiTY30c,1236
|
273
|
-
omlish/specs/jsonschema/keywords/validation.py,sha256=
|
278
|
+
omlish/specs/jsonschema/keywords/validation.py,sha256=7MTXj4DVoEYftHZBO7kz1jiJt0qGHJLcB7qqwQgX_gY,1319
|
274
279
|
omlish/specs/jsonschema/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
275
280
|
omlish/specs/jsonschema/schemas/draft202012/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
276
281
|
omlish/specs/jsonschema/schemas/draft202012/metaschema.json,sha256=Qdp29a-3zgYtJI92JGOpL3ykfk4PkFsiS6av7vkd7Q8,2452
|
@@ -296,9 +301,10 @@ omlish/sql/alchemy/secrets.py,sha256=EMfy4EfTbEvrlv_41oOhn8qsoF-eTkY7HciPenIE6rI
|
|
296
301
|
omlish/sql/alchemy/sqlean.py,sha256=RbkuOuFIfM4fowwKk8-sQ6Dxk-tTUwxS94nY5Kxt52s,403
|
297
302
|
omlish/testing/__init__.py,sha256=kfiF10ykrjWXniedIl3g8j3pNAFyuSbp1D3ZXug3-Eo,168
|
298
303
|
omlish/testing/testing.py,sha256=pJUbZ0ymdrQoNG9r9UlGXypeU1x9ntEp9xcYBnyOHUs,3088
|
299
|
-
omlish/testing/pytest/__init__.py,sha256=
|
304
|
+
omlish/testing/pytest/__init__.py,sha256=B2nyJrjIoNcEopbg0IZ5UUDs4OHmQ8qqElFJfGcDdas,257
|
300
305
|
omlish/testing/pytest/helpers.py,sha256=TJpD60mBtLi9FtxX4TThfuXvg5FIRPSiZk1aeRwe-D4,197
|
301
|
-
omlish/testing/pytest/marks.py,sha256=
|
306
|
+
omlish/testing/pytest/marks.py,sha256=ExuwitbMr1txMbaAcWZ652pYa30M-i3wVacnjqschTs,424
|
307
|
+
omlish/testing/pytest/skip.py,sha256=uACMFtQQNJfFDbWrppjWevdrQgKVH1MUmH5rXIpv0IE,846
|
302
308
|
omlish/testing/pytest/inject/__init__.py,sha256=pdRKv1HcDmJ_yArKJbYITPXXZthRSGgBJWqITr0Er38,117
|
303
309
|
omlish/testing/pytest/inject/harness.py,sha256=sMKjP2EWHq-eeTB1YVXcANli2Czxt56_9ERg4HtkVPg,5810
|
304
310
|
omlish/testing/pytest/plugins/__init__.py,sha256=ys1zXrYrNm7Uo6YOIVJ6Bd3dQo6kv387k7MbTYlqZSI,467
|
@@ -319,9 +325,9 @@ omlish/text/delimit.py,sha256=ubPXcXQmtbOVrUsNh5gH1mDq5H-n1y2R4cPL5_DQf68,4928
|
|
319
325
|
omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,3296
|
320
326
|
omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
|
321
327
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
322
|
-
omlish-0.0.0.
|
323
|
-
omlish-0.0.0.
|
324
|
-
omlish-0.0.0.
|
325
|
-
omlish-0.0.0.
|
326
|
-
omlish-0.0.0.
|
327
|
-
omlish-0.0.0.
|
328
|
+
omlish-0.0.0.dev41.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
329
|
+
omlish-0.0.0.dev41.dist-info/METADATA,sha256=r8Q2E7Ch6npanZY7xAo-quF5Z9R9OWkH6eY2JATdOfs,3817
|
330
|
+
omlish-0.0.0.dev41.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
331
|
+
omlish-0.0.0.dev41.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
332
|
+
omlish-0.0.0.dev41.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
333
|
+
omlish-0.0.0.dev41.dist-info/RECORD,,
|