omlish 0.0.0.dev50__py3-none-any.whl → 0.0.0.dev52__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 +32 -3
- omlish/bootstrap/sys.py +1 -1
- omlish/dataclasses/impl/api.py +1 -1
- omlish/dataclasses/impl/fields.py +4 -1
- omlish/dataclasses/impl/params.py +1 -1
- omlish/dispatch/dispatch.py +8 -2
- omlish/marshal/__init__.py +4 -1
- omlish/marshal/base.py +17 -7
- omlish/marshal/dataclasses.py +5 -2
- omlish/marshal/global_.py +1 -1
- omlish/marshal/objects.py +2 -2
- omlish/marshal/registries.py +46 -17
- omlish/secrets/__init__.py +1 -0
- omlish/secrets/secrets.py +35 -6
- omlish/testing/pytest/inject/harness.py +4 -8
- {omlish-0.0.0.dev50.dist-info → omlish-0.0.0.dev52.dist-info}/METADATA +11 -3
- {omlish-0.0.0.dev50.dist-info → omlish-0.0.0.dev52.dist-info}/RECORD +21 -21
- {omlish-0.0.0.dev50.dist-info → omlish-0.0.0.dev52.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev50.dist-info → omlish-0.0.0.dev52.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev50.dist-info → omlish-0.0.0.dev52.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev50.dist-info → omlish-0.0.0.dev52.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
__version__ = '0.0.0.
|
2
|
-
__revision__ = '
|
1
|
+
__version__ = '0.0.0.dev52'
|
2
|
+
__revision__ = '5ab36e956ad89c19e714eca498e51f63ada8ab92'
|
3
3
|
|
4
4
|
|
5
5
|
#
|
@@ -28,6 +28,8 @@ class Project(ProjectBase):
|
|
28
28
|
name = 'omlish'
|
29
29
|
description = 'omlish'
|
30
30
|
|
31
|
+
#
|
32
|
+
|
31
33
|
optional_dependencies = {
|
32
34
|
'async': [
|
33
35
|
'anyio ~= 4.6',
|
@@ -61,7 +63,7 @@ class Project(ProjectBase):
|
|
61
63
|
|
62
64
|
'json5 ~= 0.9',
|
63
65
|
|
64
|
-
'pyyaml ~=
|
66
|
+
'pyyaml ~= 6.0',
|
65
67
|
|
66
68
|
'cbor2 ~= 5.6',
|
67
69
|
|
@@ -109,6 +111,32 @@ class Project(ProjectBase):
|
|
109
111
|
],
|
110
112
|
}
|
111
113
|
|
114
|
+
#
|
115
|
+
|
116
|
+
_plus_dependencies = [
|
117
|
+
'anyio',
|
118
|
+
'sniffio',
|
119
|
+
|
120
|
+
'asttokens',
|
121
|
+
'executing',
|
122
|
+
|
123
|
+
'orjson',
|
124
|
+
'pyyaml',
|
125
|
+
|
126
|
+
'wrapt',
|
127
|
+
]
|
128
|
+
|
129
|
+
_dependency_specs_by_name = (lambda od: { # noqa
|
130
|
+
s.split()[0]: s
|
131
|
+
for l in od.values() for s in l
|
132
|
+
})(optional_dependencies)
|
133
|
+
|
134
|
+
optional_dependencies['plus'] = (lambda ds, pd: [ # noqa
|
135
|
+
ds[n] for n in pd
|
136
|
+
])(_dependency_specs_by_name, _plus_dependencies)
|
137
|
+
|
138
|
+
#
|
139
|
+
|
112
140
|
entry_points = {
|
113
141
|
'omlish.manifests': {name: name},
|
114
142
|
}
|
@@ -134,6 +162,7 @@ class SetuptoolsBase:
|
|
134
162
|
'*.c',
|
135
163
|
'*.cc',
|
136
164
|
'*.cu',
|
165
|
+
'*.g4',
|
137
166
|
'*.h',
|
138
167
|
|
139
168
|
'.manifests.json',
|
omlish/bootstrap/sys.py
CHANGED
@@ -29,7 +29,7 @@ else:
|
|
29
29
|
libc = lang.proxy_import('..libc', __package__)
|
30
30
|
logs = lang.proxy_import('..logs', __package__)
|
31
31
|
osu = lang.proxy_import('..os', __package__)
|
32
|
-
dotenv = lang.proxy_import('
|
32
|
+
dotenv = lang.proxy_import('..formats.dotenv', __package__)
|
33
33
|
|
34
34
|
|
35
35
|
##
|
omlish/dataclasses/impl/api.py
CHANGED
@@ -33,7 +33,7 @@ def field( # noqa
|
|
33
33
|
derive: ta.Callable[..., ta.Any] | None = None,
|
34
34
|
coerce: bool | ta.Callable[[ta.Any], ta.Any] | None = None,
|
35
35
|
validate: ta.Callable[[ta.Any], bool] | None = None,
|
36
|
-
check_type: bool | type | None = None,
|
36
|
+
check_type: bool | type | tuple[type | None, ...] | None = None,
|
37
37
|
override: bool = False,
|
38
38
|
repr_fn: ta.Callable[[ta.Any], str | None] | None = None,
|
39
39
|
frozen: bool | None = None,
|
@@ -193,7 +193,10 @@ def field_init(
|
|
193
193
|
|
194
194
|
if fx.check_type:
|
195
195
|
cn = f'__dataclass_check_type__{f.name}__'
|
196
|
-
|
196
|
+
ct: ta.Any
|
197
|
+
if isinstance(fx.check_type, tuple):
|
198
|
+
ct = tuple(type(None) if e is None else check_.isinstance(e, type) for e in fx.check_type)
|
199
|
+
elif isinstance(fx.check_type, (type, tuple)):
|
197
200
|
ct = fx.check_type
|
198
201
|
# FIXME:
|
199
202
|
# elif info.params_extras.generic_init:
|
@@ -45,7 +45,7 @@ class FieldExtras(lang.Final):
|
|
45
45
|
derive: ta.Callable[..., ta.Any] | None = None # TODO
|
46
46
|
coerce: bool | ta.Callable[[ta.Any], ta.Any] | None = None
|
47
47
|
validate: ta.Callable[[ta.Any], bool] | None = None
|
48
|
-
check_type: bool | type | None = None
|
48
|
+
check_type: bool | type | tuple[type | None, ...] | None = None
|
49
49
|
override: bool = False
|
50
50
|
repr_fn: ta.Callable[[ta.Any], str | None] | None = None
|
51
51
|
frozen: bool | None = None # TODO
|
omlish/dispatch/dispatch.py
CHANGED
@@ -25,12 +25,18 @@ def get_impl_func_cls_set(func: ta.Callable) -> frozenset[type]:
|
|
25
25
|
if not ann:
|
26
26
|
raise TypeError(f'Invalid impl func: {func!r}')
|
27
27
|
|
28
|
+
def erase(a):
|
29
|
+
if isinstance(a, rfl.Generic):
|
30
|
+
return a.cls
|
31
|
+
else:
|
32
|
+
return check.isinstance(a, type)
|
33
|
+
|
28
34
|
_, cls = next(iter(ta.get_type_hints(func).items()))
|
29
35
|
rty = rfl.type_(cls)
|
30
36
|
if isinstance(rty, rfl.Union):
|
31
|
-
ret = frozenset(
|
37
|
+
ret = frozenset(erase(arg) for arg in rty.args)
|
32
38
|
else:
|
33
|
-
ret = frozenset([
|
39
|
+
ret = frozenset([erase(rty)])
|
34
40
|
|
35
41
|
_IMPL_FUNC_CLS_SET_CACHE[func] = ret
|
36
42
|
return ret
|
omlish/marshal/__init__.py
CHANGED
@@ -24,7 +24,8 @@ from .base import ( # noqa
|
|
24
24
|
RecursiveMarshalerFactory,
|
25
25
|
RecursiveUnmarshalerFactory,
|
26
26
|
|
27
|
-
|
27
|
+
Override,
|
28
|
+
ReflectOverride,
|
28
29
|
)
|
29
30
|
|
30
31
|
from .exceptions import ( # noqa
|
@@ -44,6 +45,8 @@ from .naming import ( # noqa
|
|
44
45
|
)
|
45
46
|
|
46
47
|
from .global_ import ( # noqa
|
48
|
+
GLOBAL_REGISTRY,
|
49
|
+
|
47
50
|
marshal,
|
48
51
|
unmarshal,
|
49
52
|
)
|
omlish/marshal/base.py
CHANGED
@@ -81,11 +81,11 @@ https://github.com/yukinarit/pyserde
|
|
81
81
|
- Flatten
|
82
82
|
"""
|
83
83
|
import abc
|
84
|
-
import dataclasses as dc
|
85
84
|
import typing as ta
|
86
85
|
|
87
86
|
from .. import check
|
88
87
|
from .. import collections as col
|
88
|
+
from .. import dataclasses as dc
|
89
89
|
from .. import lang
|
90
90
|
from .. import matchfns as mfs
|
91
91
|
from .. import reflect as rfl
|
@@ -163,13 +163,18 @@ class BaseContext(lang.Abstract):
|
|
163
163
|
registry: Registry
|
164
164
|
options: col.TypeMap[Option] = col.TypeMap()
|
165
165
|
|
166
|
+
def _reflect(self, o: ta.Any) -> rfl.Type:
|
167
|
+
if (ovr := self.registry.get_of(o, ReflectOverride)):
|
168
|
+
return ovr[-1].rty
|
169
|
+
return rfl.type_(o)
|
170
|
+
|
166
171
|
|
167
172
|
@dc.dataclass(frozen=True)
|
168
173
|
class MarshalContext(BaseContext, lang.Final):
|
169
174
|
factory: MarshalerFactory | None = None
|
170
175
|
|
171
176
|
def make(self, o: ta.Any) -> Marshaler:
|
172
|
-
rty =
|
177
|
+
rty = self._reflect(o)
|
173
178
|
try:
|
174
179
|
return check.not_none(self.factory)(self, rty) # type: ignore
|
175
180
|
except mfs.MatchGuardError:
|
@@ -181,7 +186,7 @@ class UnmarshalContext(BaseContext, lang.Final):
|
|
181
186
|
factory: UnmarshalerFactory | None = None
|
182
187
|
|
183
188
|
def make(self, o: ta.Any) -> Unmarshaler:
|
184
|
-
rty =
|
189
|
+
rty = self._reflect(o)
|
185
190
|
try:
|
186
191
|
return check.not_none(self.factory)(self, rty) # type: ignore
|
187
192
|
except mfs.MatchGuardError:
|
@@ -214,10 +219,15 @@ class RecursiveUnmarshalerFactory(RecursiveTypeFactory[UnmarshalContext, Unmarsh
|
|
214
219
|
##
|
215
220
|
|
216
221
|
|
217
|
-
@dc.dataclass(frozen=True)
|
218
|
-
class
|
219
|
-
marshaler: Marshaler | None = None
|
222
|
+
@dc.dataclass(frozen=True, kw_only=True)
|
223
|
+
class Override(RegistryItem, lang.Final):
|
224
|
+
marshaler: Marshaler | None = dc.xfield(None, check_type=(Marshaler, None))
|
220
225
|
marshaler_factory: MarshalerFactory | None = None
|
221
226
|
|
222
|
-
unmarshaler: Unmarshaler | None = None
|
227
|
+
unmarshaler: Unmarshaler | None = dc.xfield(None, check_type=(Unmarshaler, None))
|
223
228
|
unmarshaler_factory: UnmarshalerFactory | None = None
|
229
|
+
|
230
|
+
|
231
|
+
@dc.dataclass(frozen=True)
|
232
|
+
class ReflectOverride(RegistryItem, lang.Final):
|
233
|
+
rty: rfl.Type
|
omlish/marshal/dataclasses.py
CHANGED
@@ -3,6 +3,7 @@ import typing as ta
|
|
3
3
|
from .. import check
|
4
4
|
from .. import collections as col
|
5
5
|
from .. import dataclasses as dc
|
6
|
+
from .. import lang
|
6
7
|
from .. import reflect as rfl
|
7
8
|
from .base import MarshalContext
|
8
9
|
from .base import Marshaler
|
@@ -119,11 +120,12 @@ def _make_field_obj(ctx, ty, obj, fac):
|
|
119
120
|
|
120
121
|
class DataclassMarshalerFactory(MarshalerFactory):
|
121
122
|
def guard(self, ctx: MarshalContext, rty: rfl.Type) -> bool:
|
122
|
-
return isinstance(rty, type) and dc.is_dataclass(rty)
|
123
|
+
return isinstance(rty, type) and dc.is_dataclass(rty) and not lang.is_abstract_class(rty)
|
123
124
|
|
124
125
|
def fn(self, ctx: MarshalContext, rty: rfl.Type) -> Marshaler:
|
125
126
|
ty = check.isinstance(rty, type)
|
126
127
|
check.state(dc.is_dataclass(ty))
|
128
|
+
check.state(not lang.is_abstract_class(ty))
|
127
129
|
|
128
130
|
dc_md = get_dataclass_metadata(ty)
|
129
131
|
|
@@ -143,11 +145,12 @@ class DataclassMarshalerFactory(MarshalerFactory):
|
|
143
145
|
|
144
146
|
class DataclassUnmarshalerFactory(UnmarshalerFactory):
|
145
147
|
def guard(self, ctx: UnmarshalContext, rty: rfl.Type) -> bool:
|
146
|
-
return isinstance(rty, type) and dc.is_dataclass(rty)
|
148
|
+
return isinstance(rty, type) and dc.is_dataclass(rty) and not lang.is_abstract_class(rty)
|
147
149
|
|
148
150
|
def fn(self, ctx: UnmarshalContext, rty: rfl.Type) -> Unmarshaler:
|
149
151
|
ty = check.isinstance(rty, type)
|
150
152
|
check.state(dc.is_dataclass(ty))
|
153
|
+
check.state(not lang.is_abstract_class(ty))
|
151
154
|
dc_md = get_dataclass_metadata(ty)
|
152
155
|
|
153
156
|
d: dict[str, tuple[FieldInfo, Unmarshaler]] = {}
|
omlish/marshal/global_.py
CHANGED
omlish/marshal/objects.py
CHANGED
@@ -45,10 +45,10 @@ class FieldMetadata:
|
|
45
45
|
|
46
46
|
options: FieldOptions = DEFAULT_FIELD_OPTIONS
|
47
47
|
|
48
|
-
marshaler: Marshaler | None = None
|
48
|
+
marshaler: Marshaler | None = dc.xfield(None, check_type=(Marshaler, None))
|
49
49
|
marshaler_factory: MarshalerFactory | None = None
|
50
50
|
|
51
|
-
unmarshaler: Unmarshaler | None = None
|
51
|
+
unmarshaler: Unmarshaler | None = dc.xfield(None, check_type=(Unmarshaler, None))
|
52
52
|
unmarshaler_factory: UnmarshalerFactory | None = None
|
53
53
|
|
54
54
|
def update(self, **kwargs: ta.Any) -> 'FieldMetadata':
|
omlish/marshal/registries.py
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
+
"""
|
2
|
+
TODO:
|
3
|
+
- inheritance
|
4
|
+
"""
|
1
5
|
import dataclasses as dc
|
2
6
|
import threading
|
3
7
|
import typing as ta
|
4
8
|
|
5
|
-
from .. import
|
9
|
+
from .. import collections as col
|
6
10
|
from .. import lang
|
7
|
-
from .. import reflect as rfl
|
8
11
|
|
9
12
|
|
10
13
|
class RegistryItem(lang.Abstract):
|
@@ -15,8 +18,8 @@ RegistryItemT = ta.TypeVar('RegistryItemT', bound=RegistryItem)
|
|
15
18
|
|
16
19
|
|
17
20
|
@dc.dataclass(frozen=True)
|
18
|
-
class
|
19
|
-
|
21
|
+
class _KeyRegistryItems:
|
22
|
+
key: ta.Any
|
20
23
|
items: list[RegistryItem] = dc.field(default_factory=list)
|
21
24
|
item_lists_by_ty: dict[type[RegistryItem], list[RegistryItem]] = dc.field(default_factory=dict)
|
22
25
|
|
@@ -30,28 +33,54 @@ class Registry:
|
|
30
33
|
def __init__(self) -> None:
|
31
34
|
super().__init__()
|
32
35
|
self._mtx = threading.Lock()
|
33
|
-
self.
|
34
|
-
self.
|
36
|
+
self._idct: ta.MutableMapping[ta.Any, _KeyRegistryItems] = col.IdentityKeyDict()
|
37
|
+
self._dct: dict[ta.Any, _KeyRegistryItems] = {}
|
35
38
|
|
36
|
-
def register(
|
37
|
-
|
39
|
+
def register(
|
40
|
+
self,
|
41
|
+
key: ta.Any,
|
42
|
+
*items: RegistryItem,
|
43
|
+
identity: bool = False,
|
44
|
+
) -> 'Registry':
|
38
45
|
with self._mtx:
|
39
|
-
if
|
40
|
-
|
46
|
+
dct: ta.Any = self._idct if identity else self._dct
|
47
|
+
if (sr := dct.get(key)) is None:
|
48
|
+
sr = dct[key] = _KeyRegistryItems(key)
|
41
49
|
sr.add(*items)
|
42
50
|
return self
|
43
51
|
|
44
|
-
def get(
|
45
|
-
|
52
|
+
def get(
|
53
|
+
self,
|
54
|
+
key: ta.Any,
|
55
|
+
*,
|
56
|
+
identity: bool | None = None,
|
57
|
+
) -> ta.Sequence[RegistryItem]:
|
58
|
+
if identity is None:
|
59
|
+
return (
|
60
|
+
*self.get(key, identity=True),
|
61
|
+
*self.get(key, identity=False),
|
62
|
+
)
|
63
|
+
dct: ta.Any = self._idct if identity else self._dct
|
46
64
|
try:
|
47
|
-
return
|
65
|
+
return dct[key].items
|
48
66
|
except KeyError:
|
49
67
|
return ()
|
50
68
|
|
51
|
-
def get_of(
|
52
|
-
|
69
|
+
def get_of(
|
70
|
+
self,
|
71
|
+
key: ta.Any,
|
72
|
+
item_ty: type[RegistryItemT],
|
73
|
+
*,
|
74
|
+
identity: bool | None = None,
|
75
|
+
) -> ta.Sequence[RegistryItemT]:
|
76
|
+
if identity is None:
|
77
|
+
return (
|
78
|
+
*self.get_of(key, item_ty, identity=True),
|
79
|
+
*self.get_of(key, item_ty, identity=False),
|
80
|
+
)
|
81
|
+
dct: ta.Any = self._idct if identity else self._dct
|
53
82
|
try:
|
54
|
-
sr =
|
83
|
+
sr = dct[key]
|
55
84
|
except KeyError:
|
56
85
|
return ()
|
57
|
-
return sr.item_lists_by_ty.get(item_ty, ())
|
86
|
+
return sr.item_lists_by_ty.get(item_ty, ())
|
omlish/secrets/__init__.py
CHANGED
omlish/secrets/secrets.py
CHANGED
@@ -99,6 +99,12 @@ class Secrets(lang.Abstract):
|
|
99
99
|
else:
|
100
100
|
return Secret(key=key, value=raw)
|
101
101
|
|
102
|
+
def try_get(self, key: str) -> Secret | None:
|
103
|
+
try:
|
104
|
+
return self.get(key)
|
105
|
+
except KeyError:
|
106
|
+
return None
|
107
|
+
|
102
108
|
@abc.abstractmethod
|
103
109
|
def _get_raw(self, key: str) -> str:
|
104
110
|
raise NotImplementedError
|
@@ -119,15 +125,36 @@ EMPTY_SECRETS = EmptySecrets()
|
|
119
125
|
|
120
126
|
|
121
127
|
class MappingSecrets(Secrets):
|
122
|
-
def __init__(
|
128
|
+
def __init__(
|
129
|
+
self,
|
130
|
+
dct: ta.Mapping[str, str | Secret],
|
131
|
+
no_copy: bool = False,
|
132
|
+
) -> None:
|
123
133
|
super().__init__()
|
134
|
+
|
135
|
+
if not no_copy:
|
136
|
+
dct = {
|
137
|
+
k: v if isinstance(v, Secret) else Secret(key=k, value=v)
|
138
|
+
for k, v in dct.items()
|
139
|
+
}
|
140
|
+
|
124
141
|
self._dct = dct
|
125
142
|
|
126
143
|
def __repr__(self) -> str:
|
127
144
|
return f'{self.__class__.__name__}({{{", ".join(map(repr, self._dct.keys()))}}})'
|
128
145
|
|
129
146
|
def _get_raw(self, key: str) -> str:
|
130
|
-
|
147
|
+
try:
|
148
|
+
e = self._dct[key]
|
149
|
+
except KeyError: # noqa
|
150
|
+
raise
|
151
|
+
else:
|
152
|
+
if isinstance(e, Secret):
|
153
|
+
return e.reveal()
|
154
|
+
elif isinstance(e, str):
|
155
|
+
return e
|
156
|
+
else:
|
157
|
+
raise TypeError(e)
|
131
158
|
|
132
159
|
|
133
160
|
##
|
@@ -167,7 +194,7 @@ class CachingSecrets(Secrets):
|
|
167
194
|
) -> None:
|
168
195
|
super().__init__()
|
169
196
|
self._child = child
|
170
|
-
self._dct: dict[str,
|
197
|
+
self._dct: dict[str, Secret] = {}
|
171
198
|
self._ttl_s = ttl_s
|
172
199
|
self._clock = clock
|
173
200
|
self._deque: collections.deque[tuple[str, float]] = collections.deque()
|
@@ -187,15 +214,17 @@ class CachingSecrets(Secrets):
|
|
187
214
|
def _get_raw(self, key: str) -> str:
|
188
215
|
self.evict()
|
189
216
|
try:
|
190
|
-
|
217
|
+
e = self._dct[key]
|
191
218
|
except KeyError:
|
192
219
|
pass
|
193
|
-
|
220
|
+
else:
|
221
|
+
return e.reveal()
|
222
|
+
out = self._child.get(key) # noqa
|
194
223
|
self._dct[key] = out
|
195
224
|
if self._ttl_s is not None:
|
196
225
|
dl = self._clock() + self._ttl_s
|
197
226
|
self._deque.append((key, dl))
|
198
|
-
return out
|
227
|
+
return out.reveal()
|
199
228
|
|
200
229
|
|
201
230
|
##
|
@@ -172,21 +172,17 @@ def register(*args: inj.Element | inj.Elements) -> None:
|
|
172
172
|
_HARNESS_ELEMENTS_LIST.append(inj.as_elements(*args))
|
173
173
|
|
174
174
|
|
175
|
-
TypeT = ta.TypeVar('TypeT', bound=type)
|
176
|
-
|
177
|
-
|
178
175
|
def bind(
|
179
176
|
scope: PytestScope | str = PytestScope.SESSION,
|
180
177
|
*,
|
181
178
|
eager: bool = False, # FIXME
|
182
|
-
) -> ta.Callable[[
|
183
|
-
def inner(
|
179
|
+
) -> ta.Callable[[T], T]:
|
180
|
+
def inner(obj):
|
184
181
|
pts = scope if isinstance(scope, PytestScope) else PytestScope[check.isinstance(scope, str).upper()]
|
185
|
-
check.isinstance(cls, type)
|
186
182
|
register(inj.as_elements(
|
187
|
-
inj.bind(
|
183
|
+
inj.bind(obj, in_=_SCOPES_BY_PYTEST_SCOPE[pts]),
|
188
184
|
))
|
189
|
-
return
|
185
|
+
return obj
|
190
186
|
return inner
|
191
187
|
|
192
188
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: omlish
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev52
|
4
4
|
Summary: omlish
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -26,7 +26,7 @@ Requires-Dist: psutil ~=6.0 ; extra == 'all'
|
|
26
26
|
Requires-Dist: orjson ~=3.10 ; extra == 'all'
|
27
27
|
Requires-Dist: ujson ~=5.10 ; extra == 'all'
|
28
28
|
Requires-Dist: json5 ~=0.9 ; extra == 'all'
|
29
|
-
Requires-Dist: pyyaml ~=
|
29
|
+
Requires-Dist: pyyaml ~=6.0 ; extra == 'all'
|
30
30
|
Requires-Dist: cbor2 ~=5.6 ; extra == 'all'
|
31
31
|
Requires-Dist: cloudpickle ~=3.0 ; extra == 'all'
|
32
32
|
Requires-Dist: httpx[http2] ~=0.27 ; extra == 'all'
|
@@ -61,13 +61,21 @@ Provides-Extra: formats
|
|
61
61
|
Requires-Dist: orjson ~=3.10 ; extra == 'formats'
|
62
62
|
Requires-Dist: ujson ~=5.10 ; extra == 'formats'
|
63
63
|
Requires-Dist: json5 ~=0.9 ; extra == 'formats'
|
64
|
-
Requires-Dist: pyyaml ~=
|
64
|
+
Requires-Dist: pyyaml ~=6.0 ; extra == 'formats'
|
65
65
|
Requires-Dist: cbor2 ~=5.6 ; extra == 'formats'
|
66
66
|
Requires-Dist: cloudpickle ~=3.0 ; extra == 'formats'
|
67
67
|
Provides-Extra: http
|
68
68
|
Requires-Dist: httpx[http2] ~=0.27 ; extra == 'http'
|
69
69
|
Provides-Extra: misc
|
70
70
|
Requires-Dist: wrapt ~=1.14 ; extra == 'misc'
|
71
|
+
Provides-Extra: plus
|
72
|
+
Requires-Dist: anyio ~=4.6 ; extra == 'plus'
|
73
|
+
Requires-Dist: sniffio ~=1.3 ; extra == 'plus'
|
74
|
+
Requires-Dist: asttokens ~=2.4 ; extra == 'plus'
|
75
|
+
Requires-Dist: executing ~=2.1 ; extra == 'plus'
|
76
|
+
Requires-Dist: orjson ~=3.10 ; extra == 'plus'
|
77
|
+
Requires-Dist: pyyaml ~=6.0 ; extra == 'plus'
|
78
|
+
Requires-Dist: wrapt ~=1.14 ; extra == 'plus'
|
71
79
|
Provides-Extra: secrets
|
72
80
|
Requires-Dist: cryptography ~=43.0 ; extra == 'secrets'
|
73
81
|
Provides-Extra: sqlalchemy
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=sAddTbCUKdX0UYA4PeZ_z9JKF0vyzEpFYWq1tAAl9bw,1091
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=hr6Vr8v0IBjMA5wCjGRcZujewz5WvmS9N2vy1-B3iR0,3420
|
3
3
|
omlish/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
omlish/argparse.py,sha256=Vr70_85EVLJLgEkRtwOr264tMRtqtlN7ncFfXRUk5aM,6914
|
5
5
|
omlish/c3.py,sha256=4vogWgwPb8TbNS2KkZxpoWbwjj7MuHG2lQG-hdtkvjI,8062
|
@@ -34,7 +34,7 @@ omlish/bootstrap/diag.py,sha256=x_BKS_uhfW8QFk1NeH_VIocHif-A6FVTZ37262qCgZ0,5052
|
|
34
34
|
omlish/bootstrap/harness.py,sha256=vDnpM0ZLSJaylxQNA4u2lwQwiU-KXZDb7MlkrhchFJY,2022
|
35
35
|
omlish/bootstrap/main.py,sha256=u-TfxO4GkAK3LbRweQERogtO4kT0z3gqXRjnXvtJzC8,5328
|
36
36
|
omlish/bootstrap/marshal.py,sha256=ZxdAeMNd2qXRZ1HUK89HmEhz8tqlS9OduW34QBscKw0,516
|
37
|
-
omlish/bootstrap/sys.py,sha256=
|
37
|
+
omlish/bootstrap/sys.py,sha256=i6veZeE83wO0HTl9b6ykj_pEN05fqu0enoAv4sw5Ayc,8742
|
38
38
|
omlish/collections/__init__.py,sha256=tGUzvS_ZjiqALsLRy7JX3h4KZRQX2CmtdAfTRD7UwMk,1677
|
39
39
|
omlish/collections/_abc.py,sha256=sP7BpTVhx6s6C59mTFeosBi4rHOWC6tbFBYbxdZmvh0,2365
|
40
40
|
omlish/collections/_io_abc.py,sha256=Cxs8KB1B_69rxpUYxI-MTsilAmNooJJn3w07DKqYKkE,1255
|
@@ -68,12 +68,12 @@ omlish/dataclasses/__init__.py,sha256=LALx4dXSvBWAKzmZxb3rkNdoR7kOaXeGcVypTnECvc
|
|
68
68
|
omlish/dataclasses/utils.py,sha256=Ewd6w31uXy1sVUj59sxmXfGuI0CgsAbcfNXx0tsrNco,3347
|
69
69
|
omlish/dataclasses/impl/LICENSE,sha256=Oy-B_iHRgcSZxZolbI4ZaEVdZonSaaqFNzv7avQdo78,13936
|
70
70
|
omlish/dataclasses/impl/__init__.py,sha256=0hgOm3_u3yimjEkB-9fRMqX9rAW6kQC5t8XL0lpvffQ,410
|
71
|
-
omlish/dataclasses/impl/api.py,sha256=
|
71
|
+
omlish/dataclasses/impl/api.py,sha256=p7W519_EnDAWlkOVS-4BpP4SxadWIiUzC3RldSoB28o,6431
|
72
72
|
omlish/dataclasses/impl/as_.py,sha256=CD-t7hkC1EP2F_jvZKIA_cVoDuwZ-Ln_xC4fJumPYX0,2598
|
73
73
|
omlish/dataclasses/impl/copy.py,sha256=Tn8_n6Vohs-w4otbGdubBEvhd3TsSTaM3EfNGdS2LYo,591
|
74
74
|
omlish/dataclasses/impl/descriptors.py,sha256=rEYE1Len99agTQCC25hSPMnM19BgPr0ZChABGi58Fdk,2476
|
75
75
|
omlish/dataclasses/impl/exceptions.py,sha256=DeiM6rcjgncudn-XVuph9TDbVDEwBtyYb1bcbO3FFcA,193
|
76
|
-
omlish/dataclasses/impl/fields.py,sha256=
|
76
|
+
omlish/dataclasses/impl/fields.py,sha256=iXA8j3q8GFQoj-6MgAKVLGG9GSSNOLGgyVtogCQ5q1E,6459
|
77
77
|
omlish/dataclasses/impl/frozen.py,sha256=x87DSM8FIMZ3c_BIUE8NooCkExFjPsabeqIueEP5qKs,2988
|
78
78
|
omlish/dataclasses/impl/hashing.py,sha256=FKnHuXCg9ylrzK2TLGqO5yfRN4HX3F415CSLlVYXtYE,3190
|
79
79
|
omlish/dataclasses/impl/init.py,sha256=IgxO9nwHaHF8jGrUAk-Y5xke9uV2OwzfEe-88McE1Wg,6161
|
@@ -82,7 +82,7 @@ omlish/dataclasses/impl/main.py,sha256=Ti0PKbFKraKvfmoPuR-G7nLVNzRC8mvEuXhCuC-M2
|
|
82
82
|
omlish/dataclasses/impl/metaclass.py,sha256=dlQEIN9MHBirll7Nx3StpzxYxXjrqxJ-QsorMcCNt7w,2828
|
83
83
|
omlish/dataclasses/impl/metadata.py,sha256=4veWwTr-aA0KP-Y1cPEeOcXHup9EKJTYNJ0ozIxtzD4,1401
|
84
84
|
omlish/dataclasses/impl/order.py,sha256=zWvWDkSTym8cc7vO1cLHqcBhhjOlucHOCUVJcdh4jt0,1369
|
85
|
-
omlish/dataclasses/impl/params.py,sha256
|
85
|
+
omlish/dataclasses/impl/params.py,sha256=-RDsDDHmTjXY-7bSJzKlRJJdyf1pNUfqwcswS4ZZhH0,2700
|
86
86
|
omlish/dataclasses/impl/processing.py,sha256=DFxyFjL_h3awRyF_5eyTnB8QkuApx7Zc4QFnVoltlao,459
|
87
87
|
omlish/dataclasses/impl/reflect.py,sha256=a19BbNxrmjNTbXzWuAl_794RCIQSMYyVqQ2Bf-DnNnM,5305
|
88
88
|
omlish/dataclasses/impl/replace.py,sha256=wS9GHX4fIwaPv1JBJzIewdBfXyK3X3V7_t55Da87dYo,1217
|
@@ -105,7 +105,7 @@ omlish/diag/replserver/server.py,sha256=5pRjBn-Vz8gtu45756ycdbJe58C_xrB9rElPytr6
|
|
105
105
|
omlish/dispatch/__init__.py,sha256=GsiGJ91NKiQptSROtnCSkrZExBkvfDwYvdoTu5dBqF0,117
|
106
106
|
omlish/dispatch/_dispatch2.py,sha256=v3tCNyxGpOwY8qTwdp54TlM8mG6OVwtQoUZfYJ_griU,1756
|
107
107
|
omlish/dispatch/_dispatch3.py,sha256=Vnu5DfoPWFJLodudBqoZBXGTi2wYk-Az56MXJgdQvwc,2608
|
108
|
-
omlish/dispatch/dispatch.py,sha256=
|
108
|
+
omlish/dispatch/dispatch.py,sha256=8XQiLVoAq4u2oO0DnDSXQB9Q5qDk569l4CIFBqwDSyc,3847
|
109
109
|
omlish/dispatch/functions.py,sha256=S8ElsLi6DKxTdtFGigWaF0vAquwy2sK-3f4iRLaYq70,1522
|
110
110
|
omlish/dispatch/methods.py,sha256=XHjwwC9Gn4iDWxbyLAcbdSwRgVaq-8Bnn5cAwf5oZdA,5403
|
111
111
|
omlish/docker/__init__.py,sha256=LGL5ByHrd7EaQnIDO6eLQvovDamngUiTfnpThV_4-MA,437
|
@@ -219,28 +219,28 @@ omlish/logs/formatters.py,sha256=q79nMnR2mRIStPyGrydQHpYTXgC5HHptt8lH3W2Wwbs,671
|
|
219
219
|
omlish/logs/handlers.py,sha256=nyuFgmO05By_Xwq7es58ClzS51-F53lJL7gD0x5IqAg,228
|
220
220
|
omlish/logs/noisy.py,sha256=Ubc-eTH6ZbGYsLfUUi69JAotwuUwzb-SJBeGo_0dIZI,348
|
221
221
|
omlish/logs/utils.py,sha256=MgGovbP0zUrZ3FGD3qYNQWn-l0jy0Y0bStcQvv5BOmQ,391
|
222
|
-
omlish/marshal/__init__.py,sha256=
|
222
|
+
omlish/marshal/__init__.py,sha256=peWAlHMn-SQBi0K2Hc95fvchUOCwVqnkC1pzKP-dgpw,2013
|
223
223
|
omlish/marshal/any.py,sha256=e82OyYK3Emm1P1ClnsnxP7fIWC2iNVyW0H5nK4mLmWM,779
|
224
|
-
omlish/marshal/base.py,sha256=
|
224
|
+
omlish/marshal/base.py,sha256=I7IOzFGn_DFeBRFCH8F0ONBa-NzM4mmMDld6bmoW-rc,6501
|
225
225
|
omlish/marshal/base64.py,sha256=F-3ogJdcFCtWINRgJgWT0rErqgx6f4qahhcg8OrkqhE,1089
|
226
|
-
omlish/marshal/dataclasses.py,sha256=
|
226
|
+
omlish/marshal/dataclasses.py,sha256=Ofo1QjK7QBReT1310JNB2wsNEBShx6nxT93NEHb42ZM,6233
|
227
227
|
omlish/marshal/datetimes.py,sha256=0ffg8cEvx9SMKIXZGD9b7MqpLfmgw0uKKdn6YTfoqok,3714
|
228
228
|
omlish/marshal/enums.py,sha256=-0fKutBbyz8ygEaA0_P_8IOJrI9jMGigmnPbutV9Bg4,1464
|
229
229
|
omlish/marshal/exceptions.py,sha256=jwQWn4LcPnadT2KRI_1JJCOSkwWh0yHnYK9BmSkNN4U,302
|
230
230
|
omlish/marshal/factories.py,sha256=UV2Svjok-lTWsRqKGh-CeuAhvlohw9uJe7ZLyoKMvTM,2968
|
231
231
|
omlish/marshal/forbidden.py,sha256=BNshzm4lN5O8sUZ1YvxrSYq3WPklq9NMQCRZ7RC3DLM,865
|
232
|
-
omlish/marshal/global_.py,sha256=
|
232
|
+
omlish/marshal/global_.py,sha256=K76wB1-pdg4VWgiqR7wyxRNYr-voJApexYW2nV-R4DM,1127
|
233
233
|
omlish/marshal/helpers.py,sha256=-SOgYJmrURILHpPK6Wu3cCvhj8RJrqfJxuKhh9UMs7o,1102
|
234
234
|
omlish/marshal/iterables.py,sha256=6I_ZdJemLSQtJ4J5NrB9wi-eyxiJZS61HzHXp1yeiX8,2592
|
235
235
|
omlish/marshal/mappings.py,sha256=zhLtyot7tzQtBNj7C4RBxjMELxA5r2q2Mth8Br7xkFs,2803
|
236
236
|
omlish/marshal/maybes.py,sha256=mgK3QsWHkXgRqo076KxYKH6elRxzJ_QDTodv93mgHR0,2198
|
237
237
|
omlish/marshal/naming.py,sha256=lIklR_Od4x1ghltAgOzqcKhHs-leeSv2YmFhCHO7GIs,613
|
238
238
|
omlish/marshal/numbers.py,sha256=oY_yMNJEnJhjfLh89gpPXvKqeUyhQcaTcQB6ecyHiG8,1704
|
239
|
-
omlish/marshal/objects.py,sha256=
|
239
|
+
omlish/marshal/objects.py,sha256=EOo33BboPu9l9hNg0mljDAt_KHQ6taPXYk9uu2kU8Rk,6627
|
240
240
|
omlish/marshal/optionals.py,sha256=r0XB5rqfasvgZJNrKYd6Unq2U4nHt3JURi26j0dYHlw,1499
|
241
241
|
omlish/marshal/polymorphism.py,sha256=doA8aLUhna6aco5b2Ok3jsem1V4NsF3rM5RTfJt0a7U,5708
|
242
242
|
omlish/marshal/primitives.py,sha256=wcvcs5GH_TWVmzAszh3dvyKibJgBxnXke-AlAXiwrrI,1107
|
243
|
-
omlish/marshal/registries.py,sha256=
|
243
|
+
omlish/marshal/registries.py,sha256=FvC6qXHCizNB2QmU_N3orxW7iqfGYkiUXYYdTRWS6HA,2353
|
244
244
|
omlish/marshal/standard.py,sha256=uQZIGiCwihmhB1tmhpKnZWZly0DDkdGjCnN0d41WHho,2985
|
245
245
|
omlish/marshal/unions.py,sha256=ZWl0maHwh1V_cSnNmuCbbCQZzqlNtOModsTwnVTXNPA,2735
|
246
246
|
omlish/marshal/utils.py,sha256=puKJpwPpuDlMOIrKMcLTRLJyMiL6n_Xs-p59AuDEymA,543
|
@@ -255,12 +255,12 @@ omlish/reflect/isinstance.py,sha256=x5T9S2634leinBT4hl3CZZkRttvdvvlxChkC_x9Qu2s,
|
|
255
255
|
omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
|
256
256
|
omlish/reflect/subst.py,sha256=JM2RGv2-Rcex8wCqhmgvRG59zD242P9jM3O2QLjKWWo,3586
|
257
257
|
omlish/reflect/types.py,sha256=Zkcp8nx_vFNH7pBZ5pU5P0wIgQCauj5Nic3BZb5cRik,7030
|
258
|
-
omlish/secrets/__init__.py,sha256=
|
258
|
+
omlish/secrets/__init__.py,sha256=SGB1KrlNrxlNpazEHYy95NTzteLi8ndoEgMhU7luBl8,420
|
259
259
|
omlish/secrets/crypto.py,sha256=6CsLy0UEqCrBK8Xx_3-iFF6SKtu2GlEqUQ8-MliY3tk,3709
|
260
260
|
omlish/secrets/marshal.py,sha256=U9uSRTWzZmumfNZeh_dROwVdGrARsp155TylRbjilP8,2048
|
261
261
|
omlish/secrets/openssl.py,sha256=wxA_wIlxtuOUy71ABxAJgavh-UI_taOfm-A0dVlmSwM,6219
|
262
262
|
omlish/secrets/passwords.py,sha256=3r-vEK6Gp6aq4L5Csnd06QnrjO9xfzHJP-g_7I9W_ao,4101
|
263
|
-
omlish/secrets/secrets.py,sha256=
|
263
|
+
omlish/secrets/secrets.py,sha256=XkzCrGNRLXUBXbw6_2pFGV2fuphbcgehtpp8zsjHaWM,7580
|
264
264
|
omlish/secrets/subprocesses.py,sha256=EcnKlHHtnUMHGrBWXDfu8tv28wlgZx4P4GOiuPW9Vo8,1105
|
265
265
|
omlish/specs/__init__.py,sha256=Xl4fT1o1MlcEIAjMt5EifgMuO4UBSa9Suj5NE9eMX1A,87
|
266
266
|
omlish/specs/jmespath/LICENSE,sha256=IH-ZZlZkS8XMkf_ubNVD1aYHQ2l_wd0tmHtXrCcYpRU,1113
|
@@ -320,7 +320,7 @@ omlish/testing/pytest/helpers.py,sha256=TJpD60mBtLi9FtxX4TThfuXvg5FIRPSiZk1aeRwe
|
|
320
320
|
omlish/testing/pytest/marks.py,sha256=ExuwitbMr1txMbaAcWZ652pYa30M-i3wVacnjqschTs,424
|
321
321
|
omlish/testing/pytest/skip.py,sha256=uACMFtQQNJfFDbWrppjWevdrQgKVH1MUmH5rXIpv0IE,846
|
322
322
|
omlish/testing/pytest/inject/__init__.py,sha256=pdRKv1HcDmJ_yArKJbYITPXXZthRSGgBJWqITr0Er38,117
|
323
|
-
omlish/testing/pytest/inject/harness.py,sha256=
|
323
|
+
omlish/testing/pytest/inject/harness.py,sha256=v4DaKJ0KL8oQjzIMK43Gh8GHP4hiI6-lY37O9lyOHRk,5724
|
324
324
|
omlish/testing/pytest/plugins/__init__.py,sha256=ys1zXrYrNm7Uo6YOIVJ6Bd3dQo6kv387k7MbTYlqZSI,467
|
325
325
|
omlish/testing/pytest/plugins/_registry.py,sha256=IK04KlBgiOJxKAyCCgjpX2R-9tE-btalYJkgjLc8Te8,77
|
326
326
|
omlish/testing/pytest/plugins/asyncs.py,sha256=SV6oKCy50CGkzLGYX-CT4MfWNqsrH8ONEbIWC3tFcHA,5324
|
@@ -339,9 +339,9 @@ omlish/text/delimit.py,sha256=ubPXcXQmtbOVrUsNh5gH1mDq5H-n1y2R4cPL5_DQf68,4928
|
|
339
339
|
omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,3296
|
340
340
|
omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
|
341
341
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
342
|
-
omlish-0.0.0.
|
343
|
-
omlish-0.0.0.
|
344
|
-
omlish-0.0.0.
|
345
|
-
omlish-0.0.0.
|
346
|
-
omlish-0.0.0.
|
347
|
-
omlish-0.0.0.
|
342
|
+
omlish-0.0.0.dev52.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
343
|
+
omlish-0.0.0.dev52.dist-info/METADATA,sha256=wq0yemnhS_oXtTPbb4Aw2Bknr1_bYebJ-A3ASRPebXI,4167
|
344
|
+
omlish-0.0.0.dev52.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
345
|
+
omlish-0.0.0.dev52.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
346
|
+
omlish-0.0.0.dev52.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
347
|
+
omlish-0.0.0.dev52.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|