omlish 0.0.0.dev214__py3-none-any.whl → 0.0.0.dev216__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/asyncs/asyncio/all.py +1 -1
- omlish/asyncs/asyncio/asyncio.py +2 -2
- omlish/lite/marshal.py +79 -12
- omlish/logs/standard.py +1 -1
- {omlish-0.0.0.dev214.dist-info → omlish-0.0.0.dev216.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev214.dist-info → omlish-0.0.0.dev216.dist-info}/RECORD +11 -11
- {omlish-0.0.0.dev214.dist-info → omlish-0.0.0.dev216.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev214.dist-info → omlish-0.0.0.dev216.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev214.dist-info → omlish-0.0.0.dev216.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev214.dist-info → omlish-0.0.0.dev216.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
omlish/asyncs/asyncio/all.py
CHANGED
omlish/asyncs/asyncio/asyncio.py
CHANGED
@@ -24,7 +24,7 @@ def asyncio_once(fn: CallableT) -> CallableT:
|
|
24
24
|
return ta.cast(CallableT, inner)
|
25
25
|
|
26
26
|
|
27
|
-
def
|
27
|
+
def drain_asyncio_tasks(loop=None):
|
28
28
|
if loop is None:
|
29
29
|
loop = asyncio.get_running_loop()
|
30
30
|
|
@@ -39,7 +39,7 @@ def draining_asyncio_tasks() -> ta.Iterator[None]:
|
|
39
39
|
yield
|
40
40
|
finally:
|
41
41
|
if loop is not None:
|
42
|
-
|
42
|
+
drain_asyncio_tasks(loop) # noqa
|
43
43
|
|
44
44
|
|
45
45
|
async def asyncio_wait_concurrent(
|
omlish/lite/marshal.py
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
TODO:
|
3
3
|
- pickle stdlib objs? have to pin to 3.8 pickle protocol, will be cross-version
|
4
4
|
- literals
|
5
|
+
- Options.sequence_cls = list, mapping_cls = dict, ... - def with_mutable_containers() -> Options
|
5
6
|
"""
|
6
7
|
# ruff: noqa: UP006 UP007
|
7
8
|
import abc
|
@@ -183,21 +184,55 @@ class IterableObjMarshaler(ObjMarshaler):
|
|
183
184
|
@dc.dataclass(frozen=True)
|
184
185
|
class FieldsObjMarshaler(ObjMarshaler):
|
185
186
|
ty: type
|
186
|
-
|
187
|
+
|
188
|
+
@dc.dataclass(frozen=True)
|
189
|
+
class Field:
|
190
|
+
att: str
|
191
|
+
key: str
|
192
|
+
m: ObjMarshaler
|
193
|
+
|
194
|
+
omit_if_none: bool = False
|
195
|
+
|
196
|
+
fs: ta.Sequence[Field]
|
197
|
+
|
187
198
|
non_strict: bool = False
|
188
199
|
|
200
|
+
#
|
201
|
+
|
202
|
+
_fs_by_att: ta.ClassVar[ta.Mapping[str, Field]]
|
203
|
+
_fs_by_key: ta.ClassVar[ta.Mapping[str, Field]]
|
204
|
+
|
205
|
+
def __post_init__(self) -> None:
|
206
|
+
fs_by_att: dict = {}
|
207
|
+
fs_by_key: dict = {}
|
208
|
+
for f in self.fs:
|
209
|
+
check.not_in(check.non_empty_str(f.att), fs_by_att)
|
210
|
+
check.not_in(check.non_empty_str(f.key), fs_by_key)
|
211
|
+
fs_by_att[f.att] = f
|
212
|
+
fs_by_key[f.key] = f
|
213
|
+
self.__dict__['_fs_by_att'] = fs_by_att
|
214
|
+
self.__dict__['_fs_by_key'] = fs_by_key
|
215
|
+
|
216
|
+
#
|
217
|
+
|
189
218
|
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
219
|
+
d = {}
|
220
|
+
for f in self.fs:
|
221
|
+
mv = f.m.marshal(getattr(o, f.att), ctx)
|
222
|
+
if mv is None and f.omit_if_none:
|
223
|
+
continue
|
224
|
+
d[f.key] = mv
|
225
|
+
return d
|
194
226
|
|
195
227
|
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
228
|
+
kw = {}
|
229
|
+
for k, v in o.items():
|
230
|
+
if (f := self._fs_by_key.get(k)) is None:
|
231
|
+
if not (self.non_strict or ctx.options.non_strict_fields):
|
232
|
+
raise KeyError(k)
|
233
|
+
continue
|
234
|
+
kw[f.att] = f.m.unmarshal(v, ctx)
|
235
|
+
return self.ty(**kw)
|
201
236
|
|
202
237
|
|
203
238
|
@dc.dataclass(frozen=True)
|
@@ -332,6 +367,22 @@ def register_single_field_type_obj_marshaler(fld, ty=None):
|
|
332
367
|
##
|
333
368
|
|
334
369
|
|
370
|
+
class ObjMarshalerFieldMetadata:
|
371
|
+
def __new__(cls, *args, **kwargs): # noqa
|
372
|
+
raise TypeError
|
373
|
+
|
374
|
+
|
375
|
+
class OBJ_MARSHALER_FIELD_KEY(ObjMarshalerFieldMetadata): # noqa
|
376
|
+
pass
|
377
|
+
|
378
|
+
|
379
|
+
class OBJ_MARSHALER_OMIT_IF_NONE(ObjMarshalerFieldMetadata): # noqa
|
380
|
+
pass
|
381
|
+
|
382
|
+
|
383
|
+
##
|
384
|
+
|
385
|
+
|
335
386
|
class ObjMarshalerManager:
|
336
387
|
def __init__(
|
337
388
|
self,
|
@@ -391,14 +442,30 @@ class ObjMarshalerManager:
|
|
391
442
|
if dc.is_dataclass(ty):
|
392
443
|
return FieldsObjMarshaler(
|
393
444
|
ty,
|
394
|
-
|
445
|
+
[
|
446
|
+
FieldsObjMarshaler.Field(
|
447
|
+
att=f.name,
|
448
|
+
key=check.non_empty_str(fk),
|
449
|
+
m=rec(f.type),
|
450
|
+
omit_if_none=check.isinstance(f.metadata.get(OBJ_MARSHALER_OMIT_IF_NONE, False), bool),
|
451
|
+
)
|
452
|
+
for f in dc.fields(ty)
|
453
|
+
if (fk := f.metadata.get(OBJ_MARSHALER_FIELD_KEY, f.name)) is not None
|
454
|
+
],
|
395
455
|
non_strict=non_strict_fields,
|
396
456
|
)
|
397
457
|
|
398
458
|
if issubclass(ty, tuple) and hasattr(ty, '_fields'):
|
399
459
|
return FieldsObjMarshaler(
|
400
460
|
ty,
|
401
|
-
|
461
|
+
[
|
462
|
+
FieldsObjMarshaler.Field(
|
463
|
+
att=p.name,
|
464
|
+
key=p.name,
|
465
|
+
m=rec(p.annotation),
|
466
|
+
)
|
467
|
+
for p in inspect.signature(ty).parameters.values()
|
468
|
+
],
|
402
469
|
non_strict=non_strict_fields,
|
403
470
|
)
|
404
471
|
|
omlish/logs/standard.py
CHANGED
@@ -22,7 +22,7 @@ from .proxy import ProxyLogHandler
|
|
22
22
|
|
23
23
|
STANDARD_LOG_FORMAT_PARTS = [
|
24
24
|
('asctime', '%(asctime)-15s'),
|
25
|
-
('process', 'pid=%(process)
|
25
|
+
('process', 'pid=%(process)s'),
|
26
26
|
('thread', 'tid=%(thread)x'),
|
27
27
|
('levelname', '%(levelname)s'),
|
28
28
|
('name', '%(name)s'),
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=YGmAnUBszmosQQ_7Hh2wwtDiYdYZ4unNKYzOtALuels,7968
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=PjS1s-BEA6BW1AWodoo9aQyr9k3shf8Uan7UcjNCYrU,3380
|
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
|
@@ -93,8 +93,8 @@ omlish/asyncs/flavors.py,sha256=1mNxGNRVmjUHzA13K5ht8vdJv4CLEmzYTQ6BZXr1520,4866
|
|
93
93
|
omlish/asyncs/trio.py,sha256=fmZ5b_lKdVV8NQ3euCUutWgnkqTFzSnOjvJSA_jvmrE,367
|
94
94
|
omlish/asyncs/trio_asyncio.py,sha256=oqdOHy0slj9PjVxaDf3gJkq9AAgg7wYZbB469jOftVw,1327
|
95
95
|
omlish/asyncs/asyncio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
96
|
-
omlish/asyncs/asyncio/all.py,sha256=
|
97
|
-
omlish/asyncs/asyncio/asyncio.py,sha256=
|
96
|
+
omlish/asyncs/asyncio/all.py,sha256=GR6BJOSS5W82hc7ZJF7Er_2NZ-94nTXZh71aVLJNa54,123
|
97
|
+
omlish/asyncs/asyncio/asyncio.py,sha256=3BMhVIF-QTjsFRGDtNYlRbBqKPCA3_AwJsjJoIWdM8k,1783
|
98
98
|
omlish/asyncs/asyncio/channels.py,sha256=ZbmsEmdK1fV96liHdcVpRqA2dAMkXJt4Q3rFAg3YOIw,1074
|
99
99
|
omlish/asyncs/asyncio/streams.py,sha256=Uc9PCWSfBqrK2kdVtfjjQU1eaYTWYmZm8QISDj2xiuw,1004
|
100
100
|
omlish/asyncs/asyncio/subprocesses.py,sha256=XlIWwSxpVB7sMVc75-f7dI6r08JkdipNFRWXUKS8zAw,6960
|
@@ -415,7 +415,7 @@ omlish/lite/dataclasses.py,sha256=M6UD4VwGo0Ky7RNzKWbO0IOy7iBZVCIbTiC6EYbFnX8,10
|
|
415
415
|
omlish/lite/inject.py,sha256=qBUftFeXMiRgANYbNS2e7TePMYyFAcuLgsJiLyMTW5o,28769
|
416
416
|
omlish/lite/json.py,sha256=7-02Ny4fq-6YAu5ynvqoijhuYXWpLmfCI19GUeZnb1c,740
|
417
417
|
omlish/lite/logs.py,sha256=CWFG0NKGhqNeEgryF5atN2gkPYbUdTINEw_s1phbINM,51
|
418
|
-
omlish/lite/marshal.py,sha256=
|
418
|
+
omlish/lite/marshal.py,sha256=4E78R-XzncjCClHsOdE-g1ocs5mhA91oFy1LYkaEjHs,18042
|
419
419
|
omlish/lite/maybes.py,sha256=7OlHJ8Q2r4wQ-aRbZSlJY7x0e8gDvufFdlohGEIJ3P4,833
|
420
420
|
omlish/lite/pycharm.py,sha256=pUOJevrPClSqTCEOkQBO11LKX2003tfDcp18a03QFrc,1163
|
421
421
|
omlish/lite/reflect.py,sha256=pzOY2PPuHH0omdtglkN6DheXDrGopdL3PtTJnejyLFU,2189
|
@@ -435,7 +435,7 @@ omlish/logs/handlers.py,sha256=zgSnKQA5q9Fu7T0Nkd7twog9H1Wg9-bDCzz4_F1TOBo,319
|
|
435
435
|
omlish/logs/json.py,sha256=zyqMWpZY3lk4WRk4wgmataBomGX9S3iDsydiM1sS-lI,1366
|
436
436
|
omlish/logs/noisy.py,sha256=Ubc-eTH6ZbGYsLfUUi69JAotwuUwzb-SJBeGo_0dIZI,348
|
437
437
|
omlish/logs/proxy.py,sha256=A-ROPUUAlF397qTbEqhel6YhQMstNuXL3Xmts7w9dAo,2347
|
438
|
-
omlish/logs/standard.py,sha256=
|
438
|
+
omlish/logs/standard.py,sha256=FbKdF2Z4Na5i2TNwKn0avLJXyICe2JKsPufjvKCHGn0,3162
|
439
439
|
omlish/logs/utils.py,sha256=mzHrZ9ji75p5A8qR29eUr05CBAHMb8J753MSkID_VaQ,393
|
440
440
|
omlish/manifests/__init__.py,sha256=P2B0dpT8D7l5lJwRGPA92IcQj6oeXfd90X5-q9BJrKg,51
|
441
441
|
omlish/manifests/load.py,sha256=LrWAvBfdzDkFdLuVwfw2RwFvLjxx-rvfkpU9eBsWeIc,5626
|
@@ -626,9 +626,9 @@ omlish/text/indent.py,sha256=YjtJEBYWuk8--b9JU_T6q4yxV85_TR7VEVr5ViRCFwk,1336
|
|
626
626
|
omlish/text/minja.py,sha256=jZC-fp3Xuhx48ppqsf2Sf1pHbC0t8XBB7UpUUoOk2Qw,5751
|
627
627
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
628
628
|
omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
|
629
|
-
omlish-0.0.0.
|
630
|
-
omlish-0.0.0.
|
631
|
-
omlish-0.0.0.
|
632
|
-
omlish-0.0.0.
|
633
|
-
omlish-0.0.0.
|
634
|
-
omlish-0.0.0.
|
629
|
+
omlish-0.0.0.dev216.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
630
|
+
omlish-0.0.0.dev216.dist-info/METADATA,sha256=6BbpSJ9xCRfRy70TaSmBaJwjRO0Zip85jN984Y1F2qo,4176
|
631
|
+
omlish-0.0.0.dev216.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
632
|
+
omlish-0.0.0.dev216.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
633
|
+
omlish-0.0.0.dev216.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
634
|
+
omlish-0.0.0.dev216.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|