ominfra 0.0.0.dev141__py3-none-any.whl → 0.0.0.dev142__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.
@@ -4954,120 +4954,144 @@ _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES: ta.Dict[ta.Any, type] = {
4954
4954
  }
4955
4955
 
4956
4956
 
4957
- def _make_obj_marshaler(
4958
- ty: ta.Any,
4959
- rec: ta.Callable[[ta.Any], ObjMarshaler],
4960
- *,
4961
- nonstrict_dataclasses: bool = False,
4962
- ) -> ObjMarshaler:
4963
- if isinstance(ty, type):
4964
- if abc.ABC in ty.__bases__:
4965
- return PolymorphicObjMarshaler.of([ # type: ignore
4966
- PolymorphicObjMarshaler.Impl(
4967
- ity,
4968
- ity.__qualname__,
4969
- rec(ity),
4970
- )
4971
- for ity in deep_subclasses(ty)
4972
- if abc.ABC not in ity.__bases__
4973
- ])
4974
-
4975
- if issubclass(ty, enum.Enum):
4976
- return EnumObjMarshaler(ty)
4957
+ ##
4977
4958
 
4978
- if dc.is_dataclass(ty):
4979
- return DataclassObjMarshaler(
4980
- ty,
4981
- {f.name: rec(f.type) for f in dc.fields(ty)},
4982
- nonstrict=nonstrict_dataclasses,
4983
- )
4984
4959
 
4985
- if is_generic_alias(ty):
4986
- try:
4987
- mt = _OBJ_MARSHALER_GENERIC_MAPPING_TYPES[ta.get_origin(ty)]
4988
- except KeyError:
4989
- pass
4990
- else:
4991
- k, v = ta.get_args(ty)
4992
- return MappingObjMarshaler(mt, rec(k), rec(v))
4993
-
4994
- try:
4995
- st = _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES[ta.get_origin(ty)]
4996
- except KeyError:
4997
- pass
4998
- else:
4999
- [e] = ta.get_args(ty)
5000
- return IterableObjMarshaler(st, rec(e))
4960
+ class ObjMarshalerManager:
4961
+ def __init__(
4962
+ self,
4963
+ *,
4964
+ default_obj_marshalers: ta.Dict[ta.Any, ObjMarshaler] = _DEFAULT_OBJ_MARSHALERS, # noqa
4965
+ generic_mapping_types: ta.Dict[ta.Any, type] = _OBJ_MARSHALER_GENERIC_MAPPING_TYPES, # noqa
4966
+ generic_iterable_types: ta.Dict[ta.Any, type] = _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES, # noqa
4967
+ ) -> None:
4968
+ super().__init__()
5001
4969
 
5002
- if is_union_alias(ty):
5003
- return OptionalObjMarshaler(rec(get_optional_alias_arg(ty)))
4970
+ self._obj_marshalers = dict(default_obj_marshalers)
4971
+ self._generic_mapping_types = generic_mapping_types
4972
+ self._generic_iterable_types = generic_iterable_types
5004
4973
 
5005
- raise TypeError(ty)
4974
+ self._lock = threading.RLock()
4975
+ self._marshalers: ta.Dict[ta.Any, ObjMarshaler] = dict(_DEFAULT_OBJ_MARSHALERS)
4976
+ self._proxies: ta.Dict[ta.Any, ProxyObjMarshaler] = {}
5006
4977
 
4978
+ #
5007
4979
 
5008
- ##
4980
+ def make_obj_marshaler(
4981
+ self,
4982
+ ty: ta.Any,
4983
+ rec: ta.Callable[[ta.Any], ObjMarshaler],
4984
+ *,
4985
+ nonstrict_dataclasses: bool = False,
4986
+ ) -> ObjMarshaler:
4987
+ if isinstance(ty, type):
4988
+ if abc.ABC in ty.__bases__:
4989
+ return PolymorphicObjMarshaler.of([ # type: ignore
4990
+ PolymorphicObjMarshaler.Impl(
4991
+ ity,
4992
+ ity.__qualname__,
4993
+ rec(ity),
4994
+ )
4995
+ for ity in deep_subclasses(ty)
4996
+ if abc.ABC not in ity.__bases__
4997
+ ])
4998
+
4999
+ if issubclass(ty, enum.Enum):
5000
+ return EnumObjMarshaler(ty)
5001
+
5002
+ if dc.is_dataclass(ty):
5003
+ return DataclassObjMarshaler(
5004
+ ty,
5005
+ {f.name: rec(f.type) for f in dc.fields(ty)},
5006
+ nonstrict=nonstrict_dataclasses,
5007
+ )
5009
5008
 
5009
+ if is_generic_alias(ty):
5010
+ try:
5011
+ mt = self._generic_mapping_types[ta.get_origin(ty)]
5012
+ except KeyError:
5013
+ pass
5014
+ else:
5015
+ k, v = ta.get_args(ty)
5016
+ return MappingObjMarshaler(mt, rec(k), rec(v))
5010
5017
 
5011
- _OBJ_MARSHALERS_LOCK = threading.RLock()
5018
+ try:
5019
+ st = self._generic_iterable_types[ta.get_origin(ty)]
5020
+ except KeyError:
5021
+ pass
5022
+ else:
5023
+ [e] = ta.get_args(ty)
5024
+ return IterableObjMarshaler(st, rec(e))
5012
5025
 
5013
- _OBJ_MARSHALERS: ta.Dict[ta.Any, ObjMarshaler] = dict(_DEFAULT_OBJ_MARSHALERS)
5026
+ if is_union_alias(ty):
5027
+ return OptionalObjMarshaler(rec(get_optional_alias_arg(ty)))
5014
5028
 
5015
- _OBJ_MARSHALER_PROXIES: ta.Dict[ta.Any, ProxyObjMarshaler] = {}
5029
+ raise TypeError(ty)
5016
5030
 
5031
+ #
5017
5032
 
5018
- def register_opj_marshaler(ty: ta.Any, m: ObjMarshaler) -> None:
5019
- with _OBJ_MARSHALERS_LOCK:
5020
- if ty in _OBJ_MARSHALERS:
5021
- raise KeyError(ty)
5022
- _OBJ_MARSHALERS[ty] = m
5033
+ def register_opj_marshaler(self, ty: ta.Any, m: ObjMarshaler) -> None:
5034
+ with self._lock:
5035
+ if ty in self._obj_marshalers:
5036
+ raise KeyError(ty)
5037
+ self._obj_marshalers[ty] = m
5023
5038
 
5039
+ def get_obj_marshaler(
5040
+ self,
5041
+ ty: ta.Any,
5042
+ *,
5043
+ no_cache: bool = False,
5044
+ **kwargs: ta.Any,
5045
+ ) -> ObjMarshaler:
5046
+ with self._lock:
5047
+ if not no_cache:
5048
+ try:
5049
+ return self._obj_marshalers[ty]
5050
+ except KeyError:
5051
+ pass
5024
5052
 
5025
- def get_obj_marshaler(
5026
- ty: ta.Any,
5027
- *,
5028
- no_cache: bool = False,
5029
- **kwargs: ta.Any,
5030
- ) -> ObjMarshaler:
5031
- with _OBJ_MARSHALERS_LOCK:
5032
- if not no_cache:
5033
5053
  try:
5034
- return _OBJ_MARSHALERS[ty]
5054
+ return self._proxies[ty]
5035
5055
  except KeyError:
5036
5056
  pass
5037
5057
 
5038
- try:
5039
- return _OBJ_MARSHALER_PROXIES[ty]
5040
- except KeyError:
5041
- pass
5058
+ rec = functools.partial(
5059
+ self.get_obj_marshaler,
5060
+ no_cache=no_cache,
5061
+ **kwargs,
5062
+ )
5042
5063
 
5043
- rec = functools.partial(
5044
- get_obj_marshaler,
5045
- no_cache=no_cache,
5046
- **kwargs,
5047
- )
5064
+ p = ProxyObjMarshaler()
5065
+ self._proxies[ty] = p
5066
+ try:
5067
+ m = self.make_obj_marshaler(ty, rec, **kwargs)
5068
+ finally:
5069
+ del self._proxies[ty]
5070
+ p.m = m
5048
5071
 
5049
- p = ProxyObjMarshaler()
5050
- _OBJ_MARSHALER_PROXIES[ty] = p
5051
- try:
5052
- m = _make_obj_marshaler(ty, rec, **kwargs)
5053
- finally:
5054
- del _OBJ_MARSHALER_PROXIES[ty]
5055
- p.m = m
5072
+ if not no_cache:
5073
+ self._obj_marshalers[ty] = m
5074
+ return m
5075
+
5076
+ #
5077
+
5078
+ def marshal_obj(self, o: ta.Any, ty: ta.Any = None) -> ta.Any:
5079
+ return self.get_obj_marshaler(ty if ty is not None else type(o)).marshal(o)
5056
5080
 
5057
- if not no_cache:
5058
- _OBJ_MARSHALERS[ty] = m
5059
- return m
5081
+ def unmarshal_obj(self, o: ta.Any, ty: ta.Union[ta.Type[T], ta.Any]) -> T:
5082
+ return self.get_obj_marshaler(ty).unmarshal(o)
5060
5083
 
5061
5084
 
5062
5085
  ##
5063
5086
 
5064
5087
 
5065
- def marshal_obj(o: ta.Any, ty: ta.Any = None) -> ta.Any:
5066
- return get_obj_marshaler(ty if ty is not None else type(o)).marshal(o)
5088
+ OBJ_MARSHALER_MANAGER = ObjMarshalerManager()
5067
5089
 
5090
+ register_opj_marshaler = OBJ_MARSHALER_MANAGER.register_opj_marshaler
5091
+ get_obj_marshaler = OBJ_MARSHALER_MANAGER.get_obj_marshaler
5068
5092
 
5069
- def unmarshal_obj(o: ta.Any, ty: ta.Union[ta.Type[T], ta.Any]) -> T:
5070
- return get_obj_marshaler(ty).unmarshal(o)
5093
+ marshal_obj = OBJ_MARSHALER_MANAGER.marshal_obj
5094
+ unmarshal_obj = OBJ_MARSHALER_MANAGER.unmarshal_obj
5071
5095
 
5072
5096
 
5073
5097
  ########################################
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ominfra
3
- Version: 0.0.0.dev141
3
+ Version: 0.0.0.dev142
4
4
  Summary: ominfra
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,8 +12,8 @@ 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: omdev==0.0.0.dev141
16
- Requires-Dist: omlish==0.0.0.dev141
15
+ Requires-Dist: omdev==0.0.0.dev142
16
+ Requires-Dist: omlish==0.0.0.dev142
17
17
  Provides-Extra: all
18
18
  Requires-Dist: paramiko~=3.5; extra == "all"
19
19
  Requires-Dist: asyncssh~=2.18; extra == "all"
@@ -3,7 +3,7 @@ ominfra/__about__.py,sha256=6i1AoruFYQCd-PyhhbDQDWY2d1tiQu9nkwWr-fXAqfY,705
3
3
  ominfra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  ominfra/cmds.py,sha256=E0AfnvEmnKntXWvmLW5L05_NeDpBET1VBXn7vV6EwBQ,2083
5
5
  ominfra/configs.py,sha256=8aU1Qmbr-qjaE2iP3gAbA2SWJYMPZ-uGK007L01PoOI,1727
6
- ominfra/pyremote.py,sha256=vuLEZSjYtil7Knl4qlXYI4dqqiEGJvuO7EIcqr8Kabk,13142
6
+ ominfra/pyremote.py,sha256=FkxGXrgeszcYQK-lhp3B1bvDIShW-vTkYVcx0yz_Evs,13150
7
7
  ominfra/ssh.py,sha256=jQpc4WvkMckIfk4vILda8zFaeharRqc_6wxW50b0OjQ,5431
8
8
  ominfra/threadworkers.py,sha256=oX4ubZn7h932saXpRIJu2MNhBExgGGMuGhdXarZxLJw,4948
9
9
  ominfra/clouds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -28,16 +28,17 @@ ominfra/journald/genmessages.py,sha256=rLTS-K2v7otNOtTz4RoOEVYCm0fQuuBzf47e0T61t
28
28
  ominfra/journald/messages.py,sha256=Wr7TjWMOySc0WnKwp_-idR8RfeKlbyJQ_KkELr0VB70,2192
29
29
  ominfra/journald/tailer.py,sha256=5abcFMfgi7fnY9ZEQe2ZVobaJxjQkeu6d9Kagw33a1w,33525
30
30
  ominfra/manage/__init__.py,sha256=YqHcYMfmo04OoVNYc6Ykc1I8WaJot44skwhm9DcnmXE,166
31
- ominfra/manage/main.py,sha256=rTY98MrDqGrpwRxo93z5TkfE82Ze3XrL1TqEZ--nkzk,3996
31
+ ominfra/manage/main.py,sha256=31ZjdEGTo3v4H5CLe1ksNlZiEvXZ26utN3wabupvdDk,3193
32
32
  ominfra/manage/payload.py,sha256=NPuQtMGe1q3kDjG5cgOFmd6M9ITyKRc4IyMRY9PHzRI,818
33
- ominfra/manage/spawning.py,sha256=EeV4hNcUZOWlM1VuhfGolLHSMWJdz6Dn24OLFtcbisE,2665
33
+ ominfra/manage/protocol.py,sha256=NPxXxLX-jP-MKcSR3Sz3sMcFRVO2AdtL1gxRtHYXZIw,1171
34
+ ominfra/manage/spawning.py,sha256=r16vSlUiWRUevSHMkBNBVDOZnB7qdu0k0K4jY3oHPu4,2626
34
35
  ominfra/manage/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
36
  ominfra/manage/commands/base.py,sha256=nXvqvMYeiuya0hcLnVjQNX3jUdIQN6Brt_UGIQBfNvs,559
36
- ominfra/manage/commands/subprocess.py,sha256=7d-q8hOVaI5YY-dMU0R1KbCIo3R2mlgBSZ2g8NKEn9A,1941
37
+ ominfra/manage/commands/subprocess.py,sha256=3JaOt56uPqW3jYRtpBpHk5zm3ZzOXzCK-feyDBkq8P4,2198
37
38
  ominfra/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- ominfra/scripts/journald2aws.py,sha256=wALg2habRTCsXEEACYqzB8qIxmZ0gHSL2NoPfu_iKDk,131771
39
- ominfra/scripts/manage.py,sha256=nKidMTzCGV0Clfaw3-VlAIpy36LK3afr5gGkPUMaUQo,46670
40
- ominfra/scripts/supervisor.py,sha256=q8d1LsBIthlv2-cTi1vb9z_2AfZ0f8mE-Xym7TLeiLU,246037
39
+ ominfra/scripts/journald2aws.py,sha256=W5mjSE-zeT6DV4oCALur1i8za7XnThh0jLleDxNtKJc,133341
40
+ ominfra/scripts/manage.py,sha256=wsWkxzFg24hD-Pn9F-fosPw5sa5i7kEPBoeCVOqXBLU,48622
41
+ ominfra/scripts/supervisor.py,sha256=EVSJ5q7pSQ9vIBZsFyHT2p_RndRb8JMpTfAJ-pY6WNU,247313
41
42
  ominfra/supervisor/LICENSE.txt,sha256=yvqaMNsDhWxziHa9ien6qCW1SkZv-DQlAg96XjfSee8,1746
42
43
  ominfra/supervisor/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
43
44
  ominfra/supervisor/__main__.py,sha256=I0yFw-C08OOiZ3BF6lF1Oiv789EQXu-_j6whDhQUTEA,66
@@ -79,9 +80,9 @@ ominfra/tailscale/api.py,sha256=C5-t_b6jZXUWcy5k8bXm7CFnk73pSdrlMOgGDeGVrpw,1370
79
80
  ominfra/tailscale/cli.py,sha256=DSGp4hn5xwOW-l_u_InKlSF6kIobxtUtVssf_73STs0,3567
80
81
  ominfra/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
82
  ominfra/tools/listresources.py,sha256=4qVg5txsb10EHhvqXXeM6gJ2jx9LbroEnPydDv1uXs0,6176
82
- ominfra-0.0.0.dev141.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
83
- ominfra-0.0.0.dev141.dist-info/METADATA,sha256=CRa6olAYdI24dF7R_HKUHw0aebJQzvHwvACjG82Mff4,731
84
- ominfra-0.0.0.dev141.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
85
- ominfra-0.0.0.dev141.dist-info/entry_points.txt,sha256=kgecQ2MgGrM9qK744BoKS3tMesaC3yjLnl9pa5CRczg,37
86
- ominfra-0.0.0.dev141.dist-info/top_level.txt,sha256=E-b2OHkk_AOBLXHYZQ2EOFKl-_6uOGd8EjeG-Zy6h_w,8
87
- ominfra-0.0.0.dev141.dist-info/RECORD,,
83
+ ominfra-0.0.0.dev142.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
84
+ ominfra-0.0.0.dev142.dist-info/METADATA,sha256=a7T1XgtIZR-J7arZa-JEIS-v3QHwFaq6t_l-Kuq6eb4,731
85
+ ominfra-0.0.0.dev142.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
86
+ ominfra-0.0.0.dev142.dist-info/entry_points.txt,sha256=kgecQ2MgGrM9qK744BoKS3tMesaC3yjLnl9pa5CRczg,37
87
+ ominfra-0.0.0.dev142.dist-info/top_level.txt,sha256=E-b2OHkk_AOBLXHYZQ2EOFKl-_6uOGd8EjeG-Zy6h_w,8
88
+ ominfra-0.0.0.dev142.dist-info/RECORD,,