omdev 0.0.0.dev159__py3-none-any.whl → 0.0.0.dev160__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.

Potentially problematic release.


This version of omdev might be problematic. Click here for more details.

omdev/scripts/interp.py CHANGED
@@ -1086,6 +1086,10 @@ def is_new_type(spec: ta.Any) -> bool:
1086
1086
  return isinstance(spec, types.FunctionType) and spec.__code__ is ta.NewType.__code__.co_consts[1] # type: ignore # noqa
1087
1087
 
1088
1088
 
1089
+ def get_new_type_supertype(spec: ta.Any) -> ta.Any:
1090
+ return spec.__supertype__
1091
+
1092
+
1089
1093
  def deep_subclasses(cls: ta.Type[T]) -> ta.Iterator[ta.Type[T]]:
1090
1094
  seen = set()
1091
1095
  todo = list(reversed(cls.__subclasses__()))
@@ -2378,6 +2378,10 @@ def is_new_type(spec: ta.Any) -> bool:
2378
2378
  return isinstance(spec, types.FunctionType) and spec.__code__ is ta.NewType.__code__.co_consts[1] # type: ignore # noqa
2379
2379
 
2380
2380
 
2381
+ def get_new_type_supertype(spec: ta.Any) -> ta.Any:
2382
+ return spec.__supertype__
2383
+
2384
+
2381
2385
  def deep_subclasses(cls: ta.Type[T]) -> ta.Iterator[ta.Type[T]]:
2382
2386
  seen = set()
2383
2387
  todo = list(reversed(cls.__subclasses__()))
@@ -3680,9 +3684,7 @@ class ArgparseCli:
3680
3684
  """
3681
3685
  TODO:
3682
3686
  - pickle stdlib objs? have to pin to 3.8 pickle protocol, will be cross-version
3683
- - namedtuple
3684
3687
  - literals
3685
- - newtypes?
3686
3688
  """
3687
3689
 
3688
3690
 
@@ -3692,7 +3694,7 @@ TODO:
3692
3694
  @dc.dataclass(frozen=True)
3693
3695
  class ObjMarshalOptions:
3694
3696
  raw_bytes: bool = False
3695
- nonstrict_dataclasses: bool = False
3697
+ non_strict_fields: bool = False
3696
3698
 
3697
3699
 
3698
3700
  class ObjMarshaler(abc.ABC):
@@ -3821,10 +3823,10 @@ class IterableObjMarshaler(ObjMarshaler):
3821
3823
 
3822
3824
 
3823
3825
  @dc.dataclass(frozen=True)
3824
- class DataclassObjMarshaler(ObjMarshaler):
3826
+ class FieldsObjMarshaler(ObjMarshaler):
3825
3827
  ty: type
3826
3828
  fs: ta.Mapping[str, ObjMarshaler]
3827
- nonstrict: bool = False
3829
+ non_strict: bool = False
3828
3830
 
3829
3831
  def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
3830
3832
  return {
@@ -3836,7 +3838,7 @@ class DataclassObjMarshaler(ObjMarshaler):
3836
3838
  return self.ty(**{
3837
3839
  k: self.fs[k].unmarshal(v, ctx)
3838
3840
  for k, v in o.items()
3839
- if not (self.nonstrict or ctx.options.nonstrict_dataclasses) or k in self.fs
3841
+ if not (self.non_strict or ctx.options.non_strict_fields) or k in self.fs
3840
3842
  })
3841
3843
 
3842
3844
 
@@ -3968,7 +3970,7 @@ class ObjMarshalerManager:
3968
3970
  ty: ta.Any,
3969
3971
  rec: ta.Callable[[ta.Any], ObjMarshaler],
3970
3972
  *,
3971
- nonstrict_dataclasses: bool = False,
3973
+ non_strict_fields: bool = False,
3972
3974
  ) -> ObjMarshaler:
3973
3975
  if isinstance(ty, type):
3974
3976
  if abc.ABC in ty.__bases__:
@@ -3990,12 +3992,22 @@ class ObjMarshalerManager:
3990
3992
  return EnumObjMarshaler(ty)
3991
3993
 
3992
3994
  if dc.is_dataclass(ty):
3993
- return DataclassObjMarshaler(
3995
+ return FieldsObjMarshaler(
3994
3996
  ty,
3995
3997
  {f.name: rec(f.type) for f in dc.fields(ty)},
3996
- nonstrict=nonstrict_dataclasses,
3998
+ non_strict=non_strict_fields,
3999
+ )
4000
+
4001
+ if issubclass(ty, tuple) and hasattr(ty, '_fields'):
4002
+ return FieldsObjMarshaler(
4003
+ ty,
4004
+ {p.name: rec(p.annotation) for p in inspect.signature(ty).parameters.values()},
4005
+ non_strict=non_strict_fields,
3997
4006
  )
3998
4007
 
4008
+ if is_new_type(ty):
4009
+ return rec(get_new_type_supertype(ty))
4010
+
3999
4011
  if is_generic_alias(ty):
4000
4012
  try:
4001
4013
  mt = self._generic_mapping_types[ta.get_origin(ty)]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev159
3
+ Version: 0.0.0.dev160
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev159
15
+ Requires-Dist: omlish==0.0.0.dev160
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -126,8 +126,8 @@ omdev/scripts/bumpversion.py,sha256=Kn7fo73Hs8uJh3Hi3EIyLOlzLPWAC6dwuD_lZ3cIzuY,
126
126
  omdev/scripts/execrss.py,sha256=mR0G0wERBYtQmVIn63lCIIFb5zkCM6X_XOENDFYDBKc,651
127
127
  omdev/scripts/exectime.py,sha256=sFb376GflU6s9gNX-2-we8hgH6w5MuQNS9g6i4SqJIo,610
128
128
  omdev/scripts/importtrace.py,sha256=oa7CtcWJVMNDbyIEiRHej6ICfABfErMeo4_haIqe18Q,14041
129
- omdev/scripts/interp.py,sha256=oK0fisQhf2yJrt05RvxuHn_384xUtqaKa0WdNRsBkLY,99798
130
- omdev/scripts/pyproject.py,sha256=JlzDgQnRJuDSpliUfzoorVls2W39g9TUCu2kRG7fsA8,204482
129
+ omdev/scripts/interp.py,sha256=3_c7Kdni7-oZQVrS9Vb2h1gaW5XOy9ebgShPdCapHyM,99882
130
+ omdev/scripts/pyproject.py,sha256=d7LuBO6NzgQSjx97OMQ8r5QHABULEE2bN9-EQvBJu00,204901
131
131
  omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
132
132
  omdev/scripts/tmpexec.py,sha256=WTYcf56Tj2qjYV14AWmV8SfT0u6Y8eIU6cKgQRvEK3c,1442
133
133
  omdev/toml/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
@@ -156,9 +156,9 @@ omdev/tools/json/rendering.py,sha256=jNShMfCpFR9-Kcn6cUFuOChXHjg71diuTC4x7Ofmz-o
156
156
  omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
157
  omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
158
158
  omdev/tools/pawk/pawk.py,sha256=Eckymn22GfychCQcQi96BFqRo_LmiJ-EPhC8TTUJdB4,11446
159
- omdev-0.0.0.dev159.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
160
- omdev-0.0.0.dev159.dist-info/METADATA,sha256=gIu6_Kd0WIDagMrwDbX2rLkskqBtKhjuHhYyx6V_Cw4,1760
161
- omdev-0.0.0.dev159.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
162
- omdev-0.0.0.dev159.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
163
- omdev-0.0.0.dev159.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
164
- omdev-0.0.0.dev159.dist-info/RECORD,,
159
+ omdev-0.0.0.dev160.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
160
+ omdev-0.0.0.dev160.dist-info/METADATA,sha256=s2OLsw8nRKCVQHgJfv-UbxudBYvFl__fdyh86RJXeVI,1760
161
+ omdev-0.0.0.dev160.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
162
+ omdev-0.0.0.dev160.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
163
+ omdev-0.0.0.dev160.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
164
+ omdev-0.0.0.dev160.dist-info/RECORD,,