omlish 0.0.0.dev292__py3-none-any.whl → 0.0.0.dev293__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/configs/all.py +4 -0
- omlish/configs/classes.py +3 -0
- omlish/dataclasses/api/classes/decorator.py +35 -1
- omlish/dataclasses/api/classes/make.py +8 -0
- omlish/dataclasses/api/classes/params.py +20 -0
- omlish/dataclasses/concerns/repr.py +42 -22
- omlish/dataclasses/metaclass/bases.py +15 -0
- omlish/dataclasses/metaclass/confer.py +5 -0
- omlish/dataclasses/specs.py +4 -0
- omlish/dataclasses/utils.py +1 -1
- omlish/formats/json5/parsing.py +1 -2
- omlish/secrets/all.py +2 -0
- omlish/secrets/secrets.py +1 -0
- omlish/text/filecache.py +3 -3
- omlish/typedvalues/__init__.py +2 -0
- omlish/typedvalues/accessor.py +1 -1
- omlish/typedvalues/collection.py +18 -4
- omlish/typedvalues/marshal.py +6 -7
- omlish/typedvalues/reflect.py +2 -3
- omlish/typedvalues/values.py +26 -10
- {omlish-0.0.0.dev292.dist-info → omlish-0.0.0.dev293.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev292.dist-info → omlish-0.0.0.dev293.dist-info}/RECORD +27 -27
- {omlish-0.0.0.dev292.dist-info → omlish-0.0.0.dev293.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev292.dist-info → omlish-0.0.0.dev293.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev292.dist-info → omlish-0.0.0.dev293.dist-info}/licenses/LICENSE +0 -0
- {omlish-0.0.0.dev292.dist-info → omlish-0.0.0.dev293.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
omlish/configs/all.py
CHANGED
omlish/configs/classes.py
CHANGED
@@ -15,7 +15,9 @@ from ...utils import class_decorator
|
|
15
15
|
from ..fields.building import build_cls_std_fields
|
16
16
|
from ..fields.conversion import std_field_to_field_spec
|
17
17
|
from .metadata import extract_cls_metadata
|
18
|
+
from .params import STD_PARAM_DEFAULTS
|
18
19
|
from .params import build_spec_std_params
|
20
|
+
from .params import get_class_spec
|
19
21
|
|
20
22
|
|
21
23
|
##
|
@@ -47,11 +49,19 @@ def dataclass(
|
|
47
49
|
cache_hash: bool | None = None,
|
48
50
|
generic_init: bool | None = None,
|
49
51
|
override: bool | None = None,
|
52
|
+
|
50
53
|
repr_id: bool | None = None,
|
54
|
+
terse_repr: bool | None = None,
|
55
|
+
|
56
|
+
allow_redundant_decorator: bool | None = None,
|
51
57
|
|
52
58
|
#
|
53
59
|
|
54
60
|
_plan_only: bool = False,
|
61
|
+
|
62
|
+
#
|
63
|
+
|
64
|
+
_kwargs: ta.Mapping[str, ta.Any] | None = None,
|
55
65
|
):
|
56
66
|
if isinstance(metadata, ta.Mapping):
|
57
67
|
raise TypeError(metadata)
|
@@ -60,6 +70,27 @@ def dataclass(
|
|
60
70
|
|
61
71
|
cls = check.not_none(cls)
|
62
72
|
|
73
|
+
if STD_PARAMS_ATTR in cls.__dict__:
|
74
|
+
if (xcs := get_class_spec(cls)) is not None and xcs.allow_redundant_decorator:
|
75
|
+
xpd = {
|
76
|
+
a: getattr(xcs, a)
|
77
|
+
for a in STD_PARAM_DEFAULTS
|
78
|
+
}
|
79
|
+
|
80
|
+
dpd = {
|
81
|
+
**STD_PARAM_DEFAULTS,
|
82
|
+
**{k: v for k, v in (_kwargs or {}).items() if k in STD_PARAM_DEFAULTS},
|
83
|
+
}
|
84
|
+
|
85
|
+
if xpd == dpd:
|
86
|
+
check.in_(STD_FIELDS_ATTR, cls.__dict__)
|
87
|
+
return cls
|
88
|
+
|
89
|
+
raise TypeError(cls)
|
90
|
+
|
91
|
+
check.not_in(STD_PARAMS_ATTR, cls.__dict__)
|
92
|
+
check.not_in(STD_FIELDS_ATTR, cls.__dict__)
|
93
|
+
|
63
94
|
#
|
64
95
|
|
65
96
|
fields = build_cls_std_fields(
|
@@ -122,7 +153,11 @@ def dataclass(
|
|
122
153
|
cache_hash=cache_hash,
|
123
154
|
generic_init=generic_init,
|
124
155
|
override=override,
|
156
|
+
|
125
157
|
repr_id=repr_id,
|
158
|
+
terse_repr=terse_repr,
|
159
|
+
|
160
|
+
allow_redundant_decorator=allow_redundant_decorator,
|
126
161
|
),
|
127
162
|
},
|
128
163
|
|
@@ -133,7 +168,6 @@ def dataclass(
|
|
133
168
|
#
|
134
169
|
|
135
170
|
std_params = build_spec_std_params(cs)
|
136
|
-
check.not_in(STD_PARAMS_ATTR, cls.__dict__)
|
137
171
|
setattr(cls, STD_PARAMS_ATTR, std_params)
|
138
172
|
|
139
173
|
#
|
@@ -39,7 +39,11 @@ def make_dataclass( # noqa
|
|
39
39
|
cache_hash: bool | None = None,
|
40
40
|
generic_init: bool | None = None,
|
41
41
|
override: bool | None = None,
|
42
|
+
|
42
43
|
repr_id: bool | None = None,
|
44
|
+
terse_repr: bool | None = None,
|
45
|
+
|
46
|
+
allow_redundant_decorator: bool | None = None,
|
43
47
|
):
|
44
48
|
if namespace is None:
|
45
49
|
namespace = {}
|
@@ -105,5 +109,9 @@ def make_dataclass( # noqa
|
|
105
109
|
cache_hash=cache_hash,
|
106
110
|
generic_init=generic_init,
|
107
111
|
override=override,
|
112
|
+
|
108
113
|
repr_id=repr_id,
|
114
|
+
terse_repr=terse_repr,
|
115
|
+
|
116
|
+
allow_redundant_decorator=allow_redundant_decorator,
|
109
117
|
)
|
@@ -9,6 +9,26 @@ from ...specs import ClassSpec
|
|
9
9
|
##
|
10
10
|
|
11
11
|
|
12
|
+
STD_PARAM_DEFAULTS: ta.Mapping[str, ta.Any] = dict(
|
13
|
+
init=True,
|
14
|
+
repr=True, # noqa
|
15
|
+
eq=True,
|
16
|
+
order=False,
|
17
|
+
unsafe_hash=False,
|
18
|
+
frozen=False,
|
19
|
+
|
20
|
+
match_args=True,
|
21
|
+
kw_only=False,
|
22
|
+
slots=False,
|
23
|
+
weakref_slot=False,
|
24
|
+
)
|
25
|
+
|
26
|
+
STD_PARAM_ATTRS: tuple[str, ...] = tuple(STD_PARAM_DEFAULTS)
|
27
|
+
|
28
|
+
|
29
|
+
##
|
30
|
+
|
31
|
+
|
12
32
|
class SpecDataclassParams(StdParams):
|
13
33
|
__slots__ = (*StdParams.__slots__, '_spec')
|
14
34
|
|
@@ -11,25 +11,27 @@ from ..generation.ops import OpRef
|
|
11
11
|
from ..generation.ops import Ref
|
12
12
|
from ..generation.registry import register_generator_type
|
13
13
|
from ..processing.base import ProcessingContext
|
14
|
+
from ..specs import FieldSpec
|
14
15
|
from ..specs import FieldType
|
15
16
|
from ..specs import ReprFn
|
17
|
+
from .fields import InitFields
|
16
18
|
|
17
19
|
|
18
20
|
##
|
19
21
|
|
20
22
|
|
21
|
-
@dc.dataclass(frozen=True)
|
23
|
+
@dc.dataclass(frozen=True, kw_only=True)
|
22
24
|
class ReprPlan(Plan):
|
23
|
-
|
25
|
+
@dc.dataclass(frozen=True, kw_only=True)
|
26
|
+
class Field:
|
27
|
+
name: str
|
28
|
+
kw_only: bool = False
|
29
|
+
fn: OpRef[ReprFn] | None = None
|
24
30
|
|
25
|
-
|
26
|
-
class Fn:
|
27
|
-
field: str
|
28
|
-
fn: OpRef[ReprFn]
|
29
|
-
|
30
|
-
fns: tuple[Fn, ...] = ()
|
31
|
+
fields: tuple[Field, ...]
|
31
32
|
|
32
33
|
id: bool = False
|
34
|
+
terse: bool = False
|
33
35
|
|
34
36
|
|
35
37
|
@register_generator_type(ReprPlan)
|
@@ -38,22 +40,37 @@ class ReprGenerator(Generator[ReprPlan]):
|
|
38
40
|
if not ctx.cs.repr or '__repr__' in ctx.cls.__dict__:
|
39
41
|
return None
|
40
42
|
|
41
|
-
|
43
|
+
ifs = ctx[InitFields]
|
44
|
+
fs: ta.Sequence[FieldSpec]
|
45
|
+
if ctx.cs.terse_repr:
|
46
|
+
# If terse repr will match init param order
|
47
|
+
fs = ifs.all
|
48
|
+
else:
|
49
|
+
# Otherwise default to dc.fields() order
|
50
|
+
fs = sorted(ctx.cs.fields, key=lambda f: f.repr_priority or 0)
|
42
51
|
|
43
52
|
orm = {}
|
44
|
-
rfs: list[ReprPlan.
|
53
|
+
rfs: list[ReprPlan.Field] = []
|
45
54
|
for i, f in enumerate(fs):
|
46
|
-
if f.
|
55
|
+
if not (f.field_type is FieldType.INSTANCE and f.repr):
|
47
56
|
continue
|
48
|
-
|
49
|
-
|
50
|
-
|
57
|
+
|
58
|
+
fnr: OpRef | None = None
|
59
|
+
if f.repr_fn is not None:
|
60
|
+
fnr = OpRef(f'repr.fns.{i}.fn')
|
61
|
+
orm[fnr] = f.repr_fn
|
62
|
+
|
63
|
+
rfs.append(ReprPlan.Field(
|
64
|
+
name=f.name,
|
65
|
+
kw_only=f in ifs.kw_only,
|
66
|
+
fn=fnr,
|
67
|
+
))
|
51
68
|
|
52
69
|
return PlanResult(
|
53
70
|
ReprPlan(
|
54
|
-
fields=tuple(
|
55
|
-
fns=tuple(rfs),
|
71
|
+
fields=tuple(rfs),
|
56
72
|
id=ctx.cs.repr_id,
|
73
|
+
terse=ctx.cs.terse_repr,
|
57
74
|
),
|
58
75
|
orm,
|
59
76
|
)
|
@@ -63,17 +80,20 @@ class ReprGenerator(Generator[ReprPlan]):
|
|
63
80
|
|
64
81
|
part_lines: list[str] = []
|
65
82
|
|
66
|
-
rfd = {rf.field: rf.fn for rf in pl.fns}
|
67
83
|
for f in pl.fields:
|
68
|
-
|
69
|
-
|
84
|
+
pfx = ''
|
85
|
+
if not (pl.terse and not f.kw_only):
|
86
|
+
pfx = f'{f.name}='
|
87
|
+
|
88
|
+
if f.fn is not None:
|
89
|
+
ors.add(f.fn)
|
70
90
|
part_lines.extend([
|
71
|
-
f' if (s := {
|
72
|
-
f' parts.append(f"{
|
91
|
+
f' if (s := {f.fn.ident()}(self.{f.name})) is not None:',
|
92
|
+
f' parts.append(f"{pfx}{{s}}")',
|
73
93
|
])
|
74
94
|
else:
|
75
95
|
part_lines.append(
|
76
|
-
f' parts.append(f"{
|
96
|
+
f' parts.append(f"{pfx}{{self.{f.name}!r}}")',
|
77
97
|
)
|
78
98
|
|
79
99
|
return [
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import typing as ta
|
2
2
|
|
3
|
+
from ..api.classes.decorator import dataclass
|
3
4
|
from ..concerns.frozen import unchecked_frozen_base
|
4
5
|
from .meta import DataMeta
|
5
6
|
from .specs import get_metaclass_spec
|
@@ -16,9 +17,11 @@ T = ta.TypeVar('T')
|
|
16
17
|
class Data(
|
17
18
|
eq=False,
|
18
19
|
order=False,
|
20
|
+
allow_redundant_decorator=True,
|
19
21
|
confer=frozenset([
|
20
22
|
'confer',
|
21
23
|
'final_subclasses',
|
24
|
+
'allow_redundant_decorator',
|
22
25
|
]),
|
23
26
|
metaclass=DataMeta,
|
24
27
|
):
|
@@ -31,6 +34,9 @@ class Data(
|
|
31
34
|
super().__init_subclass__(**kwargs)
|
32
35
|
|
33
36
|
|
37
|
+
#
|
38
|
+
|
39
|
+
|
34
40
|
class Frozen(
|
35
41
|
Data,
|
36
42
|
frozen=True,
|
@@ -47,6 +53,9 @@ class Frozen(
|
|
47
53
|
pass
|
48
54
|
|
49
55
|
|
56
|
+
#
|
57
|
+
|
58
|
+
|
50
59
|
class Case(
|
51
60
|
Frozen,
|
52
61
|
abstract=True,
|
@@ -57,13 +66,19 @@ class Case(
|
|
57
66
|
pass
|
58
67
|
|
59
68
|
|
69
|
+
#
|
70
|
+
|
71
|
+
|
72
|
+
@dataclass(frozen=True)
|
60
73
|
class Box(
|
61
74
|
Frozen,
|
62
75
|
ta.Generic[T],
|
63
76
|
generic_init=True,
|
77
|
+
terse_repr=True,
|
64
78
|
confer=frozenset([
|
65
79
|
*get_metaclass_spec(Frozen).confer,
|
66
80
|
'generic_init',
|
81
|
+
'terse_repr',
|
67
82
|
]),
|
68
83
|
):
|
69
84
|
v: T
|
omlish/dataclasses/specs.py
CHANGED
@@ -183,7 +183,11 @@ class ClassSpec(lang.Final):
|
|
183
183
|
cache_hash: bool = False
|
184
184
|
generic_init: bool = False
|
185
185
|
override: bool = False
|
186
|
+
|
186
187
|
repr_id: bool = False
|
188
|
+
terse_repr: bool = False
|
189
|
+
|
190
|
+
allow_redundant_decorator: bool = False
|
187
191
|
|
188
192
|
##
|
189
193
|
# callbacks
|
omlish/dataclasses/utils.py
CHANGED
@@ -75,7 +75,7 @@ def class_decorator(fn):
|
|
75
75
|
@functools.wraps(fn)
|
76
76
|
def inner(cls=None, *args, **kwargs):
|
77
77
|
if cls is None:
|
78
|
-
return lambda cls: fn(cls, *args, **kwargs) # noqa
|
78
|
+
return lambda cls: fn(cls, *args, _kwargs=kwargs, **kwargs) # noqa
|
79
79
|
return fn(cls, *args, **kwargs)
|
80
80
|
return inner
|
81
81
|
|
omlish/formats/json5/parsing.py
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
# ruff: noqa: N802 N803
|
2
2
|
import typing as ta
|
3
3
|
|
4
|
-
from
|
5
|
-
|
4
|
+
from ... import antlr
|
6
5
|
from ._antlr.Json5Lexer import Json5Lexer # type: ignore
|
7
6
|
from ._antlr.Json5Parser import Json5Parser # type: ignore
|
8
7
|
from ._antlr.Json5Visitor import Json5Visitor # type: ignore
|
omlish/secrets/all.py
CHANGED
omlish/secrets/secrets.py
CHANGED
omlish/text/filecache.py
CHANGED
@@ -131,7 +131,7 @@ class TextFileCache:
|
|
131
131
|
|
132
132
|
#
|
133
133
|
|
134
|
-
def
|
134
|
+
def normalize_path(self, path: str) -> str:
|
135
135
|
return abs_real_path(path)
|
136
136
|
|
137
137
|
#
|
@@ -217,7 +217,7 @@ class TextFileCache:
|
|
217
217
|
check_stat: bool = False,
|
218
218
|
or_raise: bool = False,
|
219
219
|
) -> Entry:
|
220
|
-
path = self.
|
220
|
+
path = self.normalize_path(path)
|
221
221
|
|
222
222
|
with self._lock:
|
223
223
|
return self._get_entry(
|
@@ -229,7 +229,7 @@ class TextFileCache:
|
|
229
229
|
#
|
230
230
|
|
231
231
|
def invalidate(self, path: str) -> bool:
|
232
|
-
path = self.
|
232
|
+
path = self.normalize_path(path)
|
233
233
|
|
234
234
|
with self._lock:
|
235
235
|
return self._dct.pop(path, None) is not None
|
omlish/typedvalues/__init__.py
CHANGED
omlish/typedvalues/accessor.py
CHANGED
@@ -32,7 +32,7 @@ class TypedValuesAccessor(lang.Abstract, ta.Generic[TypedValueT]):
|
|
32
32
|
|
33
33
|
@ta.final
|
34
34
|
def __contains__(self, cls: type[TypedValueU]) -> bool:
|
35
|
-
|
35
|
+
return self._typed_value_contains(cls)
|
36
36
|
|
37
37
|
@abc.abstractmethod
|
38
38
|
def _typed_value_contains(self, cls):
|
omlish/typedvalues/collection.py
CHANGED
@@ -65,7 +65,6 @@ class TypedValues(
|
|
65
65
|
if idx == len(ulst):
|
66
66
|
lst.append(tv)
|
67
67
|
dct[utvc] = tv
|
68
|
-
dct[type(tv)] = tv
|
69
68
|
else:
|
70
69
|
tv = obj
|
71
70
|
lst.append(tv)
|
@@ -76,6 +75,10 @@ class TypedValues(
|
|
76
75
|
k: tuple(v) if isinstance(v, list) else v
|
77
76
|
for k, v in dct.items()
|
78
77
|
}
|
78
|
+
self._dct2: dict[type[TypedValueT], TypedValueT | tuple[TypedValueT, ...]] = {
|
79
|
+
**self._dct,
|
80
|
+
**{type(v): v for v in self._dct.values() if isinstance(v, UniqueTypedValue)}, # type: ignore[misc]
|
81
|
+
}
|
79
82
|
|
80
83
|
#
|
81
84
|
|
@@ -161,21 +164,32 @@ class TypedValues(
|
|
161
164
|
|
162
165
|
#
|
163
166
|
|
167
|
+
def keys(self) -> ta.KeysView[type[TypedValueT]]:
|
168
|
+
return self._dct.keys()
|
169
|
+
|
170
|
+
def values(self) -> ta.ValuesView[TypedValueT | tuple[TypedValueT, ...]]:
|
171
|
+
return self._dct.values()
|
172
|
+
|
173
|
+
def items(self) -> ta.ItemsView[type[TypedValueT], TypedValueT | tuple[TypedValueT, ...]]:
|
174
|
+
return self._dct.items()
|
175
|
+
|
176
|
+
#
|
177
|
+
|
164
178
|
def _typed_value_contains(self, cls):
|
165
|
-
return cls in self.
|
179
|
+
return cls in self._dct2
|
166
180
|
|
167
181
|
def _typed_value_getitem(self, key):
|
168
182
|
if isinstance(key, int):
|
169
183
|
return self._tup[key]
|
170
184
|
elif isinstance(key, type):
|
171
|
-
return self.
|
185
|
+
return self._dct2[check.issubclass(key, TypedValue)]
|
172
186
|
else:
|
173
187
|
raise TypeError(key)
|
174
188
|
|
175
189
|
def _typed_value_get(self, key, /, default=None):
|
176
190
|
check.issubclass(key, TypedValue)
|
177
191
|
try:
|
178
|
-
return self.
|
192
|
+
return self._dct2[key]
|
179
193
|
except KeyError:
|
180
194
|
if issubclass(key, UniqueTypedValue):
|
181
195
|
return default
|
omlish/typedvalues/marshal.py
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
from
|
2
|
-
from
|
3
|
-
from
|
4
|
-
from
|
5
|
-
from
|
6
|
-
from
|
7
|
-
|
1
|
+
from .. import check
|
2
|
+
from .. import dataclasses as dc
|
3
|
+
from .. import lang
|
4
|
+
from .. import marshal as msh
|
5
|
+
from .. import reflect as rfl
|
6
|
+
from ..funcs import match as mfs
|
8
7
|
from .collection import TypedValues
|
9
8
|
from .reflect import reflect_typed_values_impls
|
10
9
|
from .values import ScalarTypedValue
|
omlish/typedvalues/reflect.py
CHANGED
omlish/typedvalues/values.py
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
"""
|
2
|
+
TODO:
|
3
|
+
- dc.Box, or some other kind of meta
|
4
|
+
"""
|
1
5
|
import typing as ta
|
2
6
|
|
3
7
|
from .. import dataclasses as dc
|
@@ -17,13 +21,16 @@ class TypedValue(lang.Abstract):
|
|
17
21
|
##
|
18
22
|
|
19
23
|
|
24
|
+
_UNIQUE_BASES: set[type[TypedValue]] = set()
|
25
|
+
|
26
|
+
|
20
27
|
class UniqueTypedValue(TypedValue, lang.Abstract):
|
21
28
|
_unique_typed_value_cls: ta.ClassVar[type[TypedValue]]
|
22
29
|
|
23
30
|
def __init_subclass__(cls, **kwargs: ta.Any) -> None:
|
24
31
|
super().__init_subclass__(**kwargs)
|
25
32
|
|
26
|
-
if
|
33
|
+
if any(ur in cls.__bases__ for ur in _UNIQUE_BASES):
|
27
34
|
try:
|
28
35
|
cls._unique_typed_value_cls # noqa
|
29
36
|
except AttributeError:
|
@@ -35,16 +42,25 @@ class UniqueTypedValue(TypedValue, lang.Abstract):
|
|
35
42
|
##
|
36
43
|
|
37
44
|
|
38
|
-
|
39
|
-
@dc.extra_class_params(generic_init=True)
|
40
|
-
class ScalarTypedValue(TypedValue, lang.Abstract, ta.Generic[T]):
|
41
|
-
v: T
|
42
|
-
|
43
|
-
def __repr__(self) -> str:
|
44
|
-
return f'{self.__class__.__name__}({self.v!r})'
|
45
|
-
|
45
|
+
class ScalarTypedValue(TypedValue, dc.Box[T], abstract=True):
|
46
46
|
def __init_subclass__(cls, **kwargs: ta.Any) -> None:
|
47
47
|
super().__init_subclass__(**kwargs)
|
48
48
|
|
49
49
|
if UniqueTypedValue in (mro := cls.__mro__) and mro.index(ScalarTypedValue) > mro.index(UniqueTypedValue):
|
50
|
-
raise TypeError(f'Class {cls} must have UniqueTypedValue before ScalarTypedValue in mro')
|
50
|
+
raise TypeError(f'Class {cls} must not have UniqueTypedValue before ScalarTypedValue in mro')
|
51
|
+
|
52
|
+
|
53
|
+
##
|
54
|
+
|
55
|
+
|
56
|
+
class UniqueScalarTypedValue(ScalarTypedValue[T], UniqueTypedValue, abstract=True):
|
57
|
+
pass
|
58
|
+
|
59
|
+
|
60
|
+
##
|
61
|
+
|
62
|
+
|
63
|
+
_UNIQUE_BASES.update([
|
64
|
+
UniqueTypedValue,
|
65
|
+
UniqueScalarTypedValue,
|
66
|
+
])
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=pjGUyLHaoWpPqRP3jz2u1fC1qoRc2lvrEcpU_Ax2tdg,8253
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=y6FOK7bieQR8UYCmv5o1Qd1PcE1UydQsZmqYPy5X0dQ,3444
|
3
3
|
omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
|
4
4
|
omlish/c3.py,sha256=rer-TPOFDU6fYq_AWio_AmA-ckZ8JDY5shIzQ_yXfzA,8414
|
5
5
|
omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
|
@@ -179,8 +179,8 @@ omlish/concurrent/executors.py,sha256=mF-rjJWzNFxwB1-_H7rHuwoImpl4FtNM6W3wcqM3NE
|
|
179
179
|
omlish/concurrent/futures.py,sha256=870tx8ELI8THvMnTrQoYIlEFKO9hM4KUrlehckJqKBU,4238
|
180
180
|
omlish/concurrent/threadlets.py,sha256=JfirbTDJgy9Ouokz_VmHeAAPS7cih8qMUJrN-owwXD4,2423
|
181
181
|
omlish/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
182
|
-
omlish/configs/all.py,sha256=
|
183
|
-
omlish/configs/classes.py,sha256=
|
182
|
+
omlish/configs/all.py,sha256=xTfR7NySnlIeqhk0GlUOncPnWZ97cLhCtRDlN_Ny8og,1107
|
183
|
+
omlish/configs/classes.py,sha256=bRQ3NiYWpHNXspu7P52_9d-00P9YQz_cV8zWXTY2BZE,1173
|
184
184
|
omlish/configs/formats.py,sha256=RJw4Rzp7vlTd5YyAvpAoruQnk45v8dGPtPWwqH7aYyE,5301
|
185
185
|
omlish/configs/nginx.py,sha256=XuX9yyb0_MwkJ8esKiMS9gFkqHUPza_uCprhnWykNy8,2051
|
186
186
|
omlish/configs/shadow.py,sha256=-R5nbevC4pFgqDPYOCCIqNcusgXsMWlRIUOEG0HBoJg,2228
|
@@ -208,15 +208,15 @@ omlish/dataclasses/errors.py,sha256=tyv3WR6az66uGGiq9FIuCHvy1Ef-G7zeMY7mMG6hy2Y,
|
|
208
208
|
omlish/dataclasses/inspect.py,sha256=BlpPghVCU3w_YDnONEqqE99YHzJM2q3eoqe39YX25Ko,4596
|
209
209
|
omlish/dataclasses/internals.py,sha256=vIGCZnStgD3ef4drYRtVOrxhxmAPa0vJpo4pXcDcQvM,3073
|
210
210
|
omlish/dataclasses/reflection.py,sha256=5N4acL27xwSnQJvoks6ts2JseGfwL_P9D2gM9vqtAFM,2243
|
211
|
-
omlish/dataclasses/specs.py,sha256=
|
212
|
-
omlish/dataclasses/utils.py,sha256=
|
211
|
+
omlish/dataclasses/specs.py,sha256=r9hpIWy83ODiB1n7wTf7JL5fiCeeT8fWbMvxs7c4e3g,6148
|
212
|
+
omlish/dataclasses/utils.py,sha256=gv6za6oJYBr1VaeGd7oXqq9lhBs_sxkpC27XYzJggno,1870
|
213
213
|
omlish/dataclasses/api/__init__.py,sha256=GFodt19CKrfuBpdv1EUqVUCPAFIlHPnabE2G8QJElBY,426
|
214
214
|
omlish/dataclasses/api/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
215
215
|
omlish/dataclasses/api/classes/conversion.py,sha256=x1Ayo5W3t8lVh10KGH_ZBJ_kK7HqcdI2LdJA6mR_WXQ,810
|
216
|
-
omlish/dataclasses/api/classes/decorator.py,sha256=
|
217
|
-
omlish/dataclasses/api/classes/make.py,sha256=
|
216
|
+
omlish/dataclasses/api/classes/decorator.py,sha256=q-m05j6VhJ9_00TmrXBvwmv0_TFPTD8OURi1KbKo9-4,3933
|
217
|
+
omlish/dataclasses/api/classes/make.py,sha256=Q_8ZVjhhFEUstIZA3Ht_vlGptYjTcJqX48qT57W7SZw,2820
|
218
218
|
omlish/dataclasses/api/classes/metadata.py,sha256=2YafXunxqbqnHIdp5gsiGLyH7cWg9FR5wCwcxlLFd20,2685
|
219
|
-
omlish/dataclasses/api/classes/params.py,sha256=
|
219
|
+
omlish/dataclasses/api/classes/params.py,sha256=GmLJotHT4BuXcK9lAwP00boR0_mfM0xITWBFKrk0brY,1994
|
220
220
|
omlish/dataclasses/api/fields/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
221
221
|
omlish/dataclasses/api/fields/building.py,sha256=YVAJZ2c318vK0YWz9VU8_MdjA5qNjqsI3N85K-bD0TI,3314
|
222
222
|
omlish/dataclasses/api/fields/constructor.py,sha256=T2GeczTz9uy2EOTDlU4VJoiXp-I6jvlxnYXChvQqHxk,1533
|
@@ -237,7 +237,7 @@ omlish/dataclasses/concerns/order.py,sha256=f1JVDkeTWllO9Tu79xKkjHul-_rpsYZXHMTn
|
|
237
237
|
omlish/dataclasses/concerns/override.py,sha256=eegJ4KRs-p3Oj5ipY1eySwXJ3vFyVXG5gWRQZcsmvUQ,2810
|
238
238
|
omlish/dataclasses/concerns/params.py,sha256=ZrNGBUp87YkrOMW7bYn0GdYk9PuDHzxdwKn477lqUyE,404
|
239
239
|
omlish/dataclasses/concerns/replace.py,sha256=Q11NjVMMHVh9MjJ6osaXNFG5HuGWQM6qDgWK7IN0IIc,1501
|
240
|
-
omlish/dataclasses/concerns/repr.py,sha256=
|
240
|
+
omlish/dataclasses/concerns/repr.py,sha256=HHwCqZPGTMhRPsVgbqrZEh30DBV8LcVSXF2oSrqcjvM,3458
|
241
241
|
omlish/dataclasses/concerns/slots.py,sha256=xg6346UT_oUlb0kYaWFbeJUKzZcpQx4nJkT86CXfI5c,5922
|
242
242
|
omlish/dataclasses/generation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
243
243
|
omlish/dataclasses/generation/base.py,sha256=adi68lJogtjx1SoxGJ5hqC-f-CMX2gWi8iALmucIwKo,686
|
@@ -253,8 +253,8 @@ omlish/dataclasses/generation/processor.py,sha256=_rt_GHdx_pi5seRMzIu6DvLEx4MYGs
|
|
253
253
|
omlish/dataclasses/generation/registry.py,sha256=_Cfvs9QY6f8Pvf9cKUi-OTI-qaDem3z5jcWkSDNk3kQ,1006
|
254
254
|
omlish/dataclasses/generation/utils.py,sha256=u6DWRvzxgqrxqyfAGzNOyDvnOJYdMTYyZ7l1oOOiXrI,2089
|
255
255
|
omlish/dataclasses/metaclass/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
256
|
-
omlish/dataclasses/metaclass/bases.py,sha256=
|
257
|
-
omlish/dataclasses/metaclass/confer.py,sha256=
|
256
|
+
omlish/dataclasses/metaclass/bases.py,sha256=aKxhjk_dx87ssTkEs35y4kPGIhuas4LmM5nlzYzvqhg,1394
|
257
|
+
omlish/dataclasses/metaclass/confer.py,sha256=dErYZbTXBKgvGAi2eu3FocxTvd9lNSqv03haKWsNjcg,1395
|
258
258
|
omlish/dataclasses/metaclass/meta.py,sha256=0MQG7Sl1y8QccGRgLOC0VoLDTMBG6VoyT-wZdthO1zI,2639
|
259
259
|
omlish/dataclasses/metaclass/specs.py,sha256=djzkHK95h06Cgrx8rr3SGkv2gOvL-fPOhWOBWbbN8h4,789
|
260
260
|
omlish/dataclasses/processing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -344,7 +344,7 @@ omlish/formats/json5/__init__.py,sha256=BsjPz5zJDji3GjQ8x8hWvcl1GYPV_ZIHnE3c2Sr8
|
|
344
344
|
omlish/formats/json5/codec.py,sha256=ldnxCRo0JP1fkGLt0mMxJlLvNxqIF_1KUCcSp1HtI-M,452
|
345
345
|
omlish/formats/json5/errors.py,sha256=AHkR9ySjAoQdUrizpqgL8fg0M5oe5mHZkml3KZHEvC4,38
|
346
346
|
omlish/formats/json5/literals.py,sha256=rj4-9KFXfgdq5oK_eUkp57cgoMQ8T0gRaG9ga430he4,2429
|
347
|
-
omlish/formats/json5/parsing.py,sha256=
|
347
|
+
omlish/formats/json5/parsing.py,sha256=qYLcPgkMyjsWeolc6nMg-u5_2PMvBy7jtEUIJZoNZhs,2342
|
348
348
|
omlish/formats/json5/_antlr/Json5Lexer.py,sha256=8TKxlENDsl6CPfoLR06uQSvhDnzGcY7fKsIhFJ_g6N4,23237
|
349
349
|
omlish/formats/json5/_antlr/Json5Listener.py,sha256=fSiOzSS0CMjxaCev3sxZqJlW-buqIyDLwgnuRv-Uh80,2095
|
350
350
|
omlish/formats/json5/_antlr/Json5Parser.py,sha256=nbbwoCPvEVRcEh5_t092XLmsXIHnbzONvH0W0g_BYkQ,19677
|
@@ -619,13 +619,13 @@ omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
|
|
619
619
|
omlish/reflect/subst.py,sha256=g3q7NmNWsmc67mcchmCE3WFPCMDSBq-FXn4ah-DWL_U,3622
|
620
620
|
omlish/reflect/types.py,sha256=Cn9FYGoiCNt0FS0YLiTTAR12WKcesWMapCrVYcb8IDo,9225
|
621
621
|
omlish/secrets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
622
|
-
omlish/secrets/all.py,sha256=
|
622
|
+
omlish/secrets/all.py,sha256=kUTuS4pZVskJe1kFN6m1F1br09BNSjX7MUC2RZRndwc,437
|
623
623
|
omlish/secrets/crypto.py,sha256=9D21lnvPhStwu8arD4ssT0ih0bDG-nlqIRdVgYL40xA,3708
|
624
624
|
omlish/secrets/marshal.py,sha256=u90n1OfRfdpH1T2F0xK_pAPH1ENYL6acFt6XdVd3KvI,1986
|
625
625
|
omlish/secrets/openssl.py,sha256=UT_dXJ4zA1s9e-UHoW_NLGHQO7iouUNPnJNkkpuw3JI,6213
|
626
626
|
omlish/secrets/pwgen.py,sha256=5k7QMSysUfv9F65TDMdDlrhTIKy6QbMG3KT2HNVmnVg,1712
|
627
627
|
omlish/secrets/pwhash.py,sha256=Jctv3QzcMvVPXJsWA3w3LDUlzmyUDGEWG9sLiJz1xaw,4107
|
628
|
-
omlish/secrets/secrets.py,sha256=
|
628
|
+
omlish/secrets/secrets.py,sha256=h5OdFDgnhXVlPlkOkoE64MOeVzExmtVVYIxJyuQbRec,8009
|
629
629
|
omlish/secrets/ssl.py,sha256=_72xTNP6a1Xw0Pweuow9WK5yveqJ7hmjhala9iMnrAk,152
|
630
630
|
omlish/secrets/subprocesses.py,sha256=ZdShw4jrGDdyQW8mRMgl106-9qpCEq2J6w_x7ruz1wk,1217
|
631
631
|
omlish/secrets/tempssl.py,sha256=X_cAQbeaz-YcH8SzQ0luYTktIGJv4KMpfTD3t9l9Gqk,1879
|
@@ -813,7 +813,7 @@ omlish/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
813
813
|
omlish/text/asdl.py,sha256=AS3irh-sag5pqyH3beJif78PjCbOaFso1NeKq-HXuTs,16867
|
814
814
|
omlish/text/decoding.py,sha256=sQWGckWzRslRHYKpj1SBeoo6AVqXm5HFlWFRARN1QpM,1286
|
815
815
|
omlish/text/delimit.py,sha256=z9uIuWJdbp7M3ku2KQRHo-lzJYZUJCqZTLse1sIUI4Q,4932
|
816
|
-
omlish/text/filecache.py,sha256=
|
816
|
+
omlish/text/filecache.py,sha256=U3sHtHzUYtPeXr8WrSw3eJ1m7zipJf_yu1jExcTcXgY,5411
|
817
817
|
omlish/text/glyphsplit.py,sha256=HI8TWDUaF_tJG5RnIdIjtUH_lYnjYZ7KZBANSxOXGZc,3808
|
818
818
|
omlish/text/indent.py,sha256=LOQgHskHMLVrRC6HLL9uIWay517dpvPEYQK0Igm-wm8,1341
|
819
819
|
omlish/text/linecache.py,sha256=hRYlEhD63ZfA6_ZOTkQIcnON-3W56QMAhcG3vEJqj9M,1858
|
@@ -824,17 +824,17 @@ omlish/text/random.py,sha256=8feS5JE_tSjYlMl-lp0j93kCfzBae9AM2cXlRLebXMA,199
|
|
824
824
|
omlish/text/templating.py,sha256=azhKpvkDR2uby8k3AJ8Y6GpdKVQUb7Xt_cGbDz6dkTM,2454
|
825
825
|
omlish/text/go/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
826
826
|
omlish/text/go/quoting.py,sha256=N9EYdnFdEX_A8fOviH-1w4jwV3XOQ7VU2WsoUNubYVY,9137
|
827
|
-
omlish/typedvalues/__init__.py,sha256=
|
828
|
-
omlish/typedvalues/accessor.py,sha256=
|
829
|
-
omlish/typedvalues/collection.py,sha256=
|
827
|
+
omlish/typedvalues/__init__.py,sha256=p5qfXsxpVeOfyHLUJrlOE2FIDPg3OmGoL_sWDXS8eTU,591
|
828
|
+
omlish/typedvalues/accessor.py,sha256=LOyvNHLpDPyyoITdufsnbk_5QccGsZgDG5-yTjxvD2M,2932
|
829
|
+
omlish/typedvalues/collection.py,sha256=Nc-5mbnZhlwmM7jTCo7oQQzbGxuhOvIW99FYbAFW6GA,5835
|
830
830
|
omlish/typedvalues/generic.py,sha256=byWG_gMXhNelckUwdmOoJE9FKkL71Q4BSi4ZLyy0XZ0,788
|
831
831
|
omlish/typedvalues/holder.py,sha256=4SwRezsmuDDEO5gENGx8kTm30pblF5UktoEAu02i-Gk,1554
|
832
|
-
omlish/typedvalues/marshal.py,sha256=
|
833
|
-
omlish/typedvalues/reflect.py,sha256=
|
834
|
-
omlish/typedvalues/values.py,sha256=
|
835
|
-
omlish-0.0.0.
|
836
|
-
omlish-0.0.0.
|
837
|
-
omlish-0.0.0.
|
838
|
-
omlish-0.0.0.
|
839
|
-
omlish-0.0.0.
|
840
|
-
omlish-0.0.0.
|
832
|
+
omlish/typedvalues/marshal.py,sha256=hWHRLcrGav7lvXJDtb9bNI0ickl4SKPQ6F4BbTpqw3A,4219
|
833
|
+
omlish/typedvalues/reflect.py,sha256=Ih1YgU-srUjsvBn_P7C66f73_VCvcwqE3ffeBnZBgt4,674
|
834
|
+
omlish/typedvalues/values.py,sha256=CEL8xeeneJBe8CrV3NXyZcC6sZ0FR6Cgz2YtaCBug6A,1359
|
835
|
+
omlish-0.0.0.dev293.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
836
|
+
omlish-0.0.0.dev293.dist-info/METADATA,sha256=N7qy2wkob-bA6_hhlB9z7YHoKuuAPsIhawoFZcZLEL4,4316
|
837
|
+
omlish-0.0.0.dev293.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
|
838
|
+
omlish-0.0.0.dev293.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
839
|
+
omlish-0.0.0.dev293.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
840
|
+
omlish-0.0.0.dev293.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|