ominfra 0.0.0.dev149__py3-none-any.whl → 0.0.0.dev150__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/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.dev150.dist-info}/METADATA +3 -3
- {ominfra-0.0.0.dev149.dist-info → ominfra-0.0.0.dev150.dist-info}/RECORD +30 -30
- {ominfra-0.0.0.dev149.dist-info → ominfra-0.0.0.dev150.dist-info}/LICENSE +0 -0
- {ominfra-0.0.0.dev149.dist-info → ominfra-0.0.0.dev150.dist-info}/WHEEL +0 -0
- {ominfra-0.0.0.dev149.dist-info → ominfra-0.0.0.dev150.dist-info}/entry_points.txt +0 -0
- {ominfra-0.0.0.dev149.dist-info → ominfra-0.0.0.dev150.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]
|
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
|
)
|