omlish 0.0.0.dev175__py3-none-any.whl → 0.0.0.dev176__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.dev175'
2
- __revision__ = '52c77498eb4f4bf0082f758cb859d51b69f93f9c'
1
+ __version__ = '0.0.0.dev176'
2
+ __revision__ = '70fcf17d0007d56d6de7cd0e25042cd43dd0e28f'
3
3
 
4
4
 
5
5
  #
omlish/lite/marshal.py CHANGED
@@ -200,6 +200,18 @@ class FieldsObjMarshaler(ObjMarshaler):
200
200
  })
201
201
 
202
202
 
203
+ @dc.dataclass(frozen=True)
204
+ class SingleFieldObjMarshaler(ObjMarshaler):
205
+ ty: type
206
+ fld: str
207
+
208
+ def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
209
+ return getattr(o, self.fld)
210
+
211
+ def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
212
+ return self.ty(**{self.fld: o})
213
+
214
+
203
215
  @dc.dataclass(frozen=True)
204
216
  class PolymorphicObjMarshaler(ObjMarshaler):
205
217
  class Impl(ta.NamedTuple):
@@ -274,7 +286,7 @@ _DEFAULT_OBJ_MARSHALERS: ta.Dict[ta.Any, ObjMarshaler] = {
274
286
  **{t: IterableObjMarshaler(t, DynamicObjMarshaler()) for t in (list, tuple, set, frozenset)},
275
287
  **{t: MappingObjMarshaler(t, DynamicObjMarshaler(), DynamicObjMarshaler()) for t in (dict,)},
276
288
 
277
- ta.Any: DynamicObjMarshaler(),
289
+ **{t: DynamicObjMarshaler() for t in (ta.Any, object)},
278
290
 
279
291
  **{t: DatetimeObjMarshaler(t) for t in (datetime.date, datetime.time, datetime.datetime)},
280
292
  decimal.Decimal: DecimalObjMarshaler(),
@@ -299,6 +311,16 @@ _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES: ta.Dict[ta.Any, type] = {
299
311
  ##
300
312
 
301
313
 
314
+ _REGISTERED_OBJ_MARSHALERS_BY_TYPE: ta.MutableMapping[type, ObjMarshaler] = weakref.WeakKeyDictionary()
315
+
316
+
317
+ def register_type_obj_marshaler(ty: type, om: ObjMarshaler) -> None:
318
+ _REGISTERED_OBJ_MARSHALERS_BY_TYPE[ty] = om
319
+
320
+
321
+ ##
322
+
323
+
302
324
  class ObjMarshalerManager:
303
325
  def __init__(
304
326
  self,
@@ -308,6 +330,8 @@ class ObjMarshalerManager:
308
330
  default_obj_marshalers: ta.Dict[ta.Any, ObjMarshaler] = _DEFAULT_OBJ_MARSHALERS, # noqa
309
331
  generic_mapping_types: ta.Dict[ta.Any, type] = _OBJ_MARSHALER_GENERIC_MAPPING_TYPES, # noqa
310
332
  generic_iterable_types: ta.Dict[ta.Any, type] = _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES, # noqa
333
+
334
+ registered_obj_marshalers: ta.Mapping[type, ObjMarshaler] = _REGISTERED_OBJ_MARSHALERS_BY_TYPE,
311
335
  ) -> None:
312
336
  super().__init__()
313
337
 
@@ -316,6 +340,7 @@ class ObjMarshalerManager:
316
340
  self._obj_marshalers = dict(default_obj_marshalers)
317
341
  self._generic_mapping_types = generic_mapping_types
318
342
  self._generic_iterable_types = generic_iterable_types
343
+ self._registered_obj_marshalers = registered_obj_marshalers
319
344
 
320
345
  self._lock = threading.RLock()
321
346
  self._marshalers: ta.Dict[ta.Any, ObjMarshaler] = dict(_DEFAULT_OBJ_MARSHALERS)
@@ -331,6 +356,9 @@ class ObjMarshalerManager:
331
356
  non_strict_fields: bool = False,
332
357
  ) -> ObjMarshaler:
333
358
  if isinstance(ty, type):
359
+ if (reg := self._registered_obj_marshalers.get(ty)) is not None:
360
+ return reg
361
+
334
362
  if abc.ABC in ty.__bases__:
335
363
  impls = [ity for ity in deep_subclasses(ty) if abc.ABC not in ity.__bases__] # type: ignore
336
364
  if all(ity.__qualname__.endswith(ty.__name__) for ity in impls):
@@ -395,9 +423,15 @@ class ObjMarshalerManager:
395
423
 
396
424
  #
397
425
 
398
- def register_opj_marshaler(self, ty: ta.Any, m: ObjMarshaler) -> None:
426
+ def set_obj_marshaler(
427
+ self,
428
+ ty: ta.Any,
429
+ m: ObjMarshaler,
430
+ *,
431
+ override: bool = False,
432
+ ) -> None:
399
433
  with self._lock:
400
- if ty in self._obj_marshalers:
434
+ if not override and ty in self._obj_marshalers:
401
435
  raise KeyError(ty)
402
436
  self._obj_marshalers[ty] = m
403
437
 
@@ -488,7 +522,7 @@ class ObjMarshalContext:
488
522
 
489
523
  OBJ_MARSHALER_MANAGER = ObjMarshalerManager()
490
524
 
491
- register_opj_marshaler = OBJ_MARSHALER_MANAGER.register_opj_marshaler
525
+ set_obj_marshaler = OBJ_MARSHALER_MANAGER.set_obj_marshaler
492
526
  get_obj_marshaler = OBJ_MARSHALER_MANAGER.get_obj_marshaler
493
527
 
494
528
  marshal_obj = OBJ_MARSHALER_MANAGER.marshal_obj
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev175
3
+ Version: 0.0.0.dev176
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=lRkBDFxlAbf6lN5upo3WSf-owW8YG1T21dfpbQL-XHM,7598
2
- omlish/__about__.py,sha256=25OnaWS3SJi0TLvUrE__wNhmSlkqlEh4wv-95tE1BY0,3409
2
+ omlish/__about__.py,sha256=RBsHqgr7y9qfTJmoVH5GI5S3QcYfEugaqakxVkSTWjk,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
@@ -382,7 +382,7 @@ omlish/lite/dataclasses.py,sha256=M6UD4VwGo0Ky7RNzKWbO0IOy7iBZVCIbTiC6EYbFnX8,10
382
382
  omlish/lite/inject.py,sha256=EEaioN9ESAveVCMe2s5osjwI97FPRUVoU8P95vGUiYo,23376
383
383
  omlish/lite/json.py,sha256=7-02Ny4fq-6YAu5ynvqoijhuYXWpLmfCI19GUeZnb1c,740
384
384
  omlish/lite/logs.py,sha256=CWFG0NKGhqNeEgryF5atN2gkPYbUdTINEw_s1phbINM,51
385
- omlish/lite/marshal.py,sha256=8V2mWl6D8gfJK_a86YKwmSsBBvoKMucLK4uLBwVpF60,14910
385
+ omlish/lite/marshal.py,sha256=O_v_slgjAAiSGWComdRhqLXdumuIlBDc3SvoG_p00QM,15863
386
386
  omlish/lite/maybes.py,sha256=7OlHJ8Q2r4wQ-aRbZSlJY7x0e8gDvufFdlohGEIJ3P4,833
387
387
  omlish/lite/pycharm.py,sha256=pUOJevrPClSqTCEOkQBO11LKX2003tfDcp18a03QFrc,1163
388
388
  omlish/lite/reflect.py,sha256=pzOY2PPuHH0omdtglkN6DheXDrGopdL3PtTJnejyLFU,2189
@@ -570,9 +570,9 @@ omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,329
570
570
  omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
571
571
  omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
572
572
  omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
573
- omlish-0.0.0.dev175.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
574
- omlish-0.0.0.dev175.dist-info/METADATA,sha256=IPfi7oJ83dAfqstWY5EBl2n0I-_yPL4tcbv61BIDhx4,4264
575
- omlish-0.0.0.dev175.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
576
- omlish-0.0.0.dev175.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
577
- omlish-0.0.0.dev175.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
578
- omlish-0.0.0.dev175.dist-info/RECORD,,
573
+ omlish-0.0.0.dev176.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
574
+ omlish-0.0.0.dev176.dist-info/METADATA,sha256=5-3GbbCrNa96UjitAH5tN4L4YlNjWLwyCMzobgcWWRE,4264
575
+ omlish-0.0.0.dev176.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
576
+ omlish-0.0.0.dev176.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
577
+ omlish-0.0.0.dev176.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
578
+ omlish-0.0.0.dev176.dist-info/RECORD,,