ominfra 0.0.0.dev149__py3-none-any.whl → 0.0.0.dev151__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- ominfra/clouds/aws/auth.py +7 -9
- ominfra/clouds/aws/journald2aws/driver.py +4 -4
- ominfra/clouds/aws/logs.py +4 -5
- ominfra/clouds/gcp/auth.py +1 -1
- ominfra/configs.py +3 -4
- ominfra/journald/messages.py +2 -2
- ominfra/journald/tailer.py +2 -2
- ominfra/manage/commands/base.py +2 -2
- ominfra/manage/commands/interp.py +3 -3
- ominfra/manage/commands/subprocess.py +3 -4
- ominfra/manage/deploy/paths.py +12 -15
- ominfra/manage/main.py +72 -75
- ominfra/manage/remote/_main.py +6 -7
- ominfra/manage/remote/execution.py +7 -10
- ominfra/manage/remote/spawning.py +3 -3
- ominfra/scripts/journald2aws.py +449 -93
- ominfra/scripts/manage.py +770 -186
- ominfra/scripts/supervisor.py +1137 -781
- ominfra/supervisor/groupsimpl.py +2 -2
- ominfra/supervisor/http.py +5 -5
- ominfra/supervisor/main.py +1 -1
- ominfra/supervisor/processimpl.py +2 -2
- ominfra/supervisor/spawningimpl.py +8 -9
- ominfra/supervisor/supervisor.py +2 -2
- {ominfra-0.0.0.dev149.dist-info → ominfra-0.0.0.dev151.dist-info}/METADATA +3 -3
- {ominfra-0.0.0.dev149.dist-info → ominfra-0.0.0.dev151.dist-info}/RECORD +30 -30
- {ominfra-0.0.0.dev149.dist-info → ominfra-0.0.0.dev151.dist-info}/LICENSE +0 -0
- {ominfra-0.0.0.dev149.dist-info → ominfra-0.0.0.dev151.dist-info}/WHEEL +0 -0
- {ominfra-0.0.0.dev149.dist-info → ominfra-0.0.0.dev151.dist-info}/entry_points.txt +0 -0
- {ominfra-0.0.0.dev149.dist-info → ominfra-0.0.0.dev151.dist-info}/top_level.txt +0 -0
ominfra/scripts/journald2aws.py
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
import abc
|
8
8
|
import argparse
|
9
9
|
import base64
|
10
|
+
import collections
|
10
11
|
import collections.abc
|
11
12
|
import contextlib
|
12
13
|
import dataclasses as dc
|
@@ -62,6 +63,11 @@ CallableT = ta.TypeVar('CallableT', bound=ta.Callable)
|
|
62
63
|
|
63
64
|
# ../../../../omlish/lite/check.py
|
64
65
|
SizedT = ta.TypeVar('SizedT', bound=ta.Sized)
|
66
|
+
CheckMessage = ta.Union[str, ta.Callable[..., ta.Optional[str]], None] # ta.TypeAlias
|
67
|
+
CheckLateConfigureFn = ta.Callable[['Checks'], None] # ta.TypeAlias
|
68
|
+
CheckOnRaiseFn = ta.Callable[[Exception], None] # ta.TypeAlias
|
69
|
+
CheckExceptionFactory = ta.Callable[..., Exception] # ta.TypeAlias
|
70
|
+
CheckArgsRenderer = ta.Callable[..., ta.Optional[str]] # ta.TypeAlias
|
65
71
|
|
66
72
|
# ../../../../omlish/lite/contextmanagers.py
|
67
73
|
ExitStackedT = ta.TypeVar('ExitStackedT', bound='ExitStacked')
|
@@ -952,104 +958,454 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
|
|
952
958
|
|
953
959
|
########################################
|
954
960
|
# ../../../../../omlish/lite/check.py
|
961
|
+
"""
|
962
|
+
TODO:
|
963
|
+
- def maybe(v: lang.Maybe[T])
|
964
|
+
- patch / override lite.check ?
|
965
|
+
- checker interface?
|
966
|
+
"""
|
967
|
+
|
968
|
+
|
969
|
+
##
|
970
|
+
|
971
|
+
|
972
|
+
class Checks:
|
973
|
+
def __init__(self) -> None:
|
974
|
+
super().__init__()
|
975
|
+
|
976
|
+
self._config_lock = threading.RLock()
|
977
|
+
self._on_raise_fns: ta.Sequence[CheckOnRaiseFn] = []
|
978
|
+
self._exception_factory: CheckExceptionFactory = Checks.default_exception_factory
|
979
|
+
self._args_renderer: ta.Optional[CheckArgsRenderer] = None
|
980
|
+
self._late_configure_fns: ta.Sequence[CheckLateConfigureFn] = []
|
981
|
+
|
982
|
+
@staticmethod
|
983
|
+
def default_exception_factory(exc_cls: ta.Type[Exception], *args, **kwargs) -> Exception:
|
984
|
+
return exc_cls(*args, **kwargs) # noqa
|
955
985
|
|
986
|
+
#
|
956
987
|
|
957
|
-
def
|
958
|
-
|
959
|
-
|
960
|
-
return v
|
988
|
+
def register_on_raise(self, fn: CheckOnRaiseFn) -> None:
|
989
|
+
with self._config_lock:
|
990
|
+
self._on_raise_fns = [*self._on_raise_fns, fn]
|
961
991
|
|
992
|
+
def unregister_on_raise(self, fn: CheckOnRaiseFn) -> None:
|
993
|
+
with self._config_lock:
|
994
|
+
self._on_raise_fns = [e for e in self._on_raise_fns if e != fn]
|
962
995
|
|
963
|
-
|
964
|
-
if isinstance(v, spec):
|
965
|
-
raise TypeError(v)
|
966
|
-
return v
|
996
|
+
#
|
967
997
|
|
998
|
+
def set_exception_factory(self, factory: CheckExceptionFactory) -> None:
|
999
|
+
self._exception_factory = factory
|
968
1000
|
|
969
|
-
def
|
970
|
-
|
971
|
-
raise ValueError(v)
|
1001
|
+
def set_args_renderer(self, renderer: ta.Optional[CheckArgsRenderer]) -> None:
|
1002
|
+
self._args_renderer = renderer
|
972
1003
|
|
1004
|
+
#
|
973
1005
|
|
974
|
-
def
|
975
|
-
|
976
|
-
|
977
|
-
return v
|
1006
|
+
def register_late_configure(self, fn: CheckLateConfigureFn) -> None:
|
1007
|
+
with self._config_lock:
|
1008
|
+
self._late_configure_fns = [*self._late_configure_fns, fn]
|
978
1009
|
|
1010
|
+
def _late_configure(self) -> None:
|
1011
|
+
if not self._late_configure_fns:
|
1012
|
+
return
|
979
1013
|
|
980
|
-
|
981
|
-
|
982
|
-
|
983
|
-
return v
|
1014
|
+
with self._config_lock:
|
1015
|
+
if not (lc := self._late_configure_fns):
|
1016
|
+
return
|
984
1017
|
|
1018
|
+
for fn in lc:
|
1019
|
+
fn(self)
|
985
1020
|
|
986
|
-
|
987
|
-
if not v:
|
988
|
-
raise ValueError
|
989
|
-
return v
|
1021
|
+
self._late_configure_fns = []
|
990
1022
|
|
1023
|
+
#
|
991
1024
|
|
992
|
-
|
993
|
-
|
994
|
-
|
1025
|
+
class _ArgsKwargs:
|
1026
|
+
def __init__(self, *args, **kwargs):
|
1027
|
+
self.args = args
|
1028
|
+
self.kwargs = kwargs
|
995
1029
|
|
1030
|
+
def _raise(
|
1031
|
+
self,
|
1032
|
+
exception_type: ta.Type[Exception],
|
1033
|
+
default_message: str,
|
1034
|
+
message: CheckMessage,
|
1035
|
+
ak: _ArgsKwargs = _ArgsKwargs(),
|
1036
|
+
*,
|
1037
|
+
render_fmt: ta.Optional[str] = None,
|
1038
|
+
) -> ta.NoReturn:
|
1039
|
+
exc_args = ()
|
1040
|
+
if callable(message):
|
1041
|
+
message = ta.cast(ta.Callable, message)(*ak.args, **ak.kwargs)
|
1042
|
+
if isinstance(message, tuple):
|
1043
|
+
message, *exc_args = message # type: ignore
|
1044
|
+
|
1045
|
+
if message is None:
|
1046
|
+
message = default_message
|
1047
|
+
|
1048
|
+
self._late_configure()
|
1049
|
+
|
1050
|
+
if render_fmt is not None and (af := self._args_renderer) is not None:
|
1051
|
+
rendered_args = af(render_fmt, *ak.args)
|
1052
|
+
if rendered_args is not None:
|
1053
|
+
message = f'{message} : {rendered_args}'
|
1054
|
+
|
1055
|
+
exc = self._exception_factory(
|
1056
|
+
exception_type,
|
1057
|
+
message,
|
1058
|
+
*exc_args,
|
1059
|
+
*ak.args,
|
1060
|
+
**ak.kwargs,
|
1061
|
+
)
|
996
1062
|
|
997
|
-
|
998
|
-
|
999
|
-
raise ValueError(msg)
|
1063
|
+
for fn in self._on_raise_fns:
|
1064
|
+
fn(exc)
|
1000
1065
|
|
1066
|
+
raise exc
|
1001
1067
|
|
1002
|
-
|
1003
|
-
if l != r:
|
1004
|
-
raise ValueError(l, r)
|
1005
|
-
return l
|
1068
|
+
#
|
1006
1069
|
|
1070
|
+
def _unpack_isinstance_spec(self, spec: ta.Any) -> tuple:
|
1071
|
+
if isinstance(spec, type):
|
1072
|
+
return (spec,)
|
1073
|
+
if not isinstance(spec, tuple):
|
1074
|
+
spec = (spec,)
|
1075
|
+
if None in spec:
|
1076
|
+
spec = tuple(filter(None, spec)) + (None.__class__,) # noqa
|
1077
|
+
if ta.Any in spec:
|
1078
|
+
spec = (object,)
|
1079
|
+
return spec
|
1080
|
+
|
1081
|
+
def isinstance(self, v: ta.Any, spec: ta.Union[ta.Type[T], tuple], msg: CheckMessage = None) -> T: # noqa
|
1082
|
+
if not isinstance(v, self._unpack_isinstance_spec(spec)):
|
1083
|
+
self._raise(
|
1084
|
+
TypeError,
|
1085
|
+
'Must be instance',
|
1086
|
+
msg,
|
1087
|
+
Checks._ArgsKwargs(v, spec),
|
1088
|
+
render_fmt='not isinstance(%s, %s)',
|
1089
|
+
)
|
1007
1090
|
|
1008
|
-
|
1009
|
-
if l == r:
|
1010
|
-
raise ValueError(l, r)
|
1011
|
-
return l
|
1091
|
+
return v
|
1012
1092
|
|
1093
|
+
def of_isinstance(self, spec: ta.Union[ta.Type[T], tuple], msg: CheckMessage = None) -> ta.Callable[[ta.Any], T]:
|
1094
|
+
def inner(v):
|
1095
|
+
return self.isinstance(v, self._unpack_isinstance_spec(spec), msg)
|
1013
1096
|
|
1014
|
-
|
1015
|
-
if l is not r:
|
1016
|
-
raise ValueError(l, r)
|
1017
|
-
return l
|
1097
|
+
return inner
|
1018
1098
|
|
1099
|
+
def cast(self, v: ta.Any, cls: ta.Type[T], msg: CheckMessage = None) -> T: # noqa
|
1100
|
+
if not isinstance(v, cls):
|
1101
|
+
self._raise(
|
1102
|
+
TypeError,
|
1103
|
+
'Must be instance',
|
1104
|
+
msg,
|
1105
|
+
Checks._ArgsKwargs(v, cls),
|
1106
|
+
)
|
1019
1107
|
|
1020
|
-
|
1021
|
-
if l is r:
|
1022
|
-
raise ValueError(l, r)
|
1023
|
-
return l
|
1108
|
+
return v
|
1024
1109
|
|
1110
|
+
def of_cast(self, cls: ta.Type[T], msg: CheckMessage = None) -> ta.Callable[[T], T]:
|
1111
|
+
def inner(v):
|
1112
|
+
return self.cast(v, cls, msg)
|
1025
1113
|
|
1026
|
-
|
1027
|
-
if v not in c:
|
1028
|
-
raise ValueError(v, c)
|
1029
|
-
return v
|
1114
|
+
return inner
|
1030
1115
|
|
1116
|
+
def not_isinstance(self, v: T, spec: ta.Any, msg: CheckMessage = None) -> T: # noqa
|
1117
|
+
if isinstance(v, self._unpack_isinstance_spec(spec)):
|
1118
|
+
self._raise(
|
1119
|
+
TypeError,
|
1120
|
+
'Must not be instance',
|
1121
|
+
msg,
|
1122
|
+
Checks._ArgsKwargs(v, spec),
|
1123
|
+
render_fmt='isinstance(%s, %s)',
|
1124
|
+
)
|
1031
1125
|
|
1032
|
-
|
1033
|
-
if v in c:
|
1034
|
-
raise ValueError(v, c)
|
1035
|
-
return v
|
1126
|
+
return v
|
1036
1127
|
|
1128
|
+
def of_not_isinstance(self, spec: ta.Any, msg: CheckMessage = None) -> ta.Callable[[T], T]:
|
1129
|
+
def inner(v):
|
1130
|
+
return self.not_isinstance(v, self._unpack_isinstance_spec(spec), msg)
|
1037
1131
|
|
1038
|
-
|
1039
|
-
[v] = vs
|
1040
|
-
return v
|
1132
|
+
return inner
|
1041
1133
|
|
1134
|
+
##
|
1135
|
+
|
1136
|
+
def issubclass(self, v: ta.Type[T], spec: ta.Any, msg: CheckMessage = None) -> ta.Type[T]: # noqa
|
1137
|
+
if not issubclass(v, spec):
|
1138
|
+
self._raise(
|
1139
|
+
TypeError,
|
1140
|
+
'Must be subclass',
|
1141
|
+
msg,
|
1142
|
+
Checks._ArgsKwargs(v, spec),
|
1143
|
+
render_fmt='not issubclass(%s, %s)',
|
1144
|
+
)
|
1145
|
+
|
1146
|
+
return v
|
1147
|
+
|
1148
|
+
def not_issubclass(self, v: ta.Type[T], spec: ta.Any, msg: CheckMessage = None) -> ta.Type[T]: # noqa
|
1149
|
+
if issubclass(v, spec):
|
1150
|
+
self._raise(
|
1151
|
+
TypeError,
|
1152
|
+
'Must not be subclass',
|
1153
|
+
msg,
|
1154
|
+
Checks._ArgsKwargs(v, spec),
|
1155
|
+
render_fmt='issubclass(%s, %s)',
|
1156
|
+
)
|
1157
|
+
|
1158
|
+
return v
|
1159
|
+
|
1160
|
+
#
|
1161
|
+
|
1162
|
+
def in_(self, v: T, c: ta.Container[T], msg: CheckMessage = None) -> T:
|
1163
|
+
if v not in c:
|
1164
|
+
self._raise(
|
1165
|
+
ValueError,
|
1166
|
+
'Must be in',
|
1167
|
+
msg,
|
1168
|
+
Checks._ArgsKwargs(v, c),
|
1169
|
+
render_fmt='%s not in %s',
|
1170
|
+
)
|
1171
|
+
|
1172
|
+
return v
|
1173
|
+
|
1174
|
+
def not_in(self, v: T, c: ta.Container[T], msg: CheckMessage = None) -> T:
|
1175
|
+
if v in c:
|
1176
|
+
self._raise(
|
1177
|
+
ValueError,
|
1178
|
+
'Must not be in',
|
1179
|
+
msg,
|
1180
|
+
Checks._ArgsKwargs(v, c),
|
1181
|
+
render_fmt='%s in %s',
|
1182
|
+
)
|
1183
|
+
|
1184
|
+
return v
|
1185
|
+
|
1186
|
+
def empty(self, v: SizedT, msg: CheckMessage = None) -> SizedT:
|
1187
|
+
if len(v) != 0:
|
1188
|
+
self._raise(
|
1189
|
+
ValueError,
|
1190
|
+
'Must be empty',
|
1191
|
+
msg,
|
1192
|
+
Checks._ArgsKwargs(v),
|
1193
|
+
render_fmt='%s',
|
1194
|
+
)
|
1195
|
+
|
1196
|
+
return v
|
1197
|
+
|
1198
|
+
def iterempty(self, v: ta.Iterable[T], msg: CheckMessage = None) -> ta.Iterable[T]:
|
1199
|
+
it = iter(v)
|
1200
|
+
try:
|
1201
|
+
next(it)
|
1202
|
+
except StopIteration:
|
1203
|
+
pass
|
1204
|
+
else:
|
1205
|
+
self._raise(
|
1206
|
+
ValueError,
|
1207
|
+
'Must be empty',
|
1208
|
+
msg,
|
1209
|
+
Checks._ArgsKwargs(v),
|
1210
|
+
render_fmt='%s',
|
1211
|
+
)
|
1212
|
+
|
1213
|
+
return v
|
1214
|
+
|
1215
|
+
def not_empty(self, v: SizedT, msg: CheckMessage = None) -> SizedT:
|
1216
|
+
if len(v) == 0:
|
1217
|
+
self._raise(
|
1218
|
+
ValueError,
|
1219
|
+
'Must not be empty',
|
1220
|
+
msg,
|
1221
|
+
Checks._ArgsKwargs(v),
|
1222
|
+
render_fmt='%s',
|
1223
|
+
)
|
1042
1224
|
|
1043
|
-
|
1044
|
-
|
1045
|
-
|
1046
|
-
|
1225
|
+
return v
|
1226
|
+
|
1227
|
+
def unique(self, it: ta.Iterable[T], msg: CheckMessage = None) -> ta.Iterable[T]:
|
1228
|
+
dupes = [e for e, c in collections.Counter(it).items() if c > 1]
|
1229
|
+
if dupes:
|
1230
|
+
self._raise(
|
1231
|
+
ValueError,
|
1232
|
+
'Must be unique',
|
1233
|
+
msg,
|
1234
|
+
Checks._ArgsKwargs(it, dupes),
|
1235
|
+
)
|
1236
|
+
|
1237
|
+
return it
|
1238
|
+
|
1239
|
+
def single(self, obj: ta.Iterable[T], message: CheckMessage = None) -> T:
|
1240
|
+
try:
|
1241
|
+
[value] = obj
|
1242
|
+
except ValueError:
|
1243
|
+
self._raise(
|
1244
|
+
ValueError,
|
1245
|
+
'Must be single',
|
1246
|
+
message,
|
1247
|
+
Checks._ArgsKwargs(obj),
|
1248
|
+
render_fmt='%s',
|
1249
|
+
)
|
1250
|
+
|
1251
|
+
return value
|
1252
|
+
|
1253
|
+
def opt_single(self, obj: ta.Iterable[T], message: CheckMessage = None) -> ta.Optional[T]:
|
1254
|
+
it = iter(obj)
|
1255
|
+
try:
|
1256
|
+
value = next(it)
|
1257
|
+
except StopIteration:
|
1258
|
+
return None
|
1259
|
+
|
1260
|
+
try:
|
1261
|
+
next(it)
|
1262
|
+
except StopIteration:
|
1263
|
+
return value # noqa
|
1264
|
+
|
1265
|
+
self._raise(
|
1266
|
+
ValueError,
|
1267
|
+
'Must be empty or single',
|
1268
|
+
message,
|
1269
|
+
Checks._ArgsKwargs(obj),
|
1270
|
+
render_fmt='%s',
|
1271
|
+
)
|
1272
|
+
|
1273
|
+
raise RuntimeError # noqa
|
1274
|
+
|
1275
|
+
#
|
1276
|
+
|
1277
|
+
def none(self, v: ta.Any, msg: CheckMessage = None) -> None:
|
1278
|
+
if v is not None:
|
1279
|
+
self._raise(
|
1280
|
+
ValueError,
|
1281
|
+
'Must be None',
|
1282
|
+
msg,
|
1283
|
+
Checks._ArgsKwargs(v),
|
1284
|
+
render_fmt='%s',
|
1285
|
+
)
|
1286
|
+
|
1287
|
+
def not_none(self, v: ta.Optional[T], msg: CheckMessage = None) -> T:
|
1288
|
+
if v is None:
|
1289
|
+
self._raise(
|
1290
|
+
ValueError,
|
1291
|
+
'Must not be None',
|
1292
|
+
msg,
|
1293
|
+
Checks._ArgsKwargs(v),
|
1294
|
+
render_fmt='%s',
|
1295
|
+
)
|
1296
|
+
|
1297
|
+
return v
|
1298
|
+
|
1299
|
+
#
|
1300
|
+
|
1301
|
+
def equal(self, v: T, o: ta.Any, msg: CheckMessage = None) -> T:
|
1302
|
+
if o != v:
|
1303
|
+
self._raise(
|
1304
|
+
ValueError,
|
1305
|
+
'Must be equal',
|
1306
|
+
msg,
|
1307
|
+
Checks._ArgsKwargs(v, o),
|
1308
|
+
render_fmt='%s != %s',
|
1309
|
+
)
|
1310
|
+
|
1311
|
+
return v
|
1312
|
+
|
1313
|
+
def is_(self, v: T, o: ta.Any, msg: CheckMessage = None) -> T:
|
1314
|
+
if o is not v:
|
1315
|
+
self._raise(
|
1316
|
+
ValueError,
|
1317
|
+
'Must be the same',
|
1318
|
+
msg,
|
1319
|
+
Checks._ArgsKwargs(v, o),
|
1320
|
+
render_fmt='%s is not %s',
|
1321
|
+
)
|
1322
|
+
|
1323
|
+
return v
|
1324
|
+
|
1325
|
+
def is_not(self, v: T, o: ta.Any, msg: CheckMessage = None) -> T:
|
1326
|
+
if o is v:
|
1327
|
+
self._raise(
|
1328
|
+
ValueError,
|
1329
|
+
'Must not be the same',
|
1330
|
+
msg,
|
1331
|
+
Checks._ArgsKwargs(v, o),
|
1332
|
+
render_fmt='%s is %s',
|
1333
|
+
)
|
1334
|
+
|
1335
|
+
return v
|
1336
|
+
|
1337
|
+
def callable(self, v: T, msg: CheckMessage = None) -> T: # noqa
|
1338
|
+
if not callable(v):
|
1339
|
+
self._raise(
|
1340
|
+
TypeError,
|
1341
|
+
'Must be callable',
|
1342
|
+
msg,
|
1343
|
+
Checks._ArgsKwargs(v),
|
1344
|
+
render_fmt='%s',
|
1345
|
+
)
|
1346
|
+
|
1347
|
+
return v # type: ignore
|
1348
|
+
|
1349
|
+
def non_empty_str(self, v: ta.Optional[str], msg: CheckMessage = None) -> str:
|
1350
|
+
if not isinstance(v, str) or not v:
|
1351
|
+
self._raise(
|
1352
|
+
ValueError,
|
1353
|
+
'Must be non-empty str',
|
1354
|
+
msg,
|
1355
|
+
Checks._ArgsKwargs(v),
|
1356
|
+
render_fmt='%s',
|
1357
|
+
)
|
1358
|
+
|
1359
|
+
return v
|
1360
|
+
|
1361
|
+
def replacing(self, expected: ta.Any, old: ta.Any, new: T, msg: CheckMessage = None) -> T:
|
1362
|
+
if old != expected:
|
1363
|
+
self._raise(
|
1364
|
+
ValueError,
|
1365
|
+
'Must be replacing',
|
1366
|
+
msg,
|
1367
|
+
Checks._ArgsKwargs(expected, old, new),
|
1368
|
+
render_fmt='%s -> %s -> %s',
|
1369
|
+
)
|
1370
|
+
|
1371
|
+
return new
|
1372
|
+
|
1373
|
+
def replacing_none(self, old: ta.Any, new: T, msg: CheckMessage = None) -> T:
|
1374
|
+
if old is not None:
|
1375
|
+
self._raise(
|
1376
|
+
ValueError,
|
1377
|
+
'Must be replacing None',
|
1378
|
+
msg,
|
1379
|
+
Checks._ArgsKwargs(old, new),
|
1380
|
+
render_fmt='%s -> %s',
|
1381
|
+
)
|
1382
|
+
|
1383
|
+
return new
|
1384
|
+
|
1385
|
+
#
|
1386
|
+
|
1387
|
+
def arg(self, v: bool, msg: CheckMessage = None) -> None:
|
1388
|
+
if not v:
|
1389
|
+
self._raise(
|
1390
|
+
RuntimeError,
|
1391
|
+
'Argument condition not met',
|
1392
|
+
msg,
|
1393
|
+
Checks._ArgsKwargs(v),
|
1394
|
+
render_fmt='%s',
|
1395
|
+
)
|
1396
|
+
|
1397
|
+
def state(self, v: bool, msg: CheckMessage = None) -> None:
|
1398
|
+
if not v:
|
1399
|
+
self._raise(
|
1400
|
+
RuntimeError,
|
1401
|
+
'State condition not met',
|
1402
|
+
msg,
|
1403
|
+
Checks._ArgsKwargs(v),
|
1404
|
+
render_fmt='%s',
|
1405
|
+
)
|
1047
1406
|
|
1048
1407
|
|
1049
|
-
|
1050
|
-
if not len(v):
|
1051
|
-
raise ValueError(v)
|
1052
|
-
return v
|
1408
|
+
check = Checks()
|
1053
1409
|
|
1054
1410
|
|
1055
1411
|
########################################
|
@@ -1324,7 +1680,7 @@ class AwsSigner:
|
|
1324
1680
|
@staticmethod
|
1325
1681
|
def _host_from_url(url: str) -> str:
|
1326
1682
|
url_parts = urllib.parse.urlsplit(url)
|
1327
|
-
host =
|
1683
|
+
host = check.non_empty_str(url_parts.hostname)
|
1328
1684
|
default_ports = {
|
1329
1685
|
'http': 80,
|
1330
1686
|
'https': 443,
|
@@ -1338,7 +1694,7 @@ class AwsSigner:
|
|
1338
1694
|
def _lower_case_http_map(d: ta.Mapping[str, ta.Sequence[str]]) -> ta.Mapping[str, ta.Sequence[str]]:
|
1339
1695
|
o: ta.Dict[str, ta.List[str]] = {}
|
1340
1696
|
for k, vs in d.items():
|
1341
|
-
o.setdefault(k.lower(), []).extend(
|
1697
|
+
o.setdefault(k.lower(), []).extend(check.not_isinstance(vs, str))
|
1342
1698
|
return o
|
1343
1699
|
|
1344
1700
|
#
|
@@ -1371,12 +1727,12 @@ class AwsSigner:
|
|
1371
1727
|
])
|
1372
1728
|
|
1373
1729
|
def _validate_request(self, req: Request) -> None:
|
1374
|
-
|
1375
|
-
|
1730
|
+
check.non_empty_str(req.method)
|
1731
|
+
check.equal(req.method.upper(), req.method)
|
1376
1732
|
for k, vs in req.headers.items():
|
1377
|
-
|
1733
|
+
check.equal(k.strip(), k)
|
1378
1734
|
for v in vs:
|
1379
|
-
|
1735
|
+
check.equal(v.strip(), v)
|
1380
1736
|
|
1381
1737
|
|
1382
1738
|
AwsSigner._EMPTY_SHA256 = AwsSigner._sha256(b'') # noqa
|
@@ -1669,7 +2025,7 @@ class DelimitingBuffer:
|
|
1669
2025
|
) -> None:
|
1670
2026
|
super().__init__()
|
1671
2027
|
|
1672
|
-
self._delimiters = frozenset(
|
2028
|
+
self._delimiters = frozenset(check.isinstance(d, int) for d in delimiters)
|
1673
2029
|
self._keep_ends = keep_ends
|
1674
2030
|
self._max_size = max_size
|
1675
2031
|
|
@@ -1700,7 +2056,7 @@ class DelimitingBuffer:
|
|
1700
2056
|
return r
|
1701
2057
|
|
1702
2058
|
def _append_and_reset(self, chunk: bytes) -> bytes:
|
1703
|
-
buf =
|
2059
|
+
buf = check.not_none(self._buf)
|
1704
2060
|
if not buf.tell():
|
1705
2061
|
return chunk
|
1706
2062
|
|
@@ -1822,7 +2178,7 @@ class IncrementalWriteBuffer:
|
|
1822
2178
|
) -> None:
|
1823
2179
|
super().__init__()
|
1824
2180
|
|
1825
|
-
|
2181
|
+
check.not_empty(data)
|
1826
2182
|
self._len = len(data)
|
1827
2183
|
self._write_size = write_size
|
1828
2184
|
|
@@ -1837,11 +2193,11 @@ class IncrementalWriteBuffer:
|
|
1837
2193
|
return self._len - self._pos
|
1838
2194
|
|
1839
2195
|
def write(self, fn: ta.Callable[[bytes], int]) -> int:
|
1840
|
-
lst =
|
2196
|
+
lst = check.not_empty(self._lst)
|
1841
2197
|
|
1842
2198
|
t = 0
|
1843
2199
|
for i, d in enumerate(lst): # noqa
|
1844
|
-
n = fn(
|
2200
|
+
n = fn(check.not_empty(d))
|
1845
2201
|
if not n:
|
1846
2202
|
break
|
1847
2203
|
t += n
|
@@ -1867,7 +2223,7 @@ class ExitStacked:
|
|
1867
2223
|
_exit_stack: ta.Optional[contextlib.ExitStack] = None
|
1868
2224
|
|
1869
2225
|
def __enter__(self: ExitStackedT) -> ExitStackedT:
|
1870
|
-
|
2226
|
+
check.state(self._exit_stack is None)
|
1871
2227
|
es = self._exit_stack = contextlib.ExitStack()
|
1872
2228
|
es.__enter__()
|
1873
2229
|
return self
|
@@ -1882,7 +2238,7 @@ class ExitStacked:
|
|
1882
2238
|
pass
|
1883
2239
|
|
1884
2240
|
def _enter_context(self, cm: ta.ContextManager[T]) -> T:
|
1885
|
-
es =
|
2241
|
+
es = check.not_none(self._exit_stack)
|
1886
2242
|
return es.enter_context(cm)
|
1887
2243
|
|
1888
2244
|
|
@@ -2225,10 +2581,10 @@ class ProxyObjMarshaler(ObjMarshaler):
|
|
2225
2581
|
m: ta.Optional[ObjMarshaler] = None
|
2226
2582
|
|
2227
2583
|
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
2228
|
-
return
|
2584
|
+
return check.not_none(self.m).marshal(o, ctx)
|
2229
2585
|
|
2230
2586
|
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
2231
|
-
return
|
2587
|
+
return check.not_none(self.m).unmarshal(o, ctx)
|
2232
2588
|
|
2233
2589
|
|
2234
2590
|
@dc.dataclass(frozen=True)
|
@@ -2387,19 +2743,19 @@ class DatetimeObjMarshaler(ObjMarshaler):
|
|
2387
2743
|
|
2388
2744
|
class DecimalObjMarshaler(ObjMarshaler):
|
2389
2745
|
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
2390
|
-
return str(
|
2746
|
+
return str(check.isinstance(o, decimal.Decimal))
|
2391
2747
|
|
2392
2748
|
def unmarshal(self, v: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
2393
|
-
return decimal.Decimal(
|
2749
|
+
return decimal.Decimal(check.isinstance(v, str))
|
2394
2750
|
|
2395
2751
|
|
2396
2752
|
class FractionObjMarshaler(ObjMarshaler):
|
2397
2753
|
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
2398
|
-
fr =
|
2754
|
+
fr = check.isinstance(o, fractions.Fraction)
|
2399
2755
|
return [fr.numerator, fr.denominator]
|
2400
2756
|
|
2401
2757
|
def unmarshal(self, v: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
2402
|
-
num, denom =
|
2758
|
+
num, denom = check.isinstance(v, list)
|
2403
2759
|
return fractions.Fraction(num, denom)
|
2404
2760
|
|
2405
2761
|
|
@@ -2775,8 +3131,8 @@ class AwsLogMessageBuilder:
|
|
2775
3131
|
) -> None:
|
2776
3132
|
super().__init__()
|
2777
3133
|
|
2778
|
-
self._log_group_name =
|
2779
|
-
self._log_stream_name =
|
3134
|
+
self._log_group_name = check.non_empty_str(log_group_name)
|
3135
|
+
self._log_stream_name = check.non_empty_str(log_stream_name)
|
2780
3136
|
|
2781
3137
|
if url is None:
|
2782
3138
|
url = self.DEFAULT_URL.format(region_name=region_name)
|
@@ -2850,7 +3206,7 @@ class AwsLogMessageBuilder:
|
|
2850
3206
|
|
2851
3207
|
post = AwsLogMessageBuilder.Post(
|
2852
3208
|
url=self._url,
|
2853
|
-
headers={k:
|
3209
|
+
headers={k: check.single(v) for k, v in sig_req.headers.items()},
|
2854
3210
|
data=sig_req.payload,
|
2855
3211
|
)
|
2856
3212
|
|
@@ -2918,7 +3274,7 @@ def build_config_named_children(
|
|
2918
3274
|
lst: ta.List[ConfigMapping] = []
|
2919
3275
|
if isinstance(o, ta.Mapping):
|
2920
3276
|
for k, v in o.items():
|
2921
|
-
|
3277
|
+
check.isinstance(v, ta.Mapping)
|
2922
3278
|
if name_key in v:
|
2923
3279
|
n = v[name_key]
|
2924
3280
|
if k != n:
|
@@ -2928,7 +3284,7 @@ def build_config_named_children(
|
|
2928
3284
|
lst.append({name_key: k, **v})
|
2929
3285
|
|
2930
3286
|
else:
|
2931
|
-
|
3287
|
+
check.not_isinstance(o, str)
|
2932
3288
|
lst.extend(o)
|
2933
3289
|
|
2934
3290
|
seen = set()
|
@@ -3010,7 +3366,7 @@ class JournalctlMessageBuilder:
|
|
3010
3366
|
def feed(self, data: bytes) -> ta.Sequence[JournalctlMessage]:
|
3011
3367
|
ret: ta.List[JournalctlMessage] = []
|
3012
3368
|
for line in self._buf.feed(data):
|
3013
|
-
ret.append(self._make_message(
|
3369
|
+
ret.append(self._make_message(check.isinstance(line, bytes)))
|
3014
3370
|
return ret
|
3015
3371
|
|
3016
3372
|
|
@@ -3948,7 +4304,7 @@ class JournalctlTailerWorker(ThreadWorker):
|
|
3948
4304
|
stdout=subprocess.PIPE,
|
3949
4305
|
) as self._proc:
|
3950
4306
|
try:
|
3951
|
-
stdout =
|
4307
|
+
stdout = check.not_none(self._proc.stdout)
|
3952
4308
|
|
3953
4309
|
fd = stdout.fileno()
|
3954
4310
|
fl = fcntl.fcntl(fd, fcntl.F_GETFL)
|
@@ -4080,15 +4436,15 @@ class JournalctlToAwsDriver(ExitStacked):
|
|
4080
4436
|
return None
|
4081
4437
|
|
4082
4438
|
return AwsSigner.Credentials(
|
4083
|
-
access_key_id=
|
4084
|
-
secret_access_key=
|
4439
|
+
access_key_id=check.non_empty_str(self._config.aws_access_key_id),
|
4440
|
+
secret_access_key=check.non_empty_str(self._config.aws_secret_access_key),
|
4085
4441
|
)
|
4086
4442
|
|
4087
4443
|
@cached_nullary
|
4088
4444
|
def _aws_log_message_builder(self) -> AwsLogMessageBuilder:
|
4089
4445
|
return AwsLogMessageBuilder(
|
4090
4446
|
log_group_name=self._config.aws_log_group_name,
|
4091
|
-
log_stream_name=
|
4447
|
+
log_stream_name=check.non_empty_str(self._config.aws_log_stream_name),
|
4092
4448
|
region_name=self._config.aws_region_name,
|
4093
4449
|
credentials=self._aws_credentials(),
|
4094
4450
|
)
|