omlish 0.0.0.dev275__py3-none-any.whl → 0.0.0.dev276__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/__about__.py CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev275'
2
- __revision__ = 'fd5c964d07819bc7ca6e9da1e21d2032d1e2665c'
1
+ __version__ = '0.0.0.dev276'
2
+ __revision__ = 'b59ea0791ca796acd261e3bd7d25125492a027e4'
3
3
 
4
4
 
5
5
  #
@@ -188,12 +188,25 @@ class AbstractDataclassFactory(lang.Abstract):
188
188
  ##
189
189
 
190
190
 
191
+ def _type_or_generic_base(rty: rfl.Type) -> type | None:
192
+ if isinstance(rty, rfl.Generic):
193
+ return rty.cls
194
+ elif isinstance(rty, type):
195
+ return rty
196
+ else:
197
+ return None
198
+
199
+
191
200
  class DataclassMarshalerFactory(AbstractDataclassFactory, SimpleMarshalerFactory):
192
201
  def guard(self, ctx: MarshalContext, rty: rfl.Type) -> bool:
193
- return isinstance(rty, type) and dc.is_dataclass(rty) and not lang.is_abstract_class(rty)
202
+ return (
203
+ (ty := _type_or_generic_base(rty)) is not None and
204
+ dc.is_dataclass(ty) and
205
+ not lang.is_abstract_class(ty)
206
+ )
194
207
 
195
208
  def fn(self, ctx: MarshalContext, rty: rfl.Type) -> Marshaler:
196
- ty = check.isinstance(rty, type)
209
+ ty = check.isinstance(_type_or_generic_base(rty), type)
197
210
  check.state(dc.is_dataclass(ty))
198
211
  check.state(not lang.is_abstract_class(ty))
199
212
 
@@ -217,10 +230,14 @@ class DataclassMarshalerFactory(AbstractDataclassFactory, SimpleMarshalerFactory
217
230
 
218
231
  class DataclassUnmarshalerFactory(AbstractDataclassFactory, SimpleUnmarshalerFactory):
219
232
  def guard(self, ctx: UnmarshalContext, rty: rfl.Type) -> bool:
220
- return isinstance(rty, type) and dc.is_dataclass(rty) and not lang.is_abstract_class(rty)
233
+ return (
234
+ (ty := _type_or_generic_base(rty)) is not None and
235
+ dc.is_dataclass(ty) and
236
+ not lang.is_abstract_class(ty)
237
+ )
221
238
 
222
239
  def fn(self, ctx: UnmarshalContext, rty: rfl.Type) -> Unmarshaler:
223
- ty = check.isinstance(rty, type)
240
+ ty = check.isinstance(_type_or_generic_base(rty), type)
224
241
  check.state(dc.is_dataclass(ty))
225
242
  check.state(not lang.is_abstract_class(ty))
226
243
 
@@ -40,6 +40,7 @@ from .types import ( # noqa
40
40
  get_orig_bases,
41
41
  get_orig_class,
42
42
  get_params,
43
+ get_type_var_bound,
43
44
  is_type,
44
45
  is_union_type,
45
46
  type_,
omlish/reflect/types.py CHANGED
@@ -115,6 +115,10 @@ def get_newtype_supertype(obj: ta.Any) -> ta.Any:
115
115
  return obj.__supertype__
116
116
 
117
117
 
118
+ def get_type_var_bound(obj: ta.Any) -> ta.Any:
119
+ return obj.__bound__
120
+
121
+
118
122
  ##
119
123
 
120
124
 
@@ -1,3 +1,5 @@
1
+ import typing as ta
2
+
1
3
  from omlish import check
2
4
  from omlish import dataclasses as dc
3
5
  from omlish import lang
@@ -93,6 +95,8 @@ def _build_typed_values_impls(rty: rfl.Type) -> msh.Impls:
93
95
 
94
96
  if isinstance(cur, rfl.Union):
95
97
  todo.extend(cur.args)
98
+ elif isinstance(cur, ta.TypeVar):
99
+ todo.append(rfl.get_type_var_bound(cur))
96
100
  else:
97
101
  opt_cls_set.add(check.issubclass(check.isinstance(cur, type), TypedValue))
98
102
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev275
3
+ Version: 0.0.0.dev276
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=pjGUyLHaoWpPqRP3jz2u1fC1qoRc2lvrEcpU_Ax2tdg,8253
2
- omlish/__about__.py,sha256=lF4UMo4JKgTQYbwgQIGekUW4rRztnuwQfTy1Wa-z9kQ,3380
2
+ omlish/__about__.py,sha256=FoTicGOCebKQ5tQVQjrcXhtN_4ZJBQMrDN3RO12ykvQ,3380
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/c3.py,sha256=rer-TPOFDU6fYq_AWio_AmA-ckZ8JDY5shIzQ_yXfzA,8414
5
5
  omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
@@ -514,7 +514,7 @@ omlish/marshal/composite/newtypes.py,sha256=5-te247TiPYf84oFhf59tqIOOByXj8i9KaHT
514
514
  omlish/marshal/composite/optionals.py,sha256=MnecrmrJYjQvYJipIHNCDq78oH09dOjnw5pvaMKqoeU,1537
515
515
  omlish/marshal/composite/wrapped.py,sha256=jOsn3h1vLIqcoSTB-0KObnsdbV8jSVWJYbf7Kg9AUwg,750
516
516
  omlish/marshal/objects/__init__.py,sha256=F4wej8L_tedC8ETYxAnmKfdPR9TjsqIus9Z3nZofYuc,182
517
- omlish/marshal/objects/dataclasses.py,sha256=zs0yE0gi3tKHLiZGPf8FEMhPOc505vnHMjpp92MOX5k,8658
517
+ omlish/marshal/objects/dataclasses.py,sha256=NcjXrZI8y7THULwUH75LQFVHAyP_-EBBzUi9cbhyPZ0,9046
518
518
  omlish/marshal/objects/helpers.py,sha256=85GZp4h3Yo0GYGmnZpKgNxkWnSk8h2R21nfDLU2DtM0,1110
519
519
  omlish/marshal/objects/marshal.py,sha256=JarKGecMgaFYSUHUj-ZUYVP9HK6u2rjpBb3DWX9Uhh0,2648
520
520
  omlish/marshal/objects/metadata.py,sha256=2_rESnslP5fwtEW1xy9ECJg64uA4cQBuYcGkRfPElts,3342
@@ -567,11 +567,11 @@ omlish/os/pidfiles/cli.py,sha256=2SSsP4O3VdpsDIMAkWgWSjh_YNIPzCD9l5LNN2qrIjo,207
567
567
  omlish/os/pidfiles/manager.py,sha256=QphQxIENVVwvBWynLCNU31NwOfLkV43VoTVeYFn2Hac,2351
568
568
  omlish/os/pidfiles/pidfile.py,sha256=9tI5IMVwfPfnni0XMn4x5ptNQgm36n8tLeUNPf50UqU,4394
569
569
  omlish/os/pidfiles/pinning.py,sha256=v9RlJ4BnJZcaZZXiiRqbmzLluaSOkeeEb_WrbKEClBQ,6643
570
- omlish/reflect/__init__.py,sha256=Er2yBHibVO16hFNA1szQF2_f43Y3HRCBWtS-fjsOIYc,798
570
+ omlish/reflect/__init__.py,sha256=64eHbD6zL6Fhp7FfXb8n9ZHywlODjBN3rm1LMvZ081A,822
571
571
  omlish/reflect/inspect.py,sha256=WCo2YpBYauKw6k758FLlZ_H4Q05rgVPs96fEv9w6zHQ,1538
572
572
  omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
573
573
  omlish/reflect/subst.py,sha256=g3q7NmNWsmc67mcchmCE3WFPCMDSBq-FXn4ah-DWL_U,3622
574
- omlish/reflect/types.py,sha256=lYxK_hlC4kVDMKeDYJp0mymSth21quwuFAMAEFBznyE,9151
574
+ omlish/reflect/types.py,sha256=Cn9FYGoiCNt0FS0YLiTTAR12WKcesWMapCrVYcb8IDo,9225
575
575
  omlish/secrets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
576
576
  omlish/secrets/all.py,sha256=SGB1KrlNrxlNpazEHYy95NTzteLi8ndoEgMhU7luBl8,420
577
577
  omlish/secrets/crypto.py,sha256=9D21lnvPhStwu8arD4ssT0ih0bDG-nlqIRdVgYL40xA,3708
@@ -781,11 +781,11 @@ omlish/typedvalues/accessor.py,sha256=0k21N-CkjGaY6zCwugsRfOC_CDkqk7wNz4oxO1_6EE
781
781
  omlish/typedvalues/collection.py,sha256=jsXSggmMMvGATcJgQkUXt5Guwq8aquw73_OIC-e6U0I,5300
782
782
  omlish/typedvalues/generic.py,sha256=byWG_gMXhNelckUwdmOoJE9FKkL71Q4BSi4ZLyy0XZ0,788
783
783
  omlish/typedvalues/holder.py,sha256=4SwRezsmuDDEO5gENGx8kTm30pblF5UktoEAu02i-Gk,1554
784
- omlish/typedvalues/marshal.py,sha256=BuFQMoaLSDbEm32nj_hkBSClPvC0euNFU7_EhsrfBck,4487
784
+ omlish/typedvalues/marshal.py,sha256=H1gQuFHHgFR5qTs0lM7VXK41BivSbOXC9I2XUpo5SXU,4603
785
785
  omlish/typedvalues/values.py,sha256=Acyf6xSdNHxrkRXLXrFqJouk35YOveso1VqTbyPwQW4,1223
786
- omlish-0.0.0.dev275.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
787
- omlish-0.0.0.dev275.dist-info/METADATA,sha256=UZAxSmm4fOzFFAc7qszP_AvnFcJB1Sp3UwcpxUQ9V6w,4198
788
- omlish-0.0.0.dev275.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
789
- omlish-0.0.0.dev275.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
790
- omlish-0.0.0.dev275.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
791
- omlish-0.0.0.dev275.dist-info/RECORD,,
786
+ omlish-0.0.0.dev276.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
787
+ omlish-0.0.0.dev276.dist-info/METADATA,sha256=_xEeojOHXbc_azzKB0NydBuLd1aMhKO1l65YCPUaqNE,4198
788
+ omlish-0.0.0.dev276.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
789
+ omlish-0.0.0.dev276.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
790
+ omlish-0.0.0.dev276.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
791
+ omlish-0.0.0.dev276.dist-info/RECORD,,