ominfra 0.0.0.dev103__py3-none-any.whl → 0.0.0.dev105__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.
- ominfra/clouds/gcp/__init__.py +0 -0
- ominfra/clouds/gcp/auth.py +48 -0
- ominfra/deploy/_executor.py +68 -27
- ominfra/pyremote/_runcommands.py +68 -27
- ominfra/scripts/journald2aws.py +68 -27
- ominfra/scripts/supervisor.py +68 -27
- {ominfra-0.0.0.dev103.dist-info → ominfra-0.0.0.dev105.dist-info}/METADATA +3 -3
- {ominfra-0.0.0.dev103.dist-info → ominfra-0.0.0.dev105.dist-info}/RECORD +12 -10
- {ominfra-0.0.0.dev103.dist-info → ominfra-0.0.0.dev105.dist-info}/LICENSE +0 -0
- {ominfra-0.0.0.dev103.dist-info → ominfra-0.0.0.dev105.dist-info}/WHEEL +0 -0
- {ominfra-0.0.0.dev103.dist-info → ominfra-0.0.0.dev105.dist-info}/entry_points.txt +0 -0
- {ominfra-0.0.0.dev103.dist-info → ominfra-0.0.0.dev105.dist-info}/top_level.txt +0 -0
File without changes
|
@@ -0,0 +1,48 @@
|
|
1
|
+
import json
|
2
|
+
import time
|
3
|
+
import typing as ta
|
4
|
+
|
5
|
+
from omlish import check
|
6
|
+
from omlish import http
|
7
|
+
from omlish.http import jwt
|
8
|
+
|
9
|
+
|
10
|
+
DEFAULT_JWT_SCOPE = 'https://www.googleapis.com/auth/cloud-platform'
|
11
|
+
|
12
|
+
|
13
|
+
def generate_gcp_jwt(
|
14
|
+
creds_dct: ta.Mapping[str, ta.Any],
|
15
|
+
*,
|
16
|
+
issued_at: int | None = None,
|
17
|
+
lifetime_s: int = 3600,
|
18
|
+
scope: str = DEFAULT_JWT_SCOPE,
|
19
|
+
) -> str:
|
20
|
+
return jwt.generate_jwt(
|
21
|
+
issuer=creds_dct['client_email'],
|
22
|
+
subject=creds_dct['client_email'],
|
23
|
+
audience=creds_dct['token_uri'],
|
24
|
+
issued_at=(issued_at := int(issued_at if issued_at is not None else time.time())),
|
25
|
+
expires_at=issued_at + lifetime_s,
|
26
|
+
scope=scope,
|
27
|
+
key=creds_dct['private_key'],
|
28
|
+
algorithm='RS256',
|
29
|
+
)
|
30
|
+
|
31
|
+
|
32
|
+
def get_gcp_access_token(
|
33
|
+
creds_dct: ta.Mapping[str, ta.Any],
|
34
|
+
*,
|
35
|
+
client: http.HttpClient | None = None,
|
36
|
+
) -> str:
|
37
|
+
signed_jwt = generate_gcp_jwt(creds_dct)
|
38
|
+
resp = http.request(
|
39
|
+
creds_dct['token_uri'],
|
40
|
+
'POST',
|
41
|
+
data=jwt.build_get_token_body(signed_jwt).encode('utf-8'),
|
42
|
+
headers={
|
43
|
+
http.consts.HEADER_CONTENT_TYPE: http.consts.CONTENT_TYPE_FORM_URLENCODED,
|
44
|
+
},
|
45
|
+
client=client,
|
46
|
+
)
|
47
|
+
resp_dct = json.loads(check.not_none(resp.data).decode('utf-8'))
|
48
|
+
return resp_dct['access_token']
|
ominfra/deploy/_executor.py
CHANGED
@@ -725,7 +725,10 @@ class UuidObjMarshaler(ObjMarshaler):
|
|
725
725
|
return uuid.UUID(o)
|
726
726
|
|
727
727
|
|
728
|
-
|
728
|
+
##
|
729
|
+
|
730
|
+
|
731
|
+
_DEFAULT_OBJ_MARSHALERS: ta.Dict[ta.Any, ObjMarshaler] = {
|
729
732
|
**{t: NopObjMarshaler() for t in (type(None),)},
|
730
733
|
**{t: CastObjMarshaler(t) for t in (int, float, str, bool)},
|
731
734
|
**{t: Base64ObjMarshaler(t) for t in (bytes, bytearray)},
|
@@ -754,20 +757,19 @@ _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES: ta.Dict[ta.Any, type] = {
|
|
754
757
|
}
|
755
758
|
|
756
759
|
|
757
|
-
def
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
760
|
+
def _make_obj_marshaler(
|
761
|
+
ty: ta.Any,
|
762
|
+
rec: ta.Callable[[ta.Any], ObjMarshaler],
|
763
|
+
*,
|
764
|
+
nonstrict_dataclasses: bool = False,
|
765
|
+
) -> ObjMarshaler:
|
764
766
|
if isinstance(ty, type):
|
765
767
|
if abc.ABC in ty.__bases__:
|
766
768
|
impls = [ # type: ignore
|
767
769
|
PolymorphicObjMarshaler.Impl(
|
768
770
|
ity,
|
769
771
|
ity.__qualname__,
|
770
|
-
|
772
|
+
rec(ity),
|
771
773
|
)
|
772
774
|
for ity in deep_subclasses(ty)
|
773
775
|
if abc.ABC not in ity.__bases__
|
@@ -783,7 +785,8 @@ def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
|
783
785
|
if dc.is_dataclass(ty):
|
784
786
|
return DataclassObjMarshaler(
|
785
787
|
ty,
|
786
|
-
{f.name:
|
788
|
+
{f.name: rec(f.type) for f in dc.fields(ty)},
|
789
|
+
nonstrict=nonstrict_dataclasses,
|
787
790
|
)
|
788
791
|
|
789
792
|
if is_generic_alias(ty):
|
@@ -793,7 +796,7 @@ def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
|
793
796
|
pass
|
794
797
|
else:
|
795
798
|
k, v = ta.get_args(ty)
|
796
|
-
return MappingObjMarshaler(mt,
|
799
|
+
return MappingObjMarshaler(mt, rec(k), rec(v))
|
797
800
|
|
798
801
|
try:
|
799
802
|
st = _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES[ta.get_origin(ty)]
|
@@ -801,33 +804,71 @@ def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
|
801
804
|
pass
|
802
805
|
else:
|
803
806
|
[e] = ta.get_args(ty)
|
804
|
-
return IterableObjMarshaler(st,
|
807
|
+
return IterableObjMarshaler(st, rec(e))
|
805
808
|
|
806
809
|
if is_union_alias(ty):
|
807
|
-
return OptionalObjMarshaler(
|
810
|
+
return OptionalObjMarshaler(rec(get_optional_alias_arg(ty)))
|
808
811
|
|
809
812
|
raise TypeError(ty)
|
810
813
|
|
811
814
|
|
812
|
-
|
813
|
-
try:
|
814
|
-
return _OBJ_MARSHALERS[ty]
|
815
|
-
except KeyError:
|
816
|
-
pass
|
815
|
+
##
|
817
816
|
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
817
|
+
|
818
|
+
_OBJ_MARSHALERS_LOCK = threading.RLock()
|
819
|
+
|
820
|
+
_OBJ_MARSHALERS: ta.Dict[ta.Any, ObjMarshaler] = dict(_DEFAULT_OBJ_MARSHALERS)
|
821
|
+
|
822
|
+
_OBJ_MARSHALER_PROXIES: ta.Dict[ta.Any, ProxyObjMarshaler] = {}
|
823
|
+
|
824
|
+
|
825
|
+
def register_opj_marshaler(ty: ta.Any, m: ObjMarshaler) -> None:
|
826
|
+
with _OBJ_MARSHALERS_LOCK:
|
827
|
+
if ty in _OBJ_MARSHALERS:
|
828
|
+
raise KeyError(ty)
|
827
829
|
_OBJ_MARSHALERS[ty] = m
|
830
|
+
|
831
|
+
|
832
|
+
def get_obj_marshaler(
|
833
|
+
ty: ta.Any,
|
834
|
+
*,
|
835
|
+
no_cache: bool = False,
|
836
|
+
**kwargs: ta.Any,
|
837
|
+
) -> ObjMarshaler:
|
838
|
+
with _OBJ_MARSHALERS_LOCK:
|
839
|
+
if not no_cache:
|
840
|
+
try:
|
841
|
+
return _OBJ_MARSHALERS[ty]
|
842
|
+
except KeyError:
|
843
|
+
pass
|
844
|
+
|
845
|
+
try:
|
846
|
+
return _OBJ_MARSHALER_PROXIES[ty]
|
847
|
+
except KeyError:
|
848
|
+
pass
|
849
|
+
|
850
|
+
rec = functools.partial(
|
851
|
+
get_obj_marshaler,
|
852
|
+
no_cache=no_cache,
|
853
|
+
**kwargs,
|
854
|
+
)
|
855
|
+
|
856
|
+
p = ProxyObjMarshaler()
|
857
|
+
_OBJ_MARSHALER_PROXIES[ty] = p
|
858
|
+
try:
|
859
|
+
m = _make_obj_marshaler(ty, rec, **kwargs)
|
860
|
+
finally:
|
861
|
+
del _OBJ_MARSHALER_PROXIES[ty]
|
862
|
+
p.m = m
|
863
|
+
|
864
|
+
if not no_cache:
|
865
|
+
_OBJ_MARSHALERS[ty] = m
|
828
866
|
return m
|
829
867
|
|
830
868
|
|
869
|
+
##
|
870
|
+
|
871
|
+
|
831
872
|
def marshal_obj(o: ta.Any, ty: ta.Any = None) -> ta.Any:
|
832
873
|
return get_obj_marshaler(ty if ty is not None else type(o)).marshal(o)
|
833
874
|
|
ominfra/pyremote/_runcommands.py
CHANGED
@@ -808,7 +808,10 @@ class UuidObjMarshaler(ObjMarshaler):
|
|
808
808
|
return uuid.UUID(o)
|
809
809
|
|
810
810
|
|
811
|
-
|
811
|
+
##
|
812
|
+
|
813
|
+
|
814
|
+
_DEFAULT_OBJ_MARSHALERS: ta.Dict[ta.Any, ObjMarshaler] = {
|
812
815
|
**{t: NopObjMarshaler() for t in (type(None),)},
|
813
816
|
**{t: CastObjMarshaler(t) for t in (int, float, str, bool)},
|
814
817
|
**{t: Base64ObjMarshaler(t) for t in (bytes, bytearray)},
|
@@ -837,20 +840,19 @@ _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES: ta.Dict[ta.Any, type] = {
|
|
837
840
|
}
|
838
841
|
|
839
842
|
|
840
|
-
def
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
845
|
-
|
846
|
-
def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
843
|
+
def _make_obj_marshaler(
|
844
|
+
ty: ta.Any,
|
845
|
+
rec: ta.Callable[[ta.Any], ObjMarshaler],
|
846
|
+
*,
|
847
|
+
nonstrict_dataclasses: bool = False,
|
848
|
+
) -> ObjMarshaler:
|
847
849
|
if isinstance(ty, type):
|
848
850
|
if abc.ABC in ty.__bases__:
|
849
851
|
impls = [ # type: ignore
|
850
852
|
PolymorphicObjMarshaler.Impl(
|
851
853
|
ity,
|
852
854
|
ity.__qualname__,
|
853
|
-
|
855
|
+
rec(ity),
|
854
856
|
)
|
855
857
|
for ity in deep_subclasses(ty)
|
856
858
|
if abc.ABC not in ity.__bases__
|
@@ -866,7 +868,8 @@ def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
|
866
868
|
if dc.is_dataclass(ty):
|
867
869
|
return DataclassObjMarshaler(
|
868
870
|
ty,
|
869
|
-
{f.name:
|
871
|
+
{f.name: rec(f.type) for f in dc.fields(ty)},
|
872
|
+
nonstrict=nonstrict_dataclasses,
|
870
873
|
)
|
871
874
|
|
872
875
|
if is_generic_alias(ty):
|
@@ -876,7 +879,7 @@ def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
|
876
879
|
pass
|
877
880
|
else:
|
878
881
|
k, v = ta.get_args(ty)
|
879
|
-
return MappingObjMarshaler(mt,
|
882
|
+
return MappingObjMarshaler(mt, rec(k), rec(v))
|
880
883
|
|
881
884
|
try:
|
882
885
|
st = _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES[ta.get_origin(ty)]
|
@@ -884,33 +887,71 @@ def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
|
884
887
|
pass
|
885
888
|
else:
|
886
889
|
[e] = ta.get_args(ty)
|
887
|
-
return IterableObjMarshaler(st,
|
890
|
+
return IterableObjMarshaler(st, rec(e))
|
888
891
|
|
889
892
|
if is_union_alias(ty):
|
890
|
-
return OptionalObjMarshaler(
|
893
|
+
return OptionalObjMarshaler(rec(get_optional_alias_arg(ty)))
|
891
894
|
|
892
895
|
raise TypeError(ty)
|
893
896
|
|
894
897
|
|
895
|
-
|
896
|
-
try:
|
897
|
-
return _OBJ_MARSHALERS[ty]
|
898
|
-
except KeyError:
|
899
|
-
pass
|
898
|
+
##
|
900
899
|
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
|
907
|
-
|
908
|
-
|
909
|
-
|
900
|
+
|
901
|
+
_OBJ_MARSHALERS_LOCK = threading.RLock()
|
902
|
+
|
903
|
+
_OBJ_MARSHALERS: ta.Dict[ta.Any, ObjMarshaler] = dict(_DEFAULT_OBJ_MARSHALERS)
|
904
|
+
|
905
|
+
_OBJ_MARSHALER_PROXIES: ta.Dict[ta.Any, ProxyObjMarshaler] = {}
|
906
|
+
|
907
|
+
|
908
|
+
def register_opj_marshaler(ty: ta.Any, m: ObjMarshaler) -> None:
|
909
|
+
with _OBJ_MARSHALERS_LOCK:
|
910
|
+
if ty in _OBJ_MARSHALERS:
|
911
|
+
raise KeyError(ty)
|
910
912
|
_OBJ_MARSHALERS[ty] = m
|
913
|
+
|
914
|
+
|
915
|
+
def get_obj_marshaler(
|
916
|
+
ty: ta.Any,
|
917
|
+
*,
|
918
|
+
no_cache: bool = False,
|
919
|
+
**kwargs: ta.Any,
|
920
|
+
) -> ObjMarshaler:
|
921
|
+
with _OBJ_MARSHALERS_LOCK:
|
922
|
+
if not no_cache:
|
923
|
+
try:
|
924
|
+
return _OBJ_MARSHALERS[ty]
|
925
|
+
except KeyError:
|
926
|
+
pass
|
927
|
+
|
928
|
+
try:
|
929
|
+
return _OBJ_MARSHALER_PROXIES[ty]
|
930
|
+
except KeyError:
|
931
|
+
pass
|
932
|
+
|
933
|
+
rec = functools.partial(
|
934
|
+
get_obj_marshaler,
|
935
|
+
no_cache=no_cache,
|
936
|
+
**kwargs,
|
937
|
+
)
|
938
|
+
|
939
|
+
p = ProxyObjMarshaler()
|
940
|
+
_OBJ_MARSHALER_PROXIES[ty] = p
|
941
|
+
try:
|
942
|
+
m = _make_obj_marshaler(ty, rec, **kwargs)
|
943
|
+
finally:
|
944
|
+
del _OBJ_MARSHALER_PROXIES[ty]
|
945
|
+
p.m = m
|
946
|
+
|
947
|
+
if not no_cache:
|
948
|
+
_OBJ_MARSHALERS[ty] = m
|
911
949
|
return m
|
912
950
|
|
913
951
|
|
952
|
+
##
|
953
|
+
|
954
|
+
|
914
955
|
def marshal_obj(o: ta.Any, ty: ta.Any = None) -> ta.Any:
|
915
956
|
return get_obj_marshaler(ty if ty is not None else type(o)).marshal(o)
|
916
957
|
|
ominfra/scripts/journald2aws.py
CHANGED
@@ -1343,7 +1343,10 @@ class UuidObjMarshaler(ObjMarshaler):
|
|
1343
1343
|
return uuid.UUID(o)
|
1344
1344
|
|
1345
1345
|
|
1346
|
-
|
1346
|
+
##
|
1347
|
+
|
1348
|
+
|
1349
|
+
_DEFAULT_OBJ_MARSHALERS: ta.Dict[ta.Any, ObjMarshaler] = {
|
1347
1350
|
**{t: NopObjMarshaler() for t in (type(None),)},
|
1348
1351
|
**{t: CastObjMarshaler(t) for t in (int, float, str, bool)},
|
1349
1352
|
**{t: Base64ObjMarshaler(t) for t in (bytes, bytearray)},
|
@@ -1372,20 +1375,19 @@ _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES: ta.Dict[ta.Any, type] = {
|
|
1372
1375
|
}
|
1373
1376
|
|
1374
1377
|
|
1375
|
-
def
|
1376
|
-
|
1377
|
-
|
1378
|
-
|
1379
|
-
|
1380
|
-
|
1381
|
-
def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
1378
|
+
def _make_obj_marshaler(
|
1379
|
+
ty: ta.Any,
|
1380
|
+
rec: ta.Callable[[ta.Any], ObjMarshaler],
|
1381
|
+
*,
|
1382
|
+
nonstrict_dataclasses: bool = False,
|
1383
|
+
) -> ObjMarshaler:
|
1382
1384
|
if isinstance(ty, type):
|
1383
1385
|
if abc.ABC in ty.__bases__:
|
1384
1386
|
impls = [ # type: ignore
|
1385
1387
|
PolymorphicObjMarshaler.Impl(
|
1386
1388
|
ity,
|
1387
1389
|
ity.__qualname__,
|
1388
|
-
|
1390
|
+
rec(ity),
|
1389
1391
|
)
|
1390
1392
|
for ity in deep_subclasses(ty)
|
1391
1393
|
if abc.ABC not in ity.__bases__
|
@@ -1401,7 +1403,8 @@ def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
|
1401
1403
|
if dc.is_dataclass(ty):
|
1402
1404
|
return DataclassObjMarshaler(
|
1403
1405
|
ty,
|
1404
|
-
{f.name:
|
1406
|
+
{f.name: rec(f.type) for f in dc.fields(ty)},
|
1407
|
+
nonstrict=nonstrict_dataclasses,
|
1405
1408
|
)
|
1406
1409
|
|
1407
1410
|
if is_generic_alias(ty):
|
@@ -1411,7 +1414,7 @@ def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
|
1411
1414
|
pass
|
1412
1415
|
else:
|
1413
1416
|
k, v = ta.get_args(ty)
|
1414
|
-
return MappingObjMarshaler(mt,
|
1417
|
+
return MappingObjMarshaler(mt, rec(k), rec(v))
|
1415
1418
|
|
1416
1419
|
try:
|
1417
1420
|
st = _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES[ta.get_origin(ty)]
|
@@ -1419,33 +1422,71 @@ def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
|
1419
1422
|
pass
|
1420
1423
|
else:
|
1421
1424
|
[e] = ta.get_args(ty)
|
1422
|
-
return IterableObjMarshaler(st,
|
1425
|
+
return IterableObjMarshaler(st, rec(e))
|
1423
1426
|
|
1424
1427
|
if is_union_alias(ty):
|
1425
|
-
return OptionalObjMarshaler(
|
1428
|
+
return OptionalObjMarshaler(rec(get_optional_alias_arg(ty)))
|
1426
1429
|
|
1427
1430
|
raise TypeError(ty)
|
1428
1431
|
|
1429
1432
|
|
1430
|
-
|
1431
|
-
try:
|
1432
|
-
return _OBJ_MARSHALERS[ty]
|
1433
|
-
except KeyError:
|
1434
|
-
pass
|
1433
|
+
##
|
1435
1434
|
|
1436
|
-
|
1437
|
-
|
1438
|
-
|
1439
|
-
|
1440
|
-
|
1441
|
-
|
1442
|
-
|
1443
|
-
|
1444
|
-
|
1435
|
+
|
1436
|
+
_OBJ_MARSHALERS_LOCK = threading.RLock()
|
1437
|
+
|
1438
|
+
_OBJ_MARSHALERS: ta.Dict[ta.Any, ObjMarshaler] = dict(_DEFAULT_OBJ_MARSHALERS)
|
1439
|
+
|
1440
|
+
_OBJ_MARSHALER_PROXIES: ta.Dict[ta.Any, ProxyObjMarshaler] = {}
|
1441
|
+
|
1442
|
+
|
1443
|
+
def register_opj_marshaler(ty: ta.Any, m: ObjMarshaler) -> None:
|
1444
|
+
with _OBJ_MARSHALERS_LOCK:
|
1445
|
+
if ty in _OBJ_MARSHALERS:
|
1446
|
+
raise KeyError(ty)
|
1445
1447
|
_OBJ_MARSHALERS[ty] = m
|
1448
|
+
|
1449
|
+
|
1450
|
+
def get_obj_marshaler(
|
1451
|
+
ty: ta.Any,
|
1452
|
+
*,
|
1453
|
+
no_cache: bool = False,
|
1454
|
+
**kwargs: ta.Any,
|
1455
|
+
) -> ObjMarshaler:
|
1456
|
+
with _OBJ_MARSHALERS_LOCK:
|
1457
|
+
if not no_cache:
|
1458
|
+
try:
|
1459
|
+
return _OBJ_MARSHALERS[ty]
|
1460
|
+
except KeyError:
|
1461
|
+
pass
|
1462
|
+
|
1463
|
+
try:
|
1464
|
+
return _OBJ_MARSHALER_PROXIES[ty]
|
1465
|
+
except KeyError:
|
1466
|
+
pass
|
1467
|
+
|
1468
|
+
rec = functools.partial(
|
1469
|
+
get_obj_marshaler,
|
1470
|
+
no_cache=no_cache,
|
1471
|
+
**kwargs,
|
1472
|
+
)
|
1473
|
+
|
1474
|
+
p = ProxyObjMarshaler()
|
1475
|
+
_OBJ_MARSHALER_PROXIES[ty] = p
|
1476
|
+
try:
|
1477
|
+
m = _make_obj_marshaler(ty, rec, **kwargs)
|
1478
|
+
finally:
|
1479
|
+
del _OBJ_MARSHALER_PROXIES[ty]
|
1480
|
+
p.m = m
|
1481
|
+
|
1482
|
+
if not no_cache:
|
1483
|
+
_OBJ_MARSHALERS[ty] = m
|
1446
1484
|
return m
|
1447
1485
|
|
1448
1486
|
|
1487
|
+
##
|
1488
|
+
|
1489
|
+
|
1449
1490
|
def marshal_obj(o: ta.Any, ty: ta.Any = None) -> ta.Any:
|
1450
1491
|
return get_obj_marshaler(ty if ty is not None else type(o)).marshal(o)
|
1451
1492
|
|
ominfra/scripts/supervisor.py
CHANGED
@@ -1470,7 +1470,10 @@ class UuidObjMarshaler(ObjMarshaler):
|
|
1470
1470
|
return uuid.UUID(o)
|
1471
1471
|
|
1472
1472
|
|
1473
|
-
|
1473
|
+
##
|
1474
|
+
|
1475
|
+
|
1476
|
+
_DEFAULT_OBJ_MARSHALERS: ta.Dict[ta.Any, ObjMarshaler] = {
|
1474
1477
|
**{t: NopObjMarshaler() for t in (type(None),)},
|
1475
1478
|
**{t: CastObjMarshaler(t) for t in (int, float, str, bool)},
|
1476
1479
|
**{t: Base64ObjMarshaler(t) for t in (bytes, bytearray)},
|
@@ -1499,20 +1502,19 @@ _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES: ta.Dict[ta.Any, type] = {
|
|
1499
1502
|
}
|
1500
1503
|
|
1501
1504
|
|
1502
|
-
def
|
1503
|
-
|
1504
|
-
|
1505
|
-
|
1506
|
-
|
1507
|
-
|
1508
|
-
def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
1505
|
+
def _make_obj_marshaler(
|
1506
|
+
ty: ta.Any,
|
1507
|
+
rec: ta.Callable[[ta.Any], ObjMarshaler],
|
1508
|
+
*,
|
1509
|
+
nonstrict_dataclasses: bool = False,
|
1510
|
+
) -> ObjMarshaler:
|
1509
1511
|
if isinstance(ty, type):
|
1510
1512
|
if abc.ABC in ty.__bases__:
|
1511
1513
|
impls = [ # type: ignore
|
1512
1514
|
PolymorphicObjMarshaler.Impl(
|
1513
1515
|
ity,
|
1514
1516
|
ity.__qualname__,
|
1515
|
-
|
1517
|
+
rec(ity),
|
1516
1518
|
)
|
1517
1519
|
for ity in deep_subclasses(ty)
|
1518
1520
|
if abc.ABC not in ity.__bases__
|
@@ -1528,7 +1530,8 @@ def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
|
1528
1530
|
if dc.is_dataclass(ty):
|
1529
1531
|
return DataclassObjMarshaler(
|
1530
1532
|
ty,
|
1531
|
-
{f.name:
|
1533
|
+
{f.name: rec(f.type) for f in dc.fields(ty)},
|
1534
|
+
nonstrict=nonstrict_dataclasses,
|
1532
1535
|
)
|
1533
1536
|
|
1534
1537
|
if is_generic_alias(ty):
|
@@ -1538,7 +1541,7 @@ def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
|
1538
1541
|
pass
|
1539
1542
|
else:
|
1540
1543
|
k, v = ta.get_args(ty)
|
1541
|
-
return MappingObjMarshaler(mt,
|
1544
|
+
return MappingObjMarshaler(mt, rec(k), rec(v))
|
1542
1545
|
|
1543
1546
|
try:
|
1544
1547
|
st = _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES[ta.get_origin(ty)]
|
@@ -1546,33 +1549,71 @@ def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
|
|
1546
1549
|
pass
|
1547
1550
|
else:
|
1548
1551
|
[e] = ta.get_args(ty)
|
1549
|
-
return IterableObjMarshaler(st,
|
1552
|
+
return IterableObjMarshaler(st, rec(e))
|
1550
1553
|
|
1551
1554
|
if is_union_alias(ty):
|
1552
|
-
return OptionalObjMarshaler(
|
1555
|
+
return OptionalObjMarshaler(rec(get_optional_alias_arg(ty)))
|
1553
1556
|
|
1554
1557
|
raise TypeError(ty)
|
1555
1558
|
|
1556
1559
|
|
1557
|
-
|
1558
|
-
try:
|
1559
|
-
return _OBJ_MARSHALERS[ty]
|
1560
|
-
except KeyError:
|
1561
|
-
pass
|
1560
|
+
##
|
1562
1561
|
|
1563
|
-
|
1564
|
-
|
1565
|
-
|
1566
|
-
|
1567
|
-
|
1568
|
-
|
1569
|
-
|
1570
|
-
|
1571
|
-
|
1562
|
+
|
1563
|
+
_OBJ_MARSHALERS_LOCK = threading.RLock()
|
1564
|
+
|
1565
|
+
_OBJ_MARSHALERS: ta.Dict[ta.Any, ObjMarshaler] = dict(_DEFAULT_OBJ_MARSHALERS)
|
1566
|
+
|
1567
|
+
_OBJ_MARSHALER_PROXIES: ta.Dict[ta.Any, ProxyObjMarshaler] = {}
|
1568
|
+
|
1569
|
+
|
1570
|
+
def register_opj_marshaler(ty: ta.Any, m: ObjMarshaler) -> None:
|
1571
|
+
with _OBJ_MARSHALERS_LOCK:
|
1572
|
+
if ty in _OBJ_MARSHALERS:
|
1573
|
+
raise KeyError(ty)
|
1572
1574
|
_OBJ_MARSHALERS[ty] = m
|
1575
|
+
|
1576
|
+
|
1577
|
+
def get_obj_marshaler(
|
1578
|
+
ty: ta.Any,
|
1579
|
+
*,
|
1580
|
+
no_cache: bool = False,
|
1581
|
+
**kwargs: ta.Any,
|
1582
|
+
) -> ObjMarshaler:
|
1583
|
+
with _OBJ_MARSHALERS_LOCK:
|
1584
|
+
if not no_cache:
|
1585
|
+
try:
|
1586
|
+
return _OBJ_MARSHALERS[ty]
|
1587
|
+
except KeyError:
|
1588
|
+
pass
|
1589
|
+
|
1590
|
+
try:
|
1591
|
+
return _OBJ_MARSHALER_PROXIES[ty]
|
1592
|
+
except KeyError:
|
1593
|
+
pass
|
1594
|
+
|
1595
|
+
rec = functools.partial(
|
1596
|
+
get_obj_marshaler,
|
1597
|
+
no_cache=no_cache,
|
1598
|
+
**kwargs,
|
1599
|
+
)
|
1600
|
+
|
1601
|
+
p = ProxyObjMarshaler()
|
1602
|
+
_OBJ_MARSHALER_PROXIES[ty] = p
|
1603
|
+
try:
|
1604
|
+
m = _make_obj_marshaler(ty, rec, **kwargs)
|
1605
|
+
finally:
|
1606
|
+
del _OBJ_MARSHALER_PROXIES[ty]
|
1607
|
+
p.m = m
|
1608
|
+
|
1609
|
+
if not no_cache:
|
1610
|
+
_OBJ_MARSHALERS[ty] = m
|
1573
1611
|
return m
|
1574
1612
|
|
1575
1613
|
|
1614
|
+
##
|
1615
|
+
|
1616
|
+
|
1576
1617
|
def marshal_obj(o: ta.Any, ty: ta.Any = None) -> ta.Any:
|
1577
1618
|
return get_obj_marshaler(ty if ty is not None else type(o)).marshal(o)
|
1578
1619
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ominfra
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev105
|
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.
|
16
|
-
Requires-Dist: omlish ==0.0.0.
|
15
|
+
Requires-Dist: omdev ==0.0.0.dev105
|
16
|
+
Requires-Dist: omlish ==0.0.0.dev105
|
17
17
|
Provides-Extra: all
|
18
18
|
Requires-Dist: paramiko ~=3.5 ; extra == 'all'
|
19
19
|
Requires-Dist: asyncssh ~=2.18 ; extra == 'all'
|
@@ -17,8 +17,10 @@ ominfra/clouds/aws/journald2aws/cursor.py,sha256=tQ7O6BHlEdaalbiI_Rqagj0aHfdtTQ_
|
|
17
17
|
ominfra/clouds/aws/journald2aws/driver.py,sha256=8jiuEpOgKFSucpEJBBTBiSVg6L_tA4alUNK-I788HWU,5452
|
18
18
|
ominfra/clouds/aws/journald2aws/main.py,sha256=xFkEhkYKtFfW0XRfY0UaX_gd_FU66WTZOMCyiIaPY3E,2237
|
19
19
|
ominfra/clouds/aws/journald2aws/poster.py,sha256=hz1XuctW8GtLmfjhRvCFY6py52D4BzXHYny5XKFpHSA,2833
|
20
|
+
ominfra/clouds/gcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
|
+
ominfra/clouds/gcp/auth.py,sha256=3PyfRJNgajjMqJFem3SKui0CqGeHEsZlvbRhuxFcZG8,1348
|
20
22
|
ominfra/deploy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
|
-
ominfra/deploy/_executor.py,sha256=
|
23
|
+
ominfra/deploy/_executor.py,sha256=3_ndcukzPt6Pc-5Cfnxz4OFjOYJefuTYM6ouijRjhTs,34042
|
22
24
|
ominfra/deploy/configs.py,sha256=qi0kwT7G2NH7dXLOQic-u6R3yeadup_QtvrjwWIggbM,435
|
23
25
|
ominfra/deploy/remote.py,sha256=6ACmpXU1uBdyGs3Xsp97ktKFq30cJlzN9LRWNUWlGY4,2144
|
24
26
|
ominfra/deploy/executor/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
@@ -51,12 +53,12 @@ ominfra/journald/tailer.py,sha256=-CTQPkDQUBJJOpQCueFDsF5VmlfPSaSrbrGB505SUuM,36
|
|
51
53
|
ominfra/manage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
52
54
|
ominfra/manage/manage.py,sha256=BttL8LFEknHZE_h2Pt5dAqbfUkv6qy43WI0raXBZ1a8,151
|
53
55
|
ominfra/pyremote/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
54
|
-
ominfra/pyremote/_runcommands.py,sha256=
|
56
|
+
ominfra/pyremote/_runcommands.py,sha256=IGFDDcmXJDmhGv7AFAAjkCJc615YQGUsNvn5vTAYReY,27878
|
55
57
|
ominfra/pyremote/bootstrap.py,sha256=RvMO3YGaN1E4sgUi1JEtiPak8cjvqtc_vRCq1yqbeZg,3370
|
56
58
|
ominfra/pyremote/runcommands.py,sha256=bviS0_TDIoZVAe4h-_iavbvJtVSFu8lnk7fQ5iasCWE,1571
|
57
59
|
ominfra/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
58
|
-
ominfra/scripts/journald2aws.py,sha256=
|
59
|
-
ominfra/scripts/supervisor.py,sha256=
|
60
|
+
ominfra/scripts/journald2aws.py,sha256=ZI6SppxsDEwnjk0zaBmAmhyi3-3VVbWubDkeGz_DEU8,98035
|
61
|
+
ominfra/scripts/supervisor.py,sha256=Qf6WKD_4EkC_5QWimApONAAs3lvcAKK2X7nOaYDex48,116162
|
60
62
|
ominfra/supervisor/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
61
63
|
ominfra/supervisor/__main__.py,sha256=usW9jjq5JPe_2SL8H5PrjDdksO75MX85Ir0HFfb35eM,72
|
62
64
|
ominfra/supervisor/compat.py,sha256=Y1d_pk4eN18AbVYjDHAXMMnPwOKTFpc7JDb1uClYMsQ,5064
|
@@ -76,9 +78,9 @@ ominfra/tailscale/api.py,sha256=C5-t_b6jZXUWcy5k8bXm7CFnk73pSdrlMOgGDeGVrpw,1370
|
|
76
78
|
ominfra/tailscale/cli.py,sha256=DSGp4hn5xwOW-l_u_InKlSF6kIobxtUtVssf_73STs0,3567
|
77
79
|
ominfra/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
78
80
|
ominfra/tools/listresources.py,sha256=4qVg5txsb10EHhvqXXeM6gJ2jx9LbroEnPydDv1uXs0,6176
|
79
|
-
ominfra-0.0.0.
|
80
|
-
ominfra-0.0.0.
|
81
|
-
ominfra-0.0.0.
|
82
|
-
ominfra-0.0.0.
|
83
|
-
ominfra-0.0.0.
|
84
|
-
ominfra-0.0.0.
|
81
|
+
ominfra-0.0.0.dev105.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
82
|
+
ominfra-0.0.0.dev105.dist-info/METADATA,sha256=MJdBtSIcEZd79i2YGFHZTDTZzV_zDtpwRVLNYNcn0cw,742
|
83
|
+
ominfra-0.0.0.dev105.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
84
|
+
ominfra-0.0.0.dev105.dist-info/entry_points.txt,sha256=kgecQ2MgGrM9qK744BoKS3tMesaC3yjLnl9pa5CRczg,37
|
85
|
+
ominfra-0.0.0.dev105.dist-info/top_level.txt,sha256=E-b2OHkk_AOBLXHYZQ2EOFKl-_6uOGd8EjeG-Zy6h_w,8
|
86
|
+
ominfra-0.0.0.dev105.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|