omlish 0.0.0.dev158__py3-none-any.whl → 0.0.0.dev160__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/marshal.py +20 -9
- omlish/lite/reflect.py +4 -0
- omlish/lite/runtime.py +4 -4
- omlish/logs/all.py +1 -1
- omlish/logs/standard.py +7 -5
- {omlish-0.0.0.dev158.dist-info → omlish-0.0.0.dev160.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev158.dist-info → omlish-0.0.0.dev160.dist-info}/RECORD +12 -12
- {omlish-0.0.0.dev158.dist-info → omlish-0.0.0.dev160.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev158.dist-info → omlish-0.0.0.dev160.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev158.dist-info → omlish-0.0.0.dev160.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev158.dist-info → omlish-0.0.0.dev160.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
omlish/lite/marshal.py
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
"""
|
2
2
|
TODO:
|
3
3
|
- pickle stdlib objs? have to pin to 3.8 pickle protocol, will be cross-version
|
4
|
-
- namedtuple
|
5
4
|
- literals
|
6
|
-
- newtypes?
|
7
5
|
"""
|
8
6
|
# ruff: noqa: UP006 UP007
|
9
7
|
import abc
|
@@ -15,6 +13,7 @@ import decimal
|
|
15
13
|
import enum
|
16
14
|
import fractions
|
17
15
|
import functools
|
16
|
+
import inspect
|
18
17
|
import threading
|
19
18
|
import typing as ta
|
20
19
|
import uuid
|
@@ -22,8 +21,10 @@ import weakref # noqa
|
|
22
21
|
|
23
22
|
from .check import check
|
24
23
|
from .reflect import deep_subclasses
|
24
|
+
from .reflect import get_new_type_supertype
|
25
25
|
from .reflect import get_optional_alias_arg
|
26
26
|
from .reflect import is_generic_alias
|
27
|
+
from .reflect import is_new_type
|
27
28
|
from .reflect import is_union_alias
|
28
29
|
from .strings import snake_case
|
29
30
|
|
@@ -37,7 +38,7 @@ T = ta.TypeVar('T')
|
|
37
38
|
@dc.dataclass(frozen=True)
|
38
39
|
class ObjMarshalOptions:
|
39
40
|
raw_bytes: bool = False
|
40
|
-
|
41
|
+
non_strict_fields: bool = False
|
41
42
|
|
42
43
|
|
43
44
|
class ObjMarshaler(abc.ABC):
|
@@ -166,10 +167,10 @@ class IterableObjMarshaler(ObjMarshaler):
|
|
166
167
|
|
167
168
|
|
168
169
|
@dc.dataclass(frozen=True)
|
169
|
-
class
|
170
|
+
class FieldsObjMarshaler(ObjMarshaler):
|
170
171
|
ty: type
|
171
172
|
fs: ta.Mapping[str, ObjMarshaler]
|
172
|
-
|
173
|
+
non_strict: bool = False
|
173
174
|
|
174
175
|
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
175
176
|
return {
|
@@ -181,7 +182,7 @@ class DataclassObjMarshaler(ObjMarshaler):
|
|
181
182
|
return self.ty(**{
|
182
183
|
k: self.fs[k].unmarshal(v, ctx)
|
183
184
|
for k, v in o.items()
|
184
|
-
if not (self.
|
185
|
+
if not (self.non_strict or ctx.options.non_strict_fields) or k in self.fs
|
185
186
|
})
|
186
187
|
|
187
188
|
|
@@ -313,7 +314,7 @@ class ObjMarshalerManager:
|
|
313
314
|
ty: ta.Any,
|
314
315
|
rec: ta.Callable[[ta.Any], ObjMarshaler],
|
315
316
|
*,
|
316
|
-
|
317
|
+
non_strict_fields: bool = False,
|
317
318
|
) -> ObjMarshaler:
|
318
319
|
if isinstance(ty, type):
|
319
320
|
if abc.ABC in ty.__bases__:
|
@@ -335,12 +336,22 @@ class ObjMarshalerManager:
|
|
335
336
|
return EnumObjMarshaler(ty)
|
336
337
|
|
337
338
|
if dc.is_dataclass(ty):
|
338
|
-
return
|
339
|
+
return FieldsObjMarshaler(
|
339
340
|
ty,
|
340
341
|
{f.name: rec(f.type) for f in dc.fields(ty)},
|
341
|
-
|
342
|
+
non_strict=non_strict_fields,
|
342
343
|
)
|
343
344
|
|
345
|
+
if issubclass(ty, tuple) and hasattr(ty, '_fields'):
|
346
|
+
return FieldsObjMarshaler(
|
347
|
+
ty,
|
348
|
+
{p.name: rec(p.annotation) for p in inspect.signature(ty).parameters.values()},
|
349
|
+
non_strict=non_strict_fields,
|
350
|
+
)
|
351
|
+
|
352
|
+
if is_new_type(ty):
|
353
|
+
return rec(get_new_type_supertype(ty))
|
354
|
+
|
344
355
|
if is_generic_alias(ty):
|
345
356
|
try:
|
346
357
|
mt = self._generic_mapping_types[ta.get_origin(ty)]
|
omlish/lite/reflect.py
CHANGED
@@ -46,6 +46,10 @@ def is_new_type(spec: ta.Any) -> bool:
|
|
46
46
|
return isinstance(spec, types.FunctionType) and spec.__code__ is ta.NewType.__code__.co_consts[1] # type: ignore # noqa
|
47
47
|
|
48
48
|
|
49
|
+
def get_new_type_supertype(spec: ta.Any) -> ta.Any:
|
50
|
+
return spec.__supertype__
|
51
|
+
|
52
|
+
|
49
53
|
def deep_subclasses(cls: ta.Type[T]) -> ta.Iterator[ta.Type[T]]:
|
50
54
|
seen = set()
|
51
55
|
todo = list(reversed(cls.__subclasses__()))
|
omlish/lite/runtime.py
CHANGED
@@ -9,9 +9,9 @@ def is_debugger_attached() -> bool:
|
|
9
9
|
return any(frame[1].endswith('pydevd.py') for frame in inspect.stack())
|
10
10
|
|
11
11
|
|
12
|
-
|
12
|
+
LITE_REQUIRED_PYTHON_VERSION = (3, 8)
|
13
13
|
|
14
14
|
|
15
|
-
def
|
16
|
-
if sys.version_info <
|
17
|
-
raise OSError(f'Requires python {
|
15
|
+
def check_lite_runtime_version() -> None:
|
16
|
+
if sys.version_info < LITE_REQUIRED_PYTHON_VERSION:
|
17
|
+
raise OSError(f'Requires python {LITE_REQUIRED_PYTHON_VERSION}, got {sys.version_info} from {sys.executable}') # noqa
|
omlish/logs/all.py
CHANGED
omlish/logs/standard.py
CHANGED
@@ -5,6 +5,7 @@ TODO:
|
|
5
5
|
- structured
|
6
6
|
- prefixed
|
7
7
|
- debug
|
8
|
+
- optional noisy? noisy will never be lite - some kinda configure_standard callback mechanism?
|
8
9
|
"""
|
9
10
|
import contextlib
|
10
11
|
import datetime
|
@@ -49,8 +50,9 @@ class StandardLogFormatter(logging.Formatter):
|
|
49
50
|
##
|
50
51
|
|
51
52
|
|
52
|
-
class
|
53
|
-
|
53
|
+
class StandardConfiguredLogHandler(ProxyLogHandler):
|
54
|
+
def __init_subclass__(cls, **kwargs):
|
55
|
+
raise TypeError('This class serves only as a marker and should not be subclassed.')
|
54
56
|
|
55
57
|
|
56
58
|
##
|
@@ -81,7 +83,7 @@ def configure_standard_logging(
|
|
81
83
|
target: ta.Optional[logging.Logger] = None,
|
82
84
|
force: bool = False,
|
83
85
|
handler_factory: ta.Optional[ta.Callable[[], logging.Handler]] = None,
|
84
|
-
) -> ta.Optional[
|
86
|
+
) -> ta.Optional[StandardConfiguredLogHandler]:
|
85
87
|
with _locking_logging_module_lock():
|
86
88
|
if target is None:
|
87
89
|
target = logging.root
|
@@ -89,7 +91,7 @@ def configure_standard_logging(
|
|
89
91
|
#
|
90
92
|
|
91
93
|
if not force:
|
92
|
-
if any(isinstance(h,
|
94
|
+
if any(isinstance(h, StandardConfiguredLogHandler) for h in list(target.handlers)):
|
93
95
|
return None
|
94
96
|
|
95
97
|
#
|
@@ -123,4 +125,4 @@ def configure_standard_logging(
|
|
123
125
|
|
124
126
|
#
|
125
127
|
|
126
|
-
return
|
128
|
+
return StandardConfiguredLogHandler(handler)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=RX24SRc6DCEg77PUVnaXOKCWa5TF_c9RQJdGIf7gl9c,1135
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=YIDkVlJyMJUrEtEf00ng1bGGafE3fLQ7pZzCbPUNOjE,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
|
@@ -342,12 +342,12 @@ omlish/lite/contextmanagers.py,sha256=m9JO--p7L7mSl4cycXysH-1AO27weDKjP3DZG61cww
|
|
342
342
|
omlish/lite/inject.py,sha256=729Qi0TLbQgBtkvx97q1EUMe73VFYA1hu4woXkOTcwM,23572
|
343
343
|
omlish/lite/json.py,sha256=7-02Ny4fq-6YAu5ynvqoijhuYXWpLmfCI19GUeZnb1c,740
|
344
344
|
omlish/lite/logs.py,sha256=CWFG0NKGhqNeEgryF5atN2gkPYbUdTINEw_s1phbINM,51
|
345
|
-
omlish/lite/marshal.py,sha256=
|
345
|
+
omlish/lite/marshal.py,sha256=ldoZs_yiQIUpOjBviV9f4mwm7hSZy0hRLXrvQA-6POU,14257
|
346
346
|
omlish/lite/maybes.py,sha256=7OlHJ8Q2r4wQ-aRbZSlJY7x0e8gDvufFdlohGEIJ3P4,833
|
347
347
|
omlish/lite/pycharm.py,sha256=pUOJevrPClSqTCEOkQBO11LKX2003tfDcp18a03QFrc,1163
|
348
|
-
omlish/lite/reflect.py,sha256=
|
348
|
+
omlish/lite/reflect.py,sha256=L5_9gNp_BmAZ3l9PVezDmiXFg_6BOHbfQNB98tUULW0,1765
|
349
349
|
omlish/lite/resources.py,sha256=YNSmX1Ohck1aoWRs55a-o5ChVbFJIQhtbqE-XwF55Oc,326
|
350
|
-
omlish/lite/runtime.py,sha256=
|
350
|
+
omlish/lite/runtime.py,sha256=XQo408zxTdJdppUZqOWHyeUR50VlCpNIExNGHz4U6O4,459
|
351
351
|
omlish/lite/secrets.py,sha256=3Mz3V2jf__XU9qNHcH56sBSw95L3U2UPL24bjvobG0c,816
|
352
352
|
omlish/lite/socket.py,sha256=7OYgkXTcQv0wq7TQuLnl9y6dJA1ZT6Vbc1JH59QlxgY,1792
|
353
353
|
omlish/lite/socketserver.py,sha256=doTXIctu_6c8XneFtzPFVG_Wq6xVmA3p9ymut8IvBoU,1586
|
@@ -355,7 +355,7 @@ omlish/lite/strings.py,sha256=QURcE4-1pKVW8eT_5VCJpXaHDWR2dW2pYOChTJnZDiQ,1504
|
|
355
355
|
omlish/lite/typing.py,sha256=U3-JaEnkDSYxK4tsu_MzUn3RP6qALBe5FXQXpD-licE,1090
|
356
356
|
omlish/logs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
357
357
|
omlish/logs/abc.py,sha256=ho4ABKYMKX-V7g4sp1BByuOLzslYzLlQ0MESmjEpT-o,8005
|
358
|
-
omlish/logs/all.py,sha256=
|
358
|
+
omlish/logs/all.py,sha256=4Z6cNB0E1xbX0IOQWZEWLA0Jw-yyjhXa3PD_Nvfewu8,556
|
359
359
|
omlish/logs/color.py,sha256=02feYPZm4A7qHeBABpiar2J2E6tf-vtw1pOQAsJs_1c,668
|
360
360
|
omlish/logs/configs.py,sha256=XOc8rWxfPpPMxJESVD2mLCUoLtbQnGnZwvYhhqe7DD8,772
|
361
361
|
omlish/logs/filters.py,sha256=2noFRyBez3y519fpfsDSt1vo8wX-85b8sMXZi5o_xyE,208
|
@@ -363,7 +363,7 @@ omlish/logs/handlers.py,sha256=zgSnKQA5q9Fu7T0Nkd7twog9H1Wg9-bDCzz4_F1TOBo,319
|
|
363
363
|
omlish/logs/json.py,sha256=zyqMWpZY3lk4WRk4wgmataBomGX9S3iDsydiM1sS-lI,1366
|
364
364
|
omlish/logs/noisy.py,sha256=Ubc-eTH6ZbGYsLfUUi69JAotwuUwzb-SJBeGo_0dIZI,348
|
365
365
|
omlish/logs/proxy.py,sha256=A-ROPUUAlF397qTbEqhel6YhQMstNuXL3Xmts7w9dAo,2347
|
366
|
-
omlish/logs/standard.py,sha256=
|
366
|
+
omlish/logs/standard.py,sha256=BVFn8pFyafxuco1sjA5COYxX5Q0Wv80_OE9zo6uDp2Q,3164
|
367
367
|
omlish/logs/utils.py,sha256=mzHrZ9ji75p5A8qR29eUr05CBAHMb8J753MSkID_VaQ,393
|
368
368
|
omlish/manifests/__init__.py,sha256=P2B0dpT8D7l5lJwRGPA92IcQj6oeXfd90X5-q9BJrKg,51
|
369
369
|
omlish/manifests/load.py,sha256=8R-S5CyQpAbxDHt5wcNF6mAYri8bGndn6R2uEVOh52Y,4809
|
@@ -525,9 +525,9 @@ omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,329
|
|
525
525
|
omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
|
526
526
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
527
527
|
omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
|
528
|
-
omlish-0.0.0.
|
529
|
-
omlish-0.0.0.
|
530
|
-
omlish-0.0.0.
|
531
|
-
omlish-0.0.0.
|
532
|
-
omlish-0.0.0.
|
533
|
-
omlish-0.0.0.
|
528
|
+
omlish-0.0.0.dev160.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
529
|
+
omlish-0.0.0.dev160.dist-info/METADATA,sha256=CZH9L3qhAM-tYsJfEokB-s2fTLnRy-QMkOSnErJHumc,4264
|
530
|
+
omlish-0.0.0.dev160.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
531
|
+
omlish-0.0.0.dev160.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
532
|
+
omlish-0.0.0.dev160.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
533
|
+
omlish-0.0.0.dev160.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|