omlish 0.0.0.dev159__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 CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev159'
2
- __revision__ = '57ad3a7d9b338af6a708812632c3d64969a1b9ef'
1
+ __version__ = '0.0.0.dev160'
2
+ __revision__ = '7a7f89f635d413c2afb755bed939daa26703116f'
3
3
 
4
4
 
5
5
  #
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
- nonstrict_dataclasses: bool = False
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 DataclassObjMarshaler(ObjMarshaler):
170
+ class FieldsObjMarshaler(ObjMarshaler):
170
171
  ty: type
171
172
  fs: ta.Mapping[str, ObjMarshaler]
172
- nonstrict: bool = False
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.nonstrict or ctx.options.nonstrict_dataclasses) or k in self.fs
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
- nonstrict_dataclasses: bool = False,
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 DataclassObjMarshaler(
339
+ return FieldsObjMarshaler(
339
340
  ty,
340
341
  {f.name: rec(f.type) for f in dc.fields(ty)},
341
- nonstrict=nonstrict_dataclasses,
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__()))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev159
3
+ Version: 0.0.0.dev160
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=RX24SRc6DCEg77PUVnaXOKCWa5TF_c9RQJdGIf7gl9c,1135
2
- omlish/__about__.py,sha256=Oft5eCVCcnEMK8rYnJP3QHL7ISL4-IJeS8mYfuDtxXI,3409
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,10 +342,10 @@ 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=u5n43bEbct1ps8oIR7wjFCSWeyOhfHAF7LxUjELh8Jk,13830
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=ad_ya_zZJOQB8HoNjs9yc66R54zgflwJVPJqiBXMzqA,1681
348
+ omlish/lite/reflect.py,sha256=L5_9gNp_BmAZ3l9PVezDmiXFg_6BOHbfQNB98tUULW0,1765
349
349
  omlish/lite/resources.py,sha256=YNSmX1Ohck1aoWRs55a-o5ChVbFJIQhtbqE-XwF55Oc,326
350
350
  omlish/lite/runtime.py,sha256=XQo408zxTdJdppUZqOWHyeUR50VlCpNIExNGHz4U6O4,459
351
351
  omlish/lite/secrets.py,sha256=3Mz3V2jf__XU9qNHcH56sBSw95L3U2UPL24bjvobG0c,816
@@ -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.dev159.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
529
- omlish-0.0.0.dev159.dist-info/METADATA,sha256=5v5tXuLmc6Vhu3AbvfFi0Gt4uKcFAqMr5g2Ca5t_CeA,4264
530
- omlish-0.0.0.dev159.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
531
- omlish-0.0.0.dev159.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
532
- omlish-0.0.0.dev159.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
533
- omlish-0.0.0.dev159.dist-info/RECORD,,
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,,