ominfra 0.0.0.dev141__py3-none-any.whl → 0.0.0.dev142__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,,