omlish 0.0.0.dev172__py3-none-any.whl → 0.0.0.dev174__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/lite/dataclasses.py +10 -0
- omlish/lite/marshal.py +19 -0
- omlish/lite/reflect.py +29 -0
- omlish/marshal/literals.py +50 -0
- omlish/marshal/standard.py +4 -0
- omlish/reflect/__init__.py +3 -0
- omlish/reflect/subst.py +2 -1
- omlish/reflect/types.py +126 -44
- {omlish-0.0.0.dev172.dist-info → omlish-0.0.0.dev174.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev172.dist-info → omlish-0.0.0.dev174.dist-info}/RECORD +15 -14
- {omlish-0.0.0.dev172.dist-info → omlish-0.0.0.dev174.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev172.dist-info → omlish-0.0.0.dev174.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev172.dist-info → omlish-0.0.0.dev174.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev172.dist-info → omlish-0.0.0.dev174.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
omlish/lite/dataclasses.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# ruff: noqa: UP006 UP007
|
2
2
|
import dataclasses as dc
|
3
|
+
import typing as ta
|
3
4
|
|
4
5
|
|
5
6
|
def dataclass_cache_hash(
|
@@ -30,3 +31,12 @@ def dataclass_cache_hash(
|
|
30
31
|
return cls
|
31
32
|
|
32
33
|
return inner
|
34
|
+
|
35
|
+
|
36
|
+
def dataclass_maybe_post_init(sup: ta.Any) -> bool:
|
37
|
+
try:
|
38
|
+
fn = sup.__post_init__
|
39
|
+
except AttributeError:
|
40
|
+
return False
|
41
|
+
fn()
|
42
|
+
return True
|
omlish/lite/marshal.py
CHANGED
@@ -21,9 +21,11 @@ import weakref # noqa
|
|
21
21
|
|
22
22
|
from .check import check
|
23
23
|
from .reflect import deep_subclasses
|
24
|
+
from .reflect import get_literal_type_args
|
24
25
|
from .reflect import get_new_type_supertype
|
25
26
|
from .reflect import get_optional_alias_arg
|
26
27
|
from .reflect import is_generic_alias
|
28
|
+
from .reflect import is_literal_type
|
27
29
|
from .reflect import is_new_type
|
28
30
|
from .reflect import is_union_alias
|
29
31
|
from .strings import snake_case
|
@@ -141,6 +143,18 @@ class OptionalObjMarshaler(ObjMarshaler):
|
|
141
143
|
return self.item.unmarshal(o, ctx)
|
142
144
|
|
143
145
|
|
146
|
+
@dc.dataclass(frozen=True)
|
147
|
+
class LiteralObjMarshaler(ObjMarshaler):
|
148
|
+
item: ObjMarshaler
|
149
|
+
vs: frozenset
|
150
|
+
|
151
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
152
|
+
return self.item.marshal(check.in_(o, self.vs), ctx)
|
153
|
+
|
154
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
155
|
+
return check.in_(self.item.unmarshal(o, ctx), self.vs)
|
156
|
+
|
157
|
+
|
144
158
|
@dc.dataclass(frozen=True)
|
145
159
|
class MappingObjMarshaler(ObjMarshaler):
|
146
160
|
ty: type
|
@@ -352,6 +366,11 @@ class ObjMarshalerManager:
|
|
352
366
|
if is_new_type(ty):
|
353
367
|
return rec(get_new_type_supertype(ty))
|
354
368
|
|
369
|
+
if is_literal_type(ty):
|
370
|
+
lvs = frozenset(get_literal_type_args(ty))
|
371
|
+
lty = check.single(set(map(type, lvs)))
|
372
|
+
return LiteralObjMarshaler(rec(lty), lvs)
|
373
|
+
|
355
374
|
if is_generic_alias(ty):
|
356
375
|
try:
|
357
376
|
mt = self._generic_mapping_types[ta.get_origin(ty)]
|
omlish/lite/reflect.py
CHANGED
@@ -7,6 +7,9 @@ import typing as ta
|
|
7
7
|
T = ta.TypeVar('T')
|
8
8
|
|
9
9
|
|
10
|
+
##
|
11
|
+
|
12
|
+
|
10
13
|
_GENERIC_ALIAS_TYPES = (
|
11
14
|
ta._GenericAlias, # type: ignore # noqa
|
12
15
|
*([ta._SpecialGenericAlias] if hasattr(ta, '_SpecialGenericAlias') else []), # noqa
|
@@ -24,6 +27,9 @@ is_union_alias = functools.partial(is_generic_alias, origin=ta.Union)
|
|
24
27
|
is_callable_alias = functools.partial(is_generic_alias, origin=ta.Callable)
|
25
28
|
|
26
29
|
|
30
|
+
##
|
31
|
+
|
32
|
+
|
27
33
|
def is_optional_alias(spec: ta.Any) -> bool:
|
28
34
|
return (
|
29
35
|
isinstance(spec, _GENERIC_ALIAS_TYPES) and # noqa
|
@@ -38,6 +44,9 @@ def get_optional_alias_arg(spec: ta.Any) -> ta.Any:
|
|
38
44
|
return it
|
39
45
|
|
40
46
|
|
47
|
+
##
|
48
|
+
|
49
|
+
|
41
50
|
def is_new_type(spec: ta.Any) -> bool:
|
42
51
|
if isinstance(ta.NewType, type):
|
43
52
|
return isinstance(spec, ta.NewType)
|
@@ -50,6 +59,26 @@ def get_new_type_supertype(spec: ta.Any) -> ta.Any:
|
|
50
59
|
return spec.__supertype__
|
51
60
|
|
52
61
|
|
62
|
+
##
|
63
|
+
|
64
|
+
|
65
|
+
def is_literal_type(spec: ta.Any) -> bool:
|
66
|
+
if hasattr(ta, '_LiteralGenericAlias'):
|
67
|
+
return isinstance(spec, ta._LiteralGenericAlias) # noqa
|
68
|
+
else:
|
69
|
+
return (
|
70
|
+
isinstance(spec, ta._GenericAlias) and # type: ignore # noqa
|
71
|
+
spec.__origin__ is ta.Literal
|
72
|
+
)
|
73
|
+
|
74
|
+
|
75
|
+
def get_literal_type_args(spec: ta.Any) -> ta.Iterable[ta.Any]:
|
76
|
+
return spec.__args__
|
77
|
+
|
78
|
+
|
79
|
+
##
|
80
|
+
|
81
|
+
|
53
82
|
def deep_subclasses(cls: ta.Type[T]) -> ta.Iterator[ta.Type[T]]:
|
54
83
|
seen = set()
|
55
84
|
todo = list(reversed(cls.__subclasses__()))
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import dataclasses as dc
|
2
|
+
import typing as ta
|
3
|
+
|
4
|
+
from .. import check
|
5
|
+
from .. import reflect as rfl
|
6
|
+
from .base import MarshalContext
|
7
|
+
from .base import Marshaler
|
8
|
+
from .base import MarshalerFactory
|
9
|
+
from .base import UnmarshalContext
|
10
|
+
from .base import Unmarshaler
|
11
|
+
from .base import UnmarshalerFactory
|
12
|
+
from .values import Value
|
13
|
+
|
14
|
+
|
15
|
+
@dc.dataclass(frozen=True)
|
16
|
+
class LiteralMarshaler(Marshaler):
|
17
|
+
e: Marshaler
|
18
|
+
vs: frozenset
|
19
|
+
|
20
|
+
def marshal(self, ctx: MarshalContext, o: ta.Any | None) -> Value:
|
21
|
+
return self.e.marshal(ctx, check.in_(o, self.vs))
|
22
|
+
|
23
|
+
|
24
|
+
class LiteralMarshalerFactory(MarshalerFactory):
|
25
|
+
def guard(self, ctx: MarshalContext, rty: rfl.Type) -> bool:
|
26
|
+
return isinstance(rty, rfl.Literal)
|
27
|
+
|
28
|
+
def fn(self, ctx: MarshalContext, rty: rfl.Type) -> Marshaler:
|
29
|
+
lty = check.isinstance(rty, rfl.Literal)
|
30
|
+
ety = check.single(set(map(type, lty.args)))
|
31
|
+
return LiteralMarshaler(ctx.make(ety), frozenset(lty.args))
|
32
|
+
|
33
|
+
|
34
|
+
@dc.dataclass(frozen=True)
|
35
|
+
class LiteralUnmarshaler(Unmarshaler):
|
36
|
+
e: Unmarshaler
|
37
|
+
vs: frozenset
|
38
|
+
|
39
|
+
def unmarshal(self, ctx: UnmarshalContext, v: Value) -> ta.Any | None:
|
40
|
+
return check.in_(self.e.unmarshal(ctx, v), self.vs)
|
41
|
+
|
42
|
+
|
43
|
+
class LiteralUnmarshalerFactory(UnmarshalerFactory):
|
44
|
+
def guard(self, ctx: UnmarshalContext, rty: rfl.Type) -> bool:
|
45
|
+
return isinstance(rty, rfl.Literal)
|
46
|
+
|
47
|
+
def fn(self, ctx: UnmarshalContext, rty: rfl.Type) -> Unmarshaler:
|
48
|
+
lty = check.isinstance(rty, rfl.Literal)
|
49
|
+
ety = check.single(set(map(type, lty.args)))
|
50
|
+
return LiteralUnmarshaler(ctx.make(ety), frozenset(lty.args))
|
omlish/marshal/standard.py
CHANGED
@@ -17,6 +17,8 @@ from .enums import EnumMarshalerFactory
|
|
17
17
|
from .enums import EnumUnmarshalerFactory
|
18
18
|
from .iterables import IterableMarshalerFactory
|
19
19
|
from .iterables import IterableUnmarshalerFactory
|
20
|
+
from .literals import LiteralMarshalerFactory
|
21
|
+
from .literals import LiteralUnmarshalerFactory
|
20
22
|
from .mappings import MappingMarshalerFactory
|
21
23
|
from .mappings import MappingUnmarshalerFactory
|
22
24
|
from .maybes import MaybeMarshalerFactory
|
@@ -48,6 +50,7 @@ STANDARD_MARSHALER_FACTORIES: list[MarshalerFactory] = [
|
|
48
50
|
DataclassMarshalerFactory(),
|
49
51
|
NamedtupleMarshalerFactory(),
|
50
52
|
EnumMarshalerFactory(),
|
53
|
+
LiteralMarshalerFactory(),
|
51
54
|
NUMBERS_MARSHALER_FACTORY,
|
52
55
|
UUID_MARSHALER_FACTORY,
|
53
56
|
BASE64_MARSHALER_FACTORY,
|
@@ -80,6 +83,7 @@ STANDARD_UNMARSHALER_FACTORIES: list[UnmarshalerFactory] = [
|
|
80
83
|
DataclassUnmarshalerFactory(),
|
81
84
|
NamedtupleUnmarshalerFactory(),
|
82
85
|
EnumUnmarshalerFactory(),
|
86
|
+
LiteralUnmarshalerFactory(),
|
83
87
|
NUMBERS_UNMARSHALER_FACTORY,
|
84
88
|
UUID_UNMARSHALER_FACTORY,
|
85
89
|
BASE64_UNMARSHALER_FACTORY,
|
omlish/reflect/__init__.py
CHANGED
omlish/reflect/subst.py
CHANGED
@@ -8,6 +8,7 @@ from .ops import get_concrete_type
|
|
8
8
|
from .ops import to_annotation
|
9
9
|
from .types import Any
|
10
10
|
from .types import Generic
|
11
|
+
from .types import Literal
|
11
12
|
from .types import NewType
|
12
13
|
from .types import Type
|
13
14
|
from .types import Union
|
@@ -35,7 +36,7 @@ def replace_type_vars(
|
|
35
36
|
update_aliases: bool = False,
|
36
37
|
) -> Type:
|
37
38
|
def rec(cur):
|
38
|
-
if isinstance(cur, (type, NewType, Any)):
|
39
|
+
if isinstance(cur, (type, NewType, Any, Literal)):
|
39
40
|
return cur
|
40
41
|
|
41
42
|
if isinstance(cur, Generic):
|
omlish/reflect/types.py
CHANGED
@@ -7,6 +7,7 @@ TODO:
|
|
7
7
|
- cache this shit, esp generic_mro shit
|
8
8
|
- cache __hash__ in Generic/Union
|
9
9
|
"""
|
10
|
+
import abc
|
10
11
|
import dataclasses as dc
|
11
12
|
import types
|
12
13
|
import typing as ta
|
@@ -17,11 +18,12 @@ _NoneType = types.NoneType # type: ignore
|
|
17
18
|
_NONE_TYPE_FROZENSET: frozenset['Type'] = frozenset([_NoneType])
|
18
19
|
|
19
20
|
|
20
|
-
|
21
|
+
_AnnotatedAlias = ta._AnnotatedAlias # type: ignore # noqa
|
21
22
|
_CallableGenericAlias = ta._CallableGenericAlias # type: ignore # noqa
|
23
|
+
_GenericAlias = ta._GenericAlias # type: ignore # noqa
|
24
|
+
_LiteralGenericAlias = ta._LiteralGenericAlias # type: ignore # noqa
|
22
25
|
_SpecialGenericAlias = ta._SpecialGenericAlias # type: ignore # noqa
|
23
26
|
_UnionGenericAlias = ta._UnionGenericAlias # type: ignore # noqa
|
24
|
-
_AnnotatedAlias = ta._AnnotatedAlias # type: ignore # noqa
|
25
27
|
|
26
28
|
|
27
29
|
##
|
@@ -116,19 +118,29 @@ def get_newtype_supertype(obj: ta.Any) -> ta.Any:
|
|
116
118
|
##
|
117
119
|
|
118
120
|
|
119
|
-
|
121
|
+
class TypeInfo(abc.ABC): # noqa
|
122
|
+
pass
|
123
|
+
|
124
|
+
|
125
|
+
Type: ta.TypeAlias = ta.Union[ # noqa
|
120
126
|
type,
|
121
127
|
ta.TypeVar,
|
122
|
-
|
123
|
-
'Generic',
|
124
|
-
'NewType',
|
125
|
-
'Annotated',
|
126
|
-
'Any',
|
128
|
+
TypeInfo,
|
127
129
|
]
|
128
130
|
|
129
131
|
|
132
|
+
TYPES: tuple[type, ...] = (
|
133
|
+
type,
|
134
|
+
ta.TypeVar,
|
135
|
+
TypeInfo,
|
136
|
+
)
|
137
|
+
|
138
|
+
|
139
|
+
##
|
140
|
+
|
141
|
+
|
130
142
|
@dc.dataclass(frozen=True)
|
131
|
-
class Union:
|
143
|
+
class Union(TypeInfo):
|
132
144
|
args: frozenset[Type]
|
133
145
|
|
134
146
|
@property
|
@@ -144,8 +156,11 @@ class Union:
|
|
144
156
|
return Union(rem)
|
145
157
|
|
146
158
|
|
159
|
+
#
|
160
|
+
|
161
|
+
|
147
162
|
@dc.dataclass(frozen=True)
|
148
|
-
class Generic:
|
163
|
+
class Generic(TypeInfo):
|
149
164
|
cls: type
|
150
165
|
args: tuple[Type, ...] # map[int, V] = (int, V) | map[T, T] = (T, T)
|
151
166
|
|
@@ -167,39 +182,51 @@ class Generic:
|
|
167
182
|
)
|
168
183
|
|
169
184
|
|
185
|
+
#
|
186
|
+
|
187
|
+
|
170
188
|
@dc.dataclass(frozen=True)
|
171
|
-
class NewType:
|
189
|
+
class NewType(TypeInfo):
|
172
190
|
obj: ta.Any
|
173
191
|
ty: Type
|
174
192
|
|
175
193
|
|
194
|
+
#
|
195
|
+
|
196
|
+
|
176
197
|
@dc.dataclass(frozen=True)
|
177
|
-
class Annotated:
|
198
|
+
class Annotated(TypeInfo):
|
178
199
|
ty: Type
|
179
200
|
md: ta.Sequence[ta.Any]
|
180
201
|
|
181
202
|
obj: ta.Any = dc.field(compare=False, repr=False)
|
182
203
|
|
183
204
|
|
184
|
-
|
205
|
+
#
|
206
|
+
|
207
|
+
|
208
|
+
@dc.dataclass(frozen=True)
|
209
|
+
class Literal(TypeInfo):
|
210
|
+
args: tuple[ta.Any, ...]
|
211
|
+
|
212
|
+
obj: ta.Any = dc.field(compare=False, repr=False)
|
213
|
+
|
214
|
+
|
215
|
+
#
|
216
|
+
|
217
|
+
|
218
|
+
class Any(TypeInfo):
|
185
219
|
pass
|
186
220
|
|
187
221
|
|
188
222
|
ANY = Any()
|
189
223
|
|
190
224
|
|
191
|
-
|
192
|
-
type,
|
193
|
-
ta.TypeVar,
|
194
|
-
Union,
|
195
|
-
Generic,
|
196
|
-
NewType,
|
197
|
-
Annotated,
|
198
|
-
Any,
|
199
|
-
)
|
225
|
+
##
|
200
226
|
|
201
227
|
|
202
|
-
|
228
|
+
class ReflectTypeError(TypeError):
|
229
|
+
pass
|
203
230
|
|
204
231
|
|
205
232
|
class Reflector:
|
@@ -212,57 +239,80 @@ class Reflector:
|
|
212
239
|
|
213
240
|
self._override = override
|
214
241
|
|
242
|
+
#
|
243
|
+
|
215
244
|
def is_type(self, obj: ta.Any) -> bool:
|
216
|
-
|
245
|
+
try:
|
246
|
+
self._type(obj, check_only=True)
|
247
|
+
except ReflectTypeError:
|
248
|
+
return False
|
249
|
+
else:
|
217
250
|
return True
|
218
251
|
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
isinstance(obj, ta.NewType) or # noqa
|
225
|
-
|
226
|
-
(
|
227
|
-
is_simple_generic_alias_type(oty) or
|
228
|
-
oty is _CallableGenericAlias
|
229
|
-
) or
|
252
|
+
def type(self, obj: ta.Any) -> Type:
|
253
|
+
if (ty := self._type(obj, check_only=False)) is None:
|
254
|
+
raise RuntimeError(obj)
|
255
|
+
return ty
|
230
256
|
|
231
|
-
|
257
|
+
#
|
232
258
|
|
233
|
-
|
234
|
-
|
259
|
+
def _type(self, obj: ta.Any, *, check_only: bool) -> Type | None:
|
260
|
+
##
|
261
|
+
# Overrides beat everything
|
235
262
|
|
236
|
-
def type(self, obj: ta.Any) -> Type:
|
237
263
|
if self._override is not None:
|
238
264
|
if (ovr := self._override(obj)) is not None:
|
239
265
|
return ovr
|
240
266
|
|
267
|
+
##
|
268
|
+
# Any
|
269
|
+
|
241
270
|
if obj is ta.Any:
|
242
271
|
return ANY
|
243
272
|
|
244
|
-
|
273
|
+
##
|
274
|
+
# Already a Type?
|
275
|
+
|
276
|
+
if isinstance(obj, (ta.TypeVar, TypeInfo)): # noqa
|
245
277
|
return obj
|
246
278
|
|
247
279
|
oty = type(obj)
|
248
280
|
|
281
|
+
##
|
282
|
+
# Union
|
283
|
+
|
249
284
|
if oty is _UnionGenericAlias or oty is types.UnionType:
|
285
|
+
if check_only:
|
286
|
+
return None
|
287
|
+
|
250
288
|
return Union(frozenset(self.type(a) for a in ta.get_args(obj)))
|
251
289
|
|
290
|
+
##
|
291
|
+
# NewType
|
292
|
+
|
252
293
|
if isinstance(obj, ta.NewType): # noqa
|
294
|
+
if check_only:
|
295
|
+
return None
|
296
|
+
|
253
297
|
return NewType(obj, get_newtype_supertype(obj))
|
254
298
|
|
299
|
+
##
|
300
|
+
# Simple Generic
|
301
|
+
|
255
302
|
if (
|
256
303
|
is_simple_generic_alias_type(oty) or
|
257
304
|
oty is _CallableGenericAlias
|
258
305
|
):
|
306
|
+
if check_only:
|
307
|
+
return None
|
308
|
+
|
259
309
|
origin = ta.get_origin(obj)
|
260
310
|
args = ta.get_args(obj)
|
261
311
|
|
262
312
|
if oty is _CallableGenericAlias:
|
263
313
|
p, r = args
|
264
314
|
if p is Ellipsis or isinstance(p, ta.ParamSpec):
|
265
|
-
raise
|
315
|
+
raise ReflectTypeError(f'Callable argument not yet supported for {obj=}')
|
266
316
|
args = (*p, r)
|
267
317
|
params = _KNOWN_SPECIAL_TYPE_VARS[:len(args)]
|
268
318
|
|
@@ -276,7 +326,7 @@ class Reflector:
|
|
276
326
|
params = get_params(origin)
|
277
327
|
|
278
328
|
if len(args) != len(params):
|
279
|
-
raise
|
329
|
+
raise ReflectTypeError(f'Mismatched {args=} and {params=} for {obj=}')
|
280
330
|
|
281
331
|
return Generic(
|
282
332
|
origin,
|
@@ -285,7 +335,13 @@ class Reflector:
|
|
285
335
|
obj,
|
286
336
|
)
|
287
337
|
|
338
|
+
##
|
339
|
+
# Full Generic
|
340
|
+
|
288
341
|
if isinstance(obj, type):
|
342
|
+
if check_only:
|
343
|
+
return None
|
344
|
+
|
289
345
|
if issubclass(obj, ta.Generic): # type: ignore
|
290
346
|
params = get_params(obj)
|
291
347
|
if params:
|
@@ -295,12 +351,20 @@ class Reflector:
|
|
295
351
|
params,
|
296
352
|
obj,
|
297
353
|
)
|
354
|
+
|
298
355
|
return obj
|
299
356
|
|
357
|
+
##
|
358
|
+
# Special Generic
|
359
|
+
|
300
360
|
if isinstance(obj, _SpecialGenericAlias):
|
301
361
|
if (ks := _KNOWN_SPECIALS_BY_ALIAS.get(obj)) is not None:
|
362
|
+
if check_only:
|
363
|
+
return None
|
364
|
+
|
302
365
|
if (np := ks.nparams) < 0:
|
303
|
-
raise
|
366
|
+
raise ReflectTypeError(obj)
|
367
|
+
|
304
368
|
params = _KNOWN_SPECIAL_TYPE_VARS[:np]
|
305
369
|
return Generic(
|
306
370
|
ks.origin,
|
@@ -309,11 +373,29 @@ class Reflector:
|
|
309
373
|
obj,
|
310
374
|
)
|
311
375
|
|
376
|
+
##
|
377
|
+
# Annotated
|
378
|
+
|
312
379
|
if isinstance(obj, _AnnotatedAlias):
|
380
|
+
if check_only:
|
381
|
+
return None
|
382
|
+
|
313
383
|
o = ta.get_args(obj)[0]
|
314
384
|
return Annotated(self.type(o), md=obj.__metadata__, obj=obj)
|
315
385
|
|
316
|
-
|
386
|
+
##
|
387
|
+
# Literal
|
388
|
+
|
389
|
+
if isinstance(obj, _LiteralGenericAlias):
|
390
|
+
if check_only:
|
391
|
+
return None
|
392
|
+
|
393
|
+
return Literal(ta.get_args(obj), obj=obj)
|
394
|
+
|
395
|
+
##
|
396
|
+
# Failure
|
397
|
+
|
398
|
+
raise ReflectTypeError(obj)
|
317
399
|
|
318
400
|
|
319
401
|
DEFAULT_REFLECTOR = Reflector()
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=lRkBDFxlAbf6lN5upo3WSf-owW8YG1T21dfpbQL-XHM,7598
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=KbZ8zoYDjSV1aGo6s2eOuuEIQygRCdb_vo1nsF-5JAI,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
|
@@ -378,14 +378,14 @@ omlish/lite/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
378
378
|
omlish/lite/cached.py,sha256=O7ozcoDNFm1Hg2wtpHEqYSp_i_nCLNOP6Ueq_Uk-7mU,1300
|
379
379
|
omlish/lite/check.py,sha256=0PD-GKtaDqDX6jU5KbzbMvH-vl6jH82xgYfplmfTQkg,12941
|
380
380
|
omlish/lite/contextmanagers.py,sha256=m9JO--p7L7mSl4cycXysH-1AO27weDKjP3DZG61cwwM,1683
|
381
|
-
omlish/lite/dataclasses.py,sha256=
|
381
|
+
omlish/lite/dataclasses.py,sha256=M6UD4VwGo0Ky7RNzKWbO0IOy7iBZVCIbTiC6EYbFnX8,1035
|
382
382
|
omlish/lite/inject.py,sha256=EEaioN9ESAveVCMe2s5osjwI97FPRUVoU8P95vGUiYo,23376
|
383
383
|
omlish/lite/json.py,sha256=7-02Ny4fq-6YAu5ynvqoijhuYXWpLmfCI19GUeZnb1c,740
|
384
384
|
omlish/lite/logs.py,sha256=CWFG0NKGhqNeEgryF5atN2gkPYbUdTINEw_s1phbINM,51
|
385
|
-
omlish/lite/marshal.py,sha256=
|
385
|
+
omlish/lite/marshal.py,sha256=8V2mWl6D8gfJK_a86YKwmSsBBvoKMucLK4uLBwVpF60,14910
|
386
386
|
omlish/lite/maybes.py,sha256=7OlHJ8Q2r4wQ-aRbZSlJY7x0e8gDvufFdlohGEIJ3P4,833
|
387
387
|
omlish/lite/pycharm.py,sha256=pUOJevrPClSqTCEOkQBO11LKX2003tfDcp18a03QFrc,1163
|
388
|
-
omlish/lite/reflect.py,sha256=
|
388
|
+
omlish/lite/reflect.py,sha256=pzOY2PPuHH0omdtglkN6DheXDrGopdL3PtTJnejyLFU,2189
|
389
389
|
omlish/lite/resources.py,sha256=YNSmX1Ohck1aoWRs55a-o5ChVbFJIQhtbqE-XwF55Oc,326
|
390
390
|
omlish/lite/runtime.py,sha256=XQo408zxTdJdppUZqOWHyeUR50VlCpNIExNGHz4U6O4,459
|
391
391
|
omlish/lite/secrets.py,sha256=3Mz3V2jf__XU9qNHcH56sBSw95L3U2UPL24bjvobG0c,816
|
@@ -422,6 +422,7 @@ omlish/marshal/forbidden.py,sha256=NDe828hqCQw-AgxcEm8MiDZNxWoBwf3o7sTyvQsSsQ0,8
|
|
422
422
|
omlish/marshal/global_.py,sha256=K76wB1-pdg4VWgiqR7wyxRNYr-voJApexYW2nV-R4DM,1127
|
423
423
|
omlish/marshal/helpers.py,sha256=-SOgYJmrURILHpPK6Wu3cCvhj8RJrqfJxuKhh9UMs7o,1102
|
424
424
|
omlish/marshal/iterables.py,sha256=H9FoCB5RlJW0SVSi3SBD6sxOXN9XRTOUkHRwCYSqRb8,2632
|
425
|
+
omlish/marshal/literals.py,sha256=m92biF9-PwHGVBx3zG3s2YvklLeOQ7T5IOdgwBJr-NU,1599
|
425
426
|
omlish/marshal/mappings.py,sha256=XcNOaV708ZHeuIrWiFHC6F1O6U9NyyTKUurvXwIryJo,2789
|
426
427
|
omlish/marshal/maybes.py,sha256=i-gOQJ-7tdt6sOazAeyCh4N71SK3jWv-BKlkx-fZm-s,2200
|
427
428
|
omlish/marshal/namedtuples.py,sha256=H0icxcE5FrqgfI9dRc8LlXJy430g_yuILTCVD0Zvfd0,2799
|
@@ -434,7 +435,7 @@ omlish/marshal/optionals.py,sha256=r0XB5rqfasvgZJNrKYd6Unq2U4nHt3JURi26j0dYHlw,1
|
|
434
435
|
omlish/marshal/polymorphism.py,sha256=2SxrfneA9QdhNdxieEGFnHDHpUo3ftETA9dMbCbmbWY,6511
|
435
436
|
omlish/marshal/primitives.py,sha256=f_6m24Cb-FDGsZpYSas11nLt3xCCEUXugw3Hv4-aNhg,1291
|
436
437
|
omlish/marshal/registries.py,sha256=FvC6qXHCizNB2QmU_N3orxW7iqfGYkiUXYYdTRWS6HA,2353
|
437
|
-
omlish/marshal/standard.py,sha256
|
438
|
+
omlish/marshal/standard.py,sha256=-iA2o674AW1uNVabcA9Dtr6z0gyFS5yLP80nBQ8R5qY,3479
|
438
439
|
omlish/marshal/unions.py,sha256=tT4W-mxuPi7s_kdl25_AUltsurYPO_0mQl2CiVmNonY,4357
|
439
440
|
omlish/marshal/utils.py,sha256=puKJpwPpuDlMOIrKMcLTRLJyMiL6n_Xs-p59AuDEymA,543
|
440
441
|
omlish/marshal/uuids.py,sha256=H4B7UX_EPNmP2tC8bubcKrPLTS4aQu98huvbXQ3Zv2g,910
|
@@ -452,11 +453,11 @@ omlish/os/linux.py,sha256=whJ6scwMKSFBdXiVhJW0BCpJV4jOGMr-a_a3Bhwz6Ls,18938
|
|
452
453
|
omlish/os/paths.py,sha256=hqPiyg_eYaRoIVPdAeX4oeLEV4Kpln_XsH0tHvbOf8Q,844
|
453
454
|
omlish/os/pidfile.py,sha256=S4Nbe00oSxckY0qCC9AeTEZe7NSw4eJudnQX7wCXzks,1738
|
454
455
|
omlish/os/sizes.py,sha256=ohkALLvqSqBX4iR-7DMKJ4pfOCRdZXV8htH4QywUNM0,152
|
455
|
-
omlish/reflect/__init__.py,sha256=
|
456
|
+
omlish/reflect/__init__.py,sha256=JBWwxKwP4IEaomkK0PTju02STU1BVXT14SCrShT1Sm0,769
|
456
457
|
omlish/reflect/inspect.py,sha256=veJ424-9oZrqyvhVpvxOi7hcKW-PDBkdYL2yjrFlk4o,495
|
457
458
|
omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
|
458
|
-
omlish/reflect/subst.py,sha256=
|
459
|
-
omlish/reflect/types.py,sha256=
|
459
|
+
omlish/reflect/subst.py,sha256=g3q7NmNWsmc67mcchmCE3WFPCMDSBq-FXn4ah-DWL_U,3622
|
460
|
+
omlish/reflect/types.py,sha256=lYxK_hlC4kVDMKeDYJp0mymSth21quwuFAMAEFBznyE,9151
|
460
461
|
omlish/secrets/__init__.py,sha256=SGB1KrlNrxlNpazEHYy95NTzteLi8ndoEgMhU7luBl8,420
|
461
462
|
omlish/secrets/crypto.py,sha256=6CsLy0UEqCrBK8Xx_3-iFF6SKtu2GlEqUQ8-MliY3tk,3709
|
462
463
|
omlish/secrets/marshal.py,sha256=U9uSRTWzZmumfNZeh_dROwVdGrARsp155TylRbjilP8,2048
|
@@ -569,9 +570,9 @@ omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,329
|
|
569
570
|
omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
|
570
571
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
571
572
|
omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
|
572
|
-
omlish-0.0.0.
|
573
|
-
omlish-0.0.0.
|
574
|
-
omlish-0.0.0.
|
575
|
-
omlish-0.0.0.
|
576
|
-
omlish-0.0.0.
|
577
|
-
omlish-0.0.0.
|
573
|
+
omlish-0.0.0.dev174.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
574
|
+
omlish-0.0.0.dev174.dist-info/METADATA,sha256=mfdjBA3EnhNV8PVranSvjA6zIydorvYRoHtqJZ62xhA,4264
|
575
|
+
omlish-0.0.0.dev174.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
576
|
+
omlish-0.0.0.dev174.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
577
|
+
omlish-0.0.0.dev174.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
578
|
+
omlish-0.0.0.dev174.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|