omlish 0.0.0.dev52__py3-none-any.whl → 0.0.0.dev54__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/.manifests.json +4 -1
- omlish/__about__.py +2 -2
- omlish/dataclasses/__init__.py +9 -5
- omlish/dataclasses/utils.py +4 -0
- omlish/marshal/__init__.py +2 -0
- omlish/marshal/dataclasses.py +30 -7
- omlish/marshal/objects.py +82 -15
- omlish/specs/jmespath/__main__.py +1 -1
- {omlish-0.0.0.dev52.dist-info → omlish-0.0.0.dev54.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev52.dist-info → omlish-0.0.0.dev54.dist-info}/RECORD +14 -14
- {omlish-0.0.0.dev52.dist-info → omlish-0.0.0.dev54.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev52.dist-info → omlish-0.0.0.dev54.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev52.dist-info → omlish-0.0.0.dev54.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev52.dist-info → omlish-0.0.0.dev54.dist-info}/top_level.txt +0 -0
omlish/.manifests.json
CHANGED
omlish/__about__.py
CHANGED
omlish/dataclasses/__init__.py
CHANGED
@@ -89,15 +89,19 @@ from .impl.reflect import ( # noqa
|
|
89
89
|
)
|
90
90
|
|
91
91
|
from .utils import ( # noqa
|
92
|
-
chain_metadata,
|
93
|
-
deep_replace,
|
94
|
-
field_modifier,
|
95
|
-
fields_dict,
|
96
92
|
maybe_post_init,
|
93
|
+
|
97
94
|
opt_repr,
|
95
|
+
truthy_repr,
|
96
|
+
|
97
|
+
fields_dict,
|
98
|
+
field_modifier,
|
99
|
+
chain_metadata,
|
98
100
|
update_class_metadata,
|
99
|
-
update_field_extras,
|
100
101
|
update_field_metadata,
|
102
|
+
update_field_extras,
|
101
103
|
update_fields,
|
102
104
|
update_fields_metadata,
|
105
|
+
|
106
|
+
deep_replace,
|
103
107
|
)
|
omlish/dataclasses/utils.py
CHANGED
omlish/marshal/__init__.py
CHANGED
@@ -59,10 +59,12 @@ from .helpers import ( # noqa
|
|
59
59
|
|
60
60
|
from .objects import ( # noqa
|
61
61
|
FieldInfo,
|
62
|
+
FieldInfos,
|
62
63
|
FieldMetadata,
|
63
64
|
FieldOptions,
|
64
65
|
ObjectMarshaler,
|
65
66
|
ObjectMetadata,
|
67
|
+
ObjectSpecials,
|
66
68
|
ObjectUnmarshaler,
|
67
69
|
SimpleObjectMarshalerFactory,
|
68
70
|
SimpleObjectUnmarshalerFactory,
|
omlish/marshal/dataclasses.py
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
"""
|
2
|
+
TODO:
|
3
|
+
- tangled with objects - Field/ObjectMetadata defined over there but unused
|
4
|
+
"""
|
1
5
|
import typing as ta
|
2
6
|
|
3
7
|
from .. import check
|
@@ -17,6 +21,7 @@ from .naming import translate_name
|
|
17
21
|
from .objects import DEFAULT_FIELD_OPTIONS
|
18
22
|
from .objects import FIELD_OPTIONS_KWARGS
|
19
23
|
from .objects import FieldInfo
|
24
|
+
from .objects import FieldInfos
|
20
25
|
from .objects import FieldMetadata
|
21
26
|
from .objects import FieldOptions
|
22
27
|
from .objects import ObjectMarshaler
|
@@ -38,7 +43,7 @@ def get_dataclass_metadata(ty: type) -> ObjectMetadata:
|
|
38
43
|
def get_field_infos(
|
39
44
|
ty: type,
|
40
45
|
opts: col.TypeMap[Option] = col.TypeMap(),
|
41
|
-
) ->
|
46
|
+
) -> FieldInfos:
|
42
47
|
dc_md = get_dataclass_metadata(ty)
|
43
48
|
dc_naming = dc_md.field_naming or opts.get(Naming)
|
44
49
|
|
@@ -97,6 +102,15 @@ def get_field_infos(
|
|
97
102
|
unmarshal_names=[n + '_' for n in fi_kw['unmarshal_names']],
|
98
103
|
)
|
99
104
|
|
105
|
+
if fo_kw.get('no_marshal'):
|
106
|
+
fi_kw.update(
|
107
|
+
marshal_name=None,
|
108
|
+
)
|
109
|
+
if fo_kw.get('no_unmarshal'):
|
110
|
+
fi_kw.update(
|
111
|
+
unmarshal_names=(),
|
112
|
+
)
|
113
|
+
|
100
114
|
ret.append(
|
101
115
|
FieldInfo(
|
102
116
|
options=FieldOptions(**fo_kw),
|
@@ -104,7 +118,7 @@ def get_field_infos(
|
|
104
118
|
),
|
105
119
|
)
|
106
120
|
|
107
|
-
return ret
|
121
|
+
return FieldInfos(ret)
|
108
122
|
|
109
123
|
|
110
124
|
def _make_field_obj(ctx, ty, obj, fac):
|
@@ -128,15 +142,17 @@ class DataclassMarshalerFactory(MarshalerFactory):
|
|
128
142
|
check.state(not lang.is_abstract_class(ty))
|
129
143
|
|
130
144
|
dc_md = get_dataclass_metadata(ty)
|
145
|
+
fis = get_field_infos(ty, ctx.options)
|
131
146
|
|
132
147
|
fields = [
|
133
148
|
(fi, _make_field_obj(ctx, fi.type, fi.metadata.marshaler, fi.metadata.marshaler_factory))
|
134
|
-
for fi in
|
149
|
+
for fi in fis
|
150
|
+
if fi.name not in dc_md.specials.set
|
135
151
|
]
|
136
152
|
|
137
153
|
return ObjectMarshaler(
|
138
154
|
fields,
|
139
|
-
|
155
|
+
specials=dc_md.specials,
|
140
156
|
)
|
141
157
|
|
142
158
|
|
@@ -151,7 +167,9 @@ class DataclassUnmarshalerFactory(UnmarshalerFactory):
|
|
151
167
|
ty = check.isinstance(rty, type)
|
152
168
|
check.state(dc.is_dataclass(ty))
|
153
169
|
check.state(not lang.is_abstract_class(ty))
|
170
|
+
|
154
171
|
dc_md = get_dataclass_metadata(ty)
|
172
|
+
fis = get_field_infos(ty, ctx.options)
|
155
173
|
|
156
174
|
d: dict[str, tuple[FieldInfo, Unmarshaler]] = {}
|
157
175
|
defaults: dict[str, ta.Any] = {}
|
@@ -164,7 +182,9 @@ class DataclassUnmarshalerFactory(UnmarshalerFactory):
|
|
164
182
|
if fi.options.embed:
|
165
183
|
e_ty = check.isinstance(fi.type, type)
|
166
184
|
check.state(dc.is_dataclass(e_ty))
|
167
|
-
|
185
|
+
e_dc_md = get_dataclass_metadata(e_ty)
|
186
|
+
if e_dc_md.specials.set:
|
187
|
+
raise Exception(f'Embedded fields cannot have specials: {e_ty}')
|
168
188
|
|
169
189
|
embeds[fi.name] = e_ty
|
170
190
|
for e_fi in get_field_infos(e_ty, ctx.options):
|
@@ -188,14 +208,17 @@ class DataclassUnmarshalerFactory(UnmarshalerFactory):
|
|
188
208
|
|
189
209
|
return ret
|
190
210
|
|
191
|
-
for fi in
|
211
|
+
for fi in fis:
|
212
|
+
if fi.name in dc_md.specials.set:
|
213
|
+
continue
|
192
214
|
add_field(fi)
|
193
215
|
|
194
216
|
return ObjectUnmarshaler(
|
195
217
|
ty,
|
196
218
|
d,
|
197
|
-
|
219
|
+
specials=dc_md.specials,
|
198
220
|
defaults=defaults,
|
199
221
|
embeds=embeds,
|
200
222
|
embeds_by_unmarshal_name=embeds_by_unmarshal_name,
|
223
|
+
ignore_unknown=dc_md.ignore_unknown,
|
201
224
|
)
|
omlish/marshal/objects.py
CHANGED
@@ -8,7 +8,9 @@ TODO:
|
|
8
8
|
import collections.abc
|
9
9
|
import typing as ta
|
10
10
|
|
11
|
+
from .. import cached
|
11
12
|
from .. import check
|
13
|
+
from .. import collections as col
|
12
14
|
from .. import dataclasses as dc
|
13
15
|
from .. import lang
|
14
16
|
from .. import reflect as rfl
|
@@ -33,6 +35,9 @@ class FieldOptions:
|
|
33
35
|
|
34
36
|
embed: bool = False
|
35
37
|
|
38
|
+
no_marshal: bool = False
|
39
|
+
no_unmarshal: bool = False
|
40
|
+
|
36
41
|
|
37
42
|
DEFAULT_FIELD_OPTIONS = FieldOptions()
|
38
43
|
FIELD_OPTIONS_KWARGS: frozenset[str] = frozenset(dc.fields_dict(FieldOptions).keys())
|
@@ -66,9 +71,29 @@ class ObjectMetadata:
|
|
66
71
|
field_naming: Naming | None = None
|
67
72
|
|
68
73
|
unknown_field: str | None = None
|
74
|
+
source_field: str | None = None
|
75
|
+
|
76
|
+
@cached.property
|
77
|
+
def specials(self) -> 'ObjectSpecials':
|
78
|
+
return ObjectSpecials(
|
79
|
+
unknown=self.unknown_field,
|
80
|
+
source=self.source_field,
|
81
|
+
)
|
69
82
|
|
70
83
|
field_defaults: FieldMetadata = FieldMetadata()
|
71
84
|
|
85
|
+
ignore_unknown: bool = False
|
86
|
+
|
87
|
+
|
88
|
+
@dc.dataclass(frozen=True, kw_only=True)
|
89
|
+
class ObjectSpecials:
|
90
|
+
unknown: str | None = None
|
91
|
+
source: str | None = None
|
92
|
+
|
93
|
+
@cached.property
|
94
|
+
def set(self) -> frozenset[str]:
|
95
|
+
return frozenset(k for k, v in dc.asdict(self).items() if v is not None)
|
96
|
+
|
72
97
|
|
73
98
|
##
|
74
99
|
|
@@ -78,7 +103,7 @@ class FieldInfo:
|
|
78
103
|
name: str
|
79
104
|
type: ta.Any
|
80
105
|
|
81
|
-
marshal_name: str
|
106
|
+
marshal_name: str | None
|
82
107
|
unmarshal_names: ta.Sequence[str]
|
83
108
|
|
84
109
|
metadata: FieldMetadata = FieldMetadata()
|
@@ -86,6 +111,32 @@ class FieldInfo:
|
|
86
111
|
options: FieldOptions = FieldOptions()
|
87
112
|
|
88
113
|
|
114
|
+
@dc.dataclass(frozen=True)
|
115
|
+
class FieldInfos:
|
116
|
+
lst: ta.Sequence[FieldInfo]
|
117
|
+
|
118
|
+
def __iter__(self) -> ta.Iterator[FieldInfo]:
|
119
|
+
return iter(self.lst)
|
120
|
+
|
121
|
+
def __len__(self) -> int:
|
122
|
+
return len(self.lst)
|
123
|
+
|
124
|
+
@cached.property
|
125
|
+
@dc.init
|
126
|
+
def by_name(self) -> ta.Mapping[str, FieldInfo]:
|
127
|
+
return col.make_map(((fi.name, fi) for fi in self), strict=True)
|
128
|
+
|
129
|
+
@cached.property
|
130
|
+
@dc.init
|
131
|
+
def by_marshal_name(self) -> ta.Mapping[str, FieldInfo]:
|
132
|
+
return col.make_map(((fi.marshal_name, fi) for fi in self if fi.marshal_name is not None), strict=True)
|
133
|
+
|
134
|
+
@cached.property
|
135
|
+
@dc.init
|
136
|
+
def by_unmarshal_name(self) -> ta.Mapping[str, FieldInfo]:
|
137
|
+
return col.make_map(((n, fi) for fi in self for n in fi.unmarshal_names), strict=True)
|
138
|
+
|
139
|
+
|
89
140
|
##
|
90
141
|
|
91
142
|
|
@@ -95,7 +146,7 @@ class ObjectMarshaler(Marshaler):
|
|
95
146
|
|
96
147
|
_: dc.KW_ONLY
|
97
148
|
|
98
|
-
|
149
|
+
specials: ObjectSpecials = ObjectSpecials()
|
99
150
|
|
100
151
|
def marshal(self, ctx: MarshalContext, o: ta.Any) -> Value:
|
101
152
|
ret: dict[str, ta.Any] = {}
|
@@ -105,17 +156,24 @@ class ObjectMarshaler(Marshaler):
|
|
105
156
|
if fi.options.omit_if is not None and fi.options.omit_if(v):
|
106
157
|
continue
|
107
158
|
|
159
|
+
if fi.name in self.specials.set:
|
160
|
+
continue
|
161
|
+
|
162
|
+
mn = fi.marshal_name
|
163
|
+
if mn is None:
|
164
|
+
continue
|
165
|
+
|
108
166
|
mv = m.marshal(ctx, v)
|
109
167
|
|
110
168
|
if fi.options.embed:
|
111
169
|
for ek, ev in check.isinstance(mv, collections.abc.Mapping).items():
|
112
|
-
ret[
|
170
|
+
ret[mn + check.non_empty_str(ek)] = ev # type: ignore
|
113
171
|
|
114
172
|
else:
|
115
|
-
ret[
|
173
|
+
ret[mn] = mv
|
116
174
|
|
117
|
-
if self.
|
118
|
-
if (ukf := getattr(o, self.
|
175
|
+
if self.specials.unknown is not None:
|
176
|
+
if (ukf := getattr(o, self.specials.unknown)):
|
119
177
|
if (dks := set(ret) & set(ukf)):
|
120
178
|
raise KeyError(f'Unknown field keys duplicate fields: {dks!r}')
|
121
179
|
|
@@ -130,7 +188,7 @@ class SimpleObjectMarshalerFactory(MarshalerFactory):
|
|
130
188
|
|
131
189
|
_: dc.KW_ONLY
|
132
190
|
|
133
|
-
|
191
|
+
specials: ObjectSpecials = ObjectSpecials()
|
134
192
|
|
135
193
|
def guard(self, ctx: MarshalContext, rty: rfl.Type) -> bool:
|
136
194
|
return isinstance(rty, type) and rty in self.dct
|
@@ -138,7 +196,7 @@ class SimpleObjectMarshalerFactory(MarshalerFactory):
|
|
138
196
|
def fn(self, ctx: MarshalContext, rty: rfl.Type) -> Marshaler:
|
139
197
|
ty = check.isinstance(rty, type)
|
140
198
|
|
141
|
-
flds = self.dct[ty]
|
199
|
+
flds = FieldInfos(self.dct[ty])
|
142
200
|
|
143
201
|
fields = [
|
144
202
|
(fi, ctx.make(fi.type))
|
@@ -147,7 +205,7 @@ class SimpleObjectMarshalerFactory(MarshalerFactory):
|
|
147
205
|
|
148
206
|
return ObjectMarshaler(
|
149
207
|
fields,
|
150
|
-
|
208
|
+
specials=self.specials,
|
151
209
|
)
|
152
210
|
|
153
211
|
|
@@ -161,13 +219,15 @@ class ObjectUnmarshaler(Unmarshaler):
|
|
161
219
|
|
162
220
|
_: dc.KW_ONLY
|
163
221
|
|
164
|
-
|
222
|
+
specials: ObjectSpecials = ObjectSpecials()
|
165
223
|
|
166
224
|
defaults: ta.Mapping[str, ta.Any] | None = None
|
167
225
|
|
168
226
|
embeds: ta.Mapping[str, type] | None = None
|
169
227
|
embeds_by_unmarshal_name: ta.Mapping[str, tuple[str, str]] | None = None
|
170
228
|
|
229
|
+
ignore_unknown: bool = False
|
230
|
+
|
171
231
|
def unmarshal(self, ctx: UnmarshalContext, v: Value) -> ta.Any:
|
172
232
|
ma = check.isinstance(v, collections.abc.Mapping)
|
173
233
|
|
@@ -177,8 +237,11 @@ class ObjectUnmarshaler(Unmarshaler):
|
|
177
237
|
|
178
238
|
ekws: dict[str, dict[str, ta.Any]] = {en: {} for en in self.embeds or ()}
|
179
239
|
|
180
|
-
if self.
|
181
|
-
kw[self.
|
240
|
+
if self.specials.source is not None:
|
241
|
+
kw[self.specials.source] = v
|
242
|
+
|
243
|
+
if self.specials.unknown is not None:
|
244
|
+
kw[self.specials.unknown] = ukf = {}
|
182
245
|
|
183
246
|
for k, mv in ma.items():
|
184
247
|
ks = check.isinstance(k, str)
|
@@ -190,6 +253,10 @@ class ObjectUnmarshaler(Unmarshaler):
|
|
190
253
|
if ukf is not None:
|
191
254
|
ukf[ks] = mv # FIXME: unmarshal?
|
192
255
|
continue
|
256
|
+
|
257
|
+
if self.ignore_unknown:
|
258
|
+
continue
|
259
|
+
|
193
260
|
raise
|
194
261
|
|
195
262
|
if self.embeds_by_unmarshal_name and (en := self.embeds_by_unmarshal_name.get(ks)):
|
@@ -220,7 +287,7 @@ class SimpleObjectUnmarshalerFactory(UnmarshalerFactory):
|
|
220
287
|
|
221
288
|
_: dc.KW_ONLY
|
222
289
|
|
223
|
-
|
290
|
+
specials: ObjectSpecials = ObjectSpecials()
|
224
291
|
|
225
292
|
def guard(self, ctx: UnmarshalContext, rty: rfl.Type) -> bool:
|
226
293
|
return isinstance(rty, type) and rty in self.dct
|
@@ -228,7 +295,7 @@ class SimpleObjectUnmarshalerFactory(UnmarshalerFactory):
|
|
228
295
|
def fn(self, ctx: UnmarshalContext, rty: rfl.Type) -> Unmarshaler:
|
229
296
|
ty = check.isinstance(rty, type)
|
230
297
|
|
231
|
-
flds = self.dct[ty]
|
298
|
+
flds = FieldInfos(self.dct[ty])
|
232
299
|
|
233
300
|
fields_by_unmarshal_name = {
|
234
301
|
n: (fi, ctx.make(fi.type))
|
@@ -245,6 +312,6 @@ class SimpleObjectUnmarshalerFactory(UnmarshalerFactory):
|
|
245
312
|
return ObjectUnmarshaler(
|
246
313
|
ty,
|
247
314
|
fields_by_unmarshal_name,
|
248
|
-
|
315
|
+
specials=self.specials,
|
249
316
|
defaults=defaults,
|
250
317
|
)
|
@@ -1,5 +1,5 @@
|
|
1
|
-
omlish/.manifests.json,sha256=
|
2
|
-
omlish/__about__.py,sha256=
|
1
|
+
omlish/.manifests.json,sha256=Xj-NnBpowZX7faAyhZ2j7g4fPFFw9Da7ITTC8AojNlM,1135
|
2
|
+
omlish/__about__.py,sha256=jXxQ0jEycovANI4RvMQ2GH8aUiU9NfxKTX5ghcnxxJg,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
|
@@ -64,8 +64,8 @@ omlish/configs/__init__.py,sha256=3uh09ezodTwkMI0nRmAMP0eEuJ_0VdF-LYyNmPjHiCE,77
|
|
64
64
|
omlish/configs/classes.py,sha256=GLbB8xKjHjjoUQRCUQm3nEjM8z1qNTx9gPV7ODSt5dg,1317
|
65
65
|
omlish/configs/flattening.py,sha256=AOlRpBHm449MxwMp3CiIRGunStOC1DUNs1f3CLou0wc,4731
|
66
66
|
omlish/configs/strings.py,sha256=0brx1duL85r1GpfbNvbHcSvH4jWzutwuvMFXda9NeI0,2651
|
67
|
-
omlish/dataclasses/__init__.py,sha256=
|
68
|
-
omlish/dataclasses/utils.py,sha256=
|
67
|
+
omlish/dataclasses/__init__.py,sha256=k358fyF6LWsiWfd7u1d4CHDn2F4wQZCb5hXtSSc1Hck,1374
|
68
|
+
omlish/dataclasses/utils.py,sha256=MzEeF8W6Yr5BjOVJOM0Au4YIMGAarXWxT0C6gzlhmfU,3425
|
69
69
|
omlish/dataclasses/impl/LICENSE,sha256=Oy-B_iHRgcSZxZolbI4ZaEVdZonSaaqFNzv7avQdo78,13936
|
70
70
|
omlish/dataclasses/impl/__init__.py,sha256=0hgOm3_u3yimjEkB-9fRMqX9rAW6kQC5t8XL0lpvffQ,410
|
71
71
|
omlish/dataclasses/impl/api.py,sha256=p7W519_EnDAWlkOVS-4BpP4SxadWIiUzC3RldSoB28o,6431
|
@@ -219,11 +219,11 @@ 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=Aiux91y66MpEy4NiecWgASK8RB8vGXpc4GZ4HgbdwCg,2049
|
223
223
|
omlish/marshal/any.py,sha256=e82OyYK3Emm1P1ClnsnxP7fIWC2iNVyW0H5nK4mLmWM,779
|
224
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=G6Uh8t4vvNBAx2BhzH8ksj8Hq_bo6npFphQhyF298VU,6892
|
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
|
@@ -236,7 +236,7 @@ omlish/marshal/mappings.py,sha256=zhLtyot7tzQtBNj7C4RBxjMELxA5r2q2Mth8Br7xkFs,28
|
|
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=72xf6v-QBGtkSyoAoGYReqyp2uWnPNhZiBDnzzruEKI,8437
|
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
|
@@ -265,7 +265,7 @@ omlish/secrets/subprocesses.py,sha256=EcnKlHHtnUMHGrBWXDfu8tv28wlgZx4P4GOiuPW9Vo
|
|
265
265
|
omlish/specs/__init__.py,sha256=Xl4fT1o1MlcEIAjMt5EifgMuO4UBSa9Suj5NE9eMX1A,87
|
266
266
|
omlish/specs/jmespath/LICENSE,sha256=IH-ZZlZkS8XMkf_ubNVD1aYHQ2l_wd0tmHtXrCcYpRU,1113
|
267
267
|
omlish/specs/jmespath/__init__.py,sha256=Lz8JO0vP-pwrBtq9Y94y6LrOA7o1u1kCdPmMf_4lJBY,1918
|
268
|
-
omlish/specs/jmespath/__main__.py,sha256=
|
268
|
+
omlish/specs/jmespath/__main__.py,sha256=wIXm6bs08etNG_GZlN2rBkADPb0rKfL2HSkm8spnpxw,200
|
269
269
|
omlish/specs/jmespath/ast.py,sha256=TP3oSAD5CU7oAawRVEY6UZLSD6CQOci8LQKWhiTtBM4,2744
|
270
270
|
omlish/specs/jmespath/cli.py,sha256=3qHhwVC80qT7Z9JVC0nNL5YvfTxkjirnH5LAoBfVwcM,1748
|
271
271
|
omlish/specs/jmespath/exceptions.py,sha256=8txtnzFYqoL_2YfMnlAFAcrJrZFehLeUsukYSq_6i1w,4373
|
@@ -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.dev54.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
343
|
+
omlish-0.0.0.dev54.dist-info/METADATA,sha256=P_Xnef5RSPDXiE_RV9RU14DnZ8lhusWAl-ARb32gqGk,4167
|
344
|
+
omlish-0.0.0.dev54.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
345
|
+
omlish-0.0.0.dev54.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
346
|
+
omlish-0.0.0.dev54.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
347
|
+
omlish-0.0.0.dev54.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|