omlish 0.0.0.dev172__py3-none-any.whl → 0.0.0.dev174__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- 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
|