ominfra 0.0.0.dev209__py3-none-any.whl → 0.0.0.dev211__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- ominfra/__about__.py +0 -1
- ominfra/clouds/aws/journald2aws/main.py +0 -1
- ominfra/clouds/aws/models/base.py +44 -10
- ominfra/clouds/aws/models/gen/gen.py +45 -5
- ominfra/clouds/aws/models/services/ec2.py +1072 -946
- ominfra/clouds/aws/models/services/lambda_.py +111 -102
- ominfra/clouds/aws/models/services/rds.py +321 -293
- ominfra/clouds/aws/models/services/s3.py +197 -190
- ominfra/manage/main.py +0 -1
- ominfra/scripts/journald2aws.py +22 -22
- ominfra/scripts/manage.py +41 -25
- ominfra/scripts/supervisor.py +22 -22
- ominfra/supervisor/main.py +0 -1
- {ominfra-0.0.0.dev209.dist-info → ominfra-0.0.0.dev211.dist-info}/METADATA +3 -4
- {ominfra-0.0.0.dev209.dist-info → ominfra-0.0.0.dev211.dist-info}/RECORD +19 -19
- {ominfra-0.0.0.dev209.dist-info → ominfra-0.0.0.dev211.dist-info}/LICENSE +0 -0
- {ominfra-0.0.0.dev209.dist-info → ominfra-0.0.0.dev211.dist-info}/WHEEL +0 -0
- {ominfra-0.0.0.dev209.dist-info → ominfra-0.0.0.dev211.dist-info}/entry_points.txt +0 -0
- {ominfra-0.0.0.dev209.dist-info → ominfra-0.0.0.dev211.dist-info}/top_level.txt +0 -0
ominfra/__about__.py
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import abc
|
1
2
|
import typing as ta
|
2
3
|
|
3
4
|
from omlish import cached
|
@@ -16,10 +17,33 @@ Timestamp = ta.NewType('Timestamp', str)
|
|
16
17
|
##
|
17
18
|
|
18
19
|
|
19
|
-
|
20
|
+
@dc.dataclass(frozen=True)
|
21
|
+
class Tag:
|
22
|
+
key: str
|
23
|
+
value: str
|
24
|
+
|
25
|
+
|
26
|
+
TagList: ta.TypeAlias = ta.Sequence[Tag]
|
27
|
+
|
28
|
+
|
29
|
+
##
|
30
|
+
|
31
|
+
|
32
|
+
class ValueType(abc.ABC): # noqa
|
20
33
|
pass
|
21
34
|
|
22
35
|
|
36
|
+
@dc.dataclass(frozen=True)
|
37
|
+
class ListValueType(ValueType):
|
38
|
+
e: type
|
39
|
+
|
40
|
+
|
41
|
+
@dc.dataclass(frozen=True)
|
42
|
+
class MapValueType(ValueType):
|
43
|
+
k: type
|
44
|
+
v: type
|
45
|
+
|
46
|
+
|
23
47
|
##
|
24
48
|
|
25
49
|
|
@@ -71,27 +95,27 @@ class ShapeInfo:
|
|
71
95
|
|
72
96
|
#
|
73
97
|
|
74
|
-
@cached.
|
98
|
+
@cached.property
|
75
99
|
def fields(self) -> ta.Sequence[dc.Field]:
|
76
100
|
check.state(dc.is_immediate_dataclass(self._cls))
|
77
101
|
fls = dc.fields(self._cls)
|
78
102
|
return fls # noqa
|
79
103
|
|
80
|
-
@cached.
|
104
|
+
@cached.property
|
81
105
|
def fields_by_name(self) -> ta.Mapping[str, dc.Field]:
|
82
|
-
return col.make_map_by(lambda fl: fl.name, self.fields
|
106
|
+
return col.make_map_by(lambda fl: fl.name, self.fields, strict=True)
|
83
107
|
|
84
|
-
@cached.
|
108
|
+
@cached.property
|
85
109
|
def fields_by_member_name(self) -> ta.Mapping[str, dc.Field]:
|
86
110
|
return col.make_map(
|
87
|
-
[(n, f) for f in self.fields
|
111
|
+
[(n, f) for f in self.fields if (n := f.metadata.get(MEMBER_NAME)) is not None],
|
88
112
|
strict=True,
|
89
113
|
)
|
90
114
|
|
91
|
-
@cached.
|
115
|
+
@cached.property
|
92
116
|
def fields_by_serialization_name(self) -> ta.Mapping[str, dc.Field]:
|
93
117
|
l = []
|
94
|
-
for f in self.fields
|
118
|
+
for f in self.fields:
|
95
119
|
if sn := f.metadata.get(SERIALIZATION_NAME):
|
96
120
|
l.append((sn, f))
|
97
121
|
elif mn := f.metadata.get(MEMBER_NAME):
|
@@ -99,9 +123,9 @@ class ShapeInfo:
|
|
99
123
|
return col.make_map(l, strict=True)
|
100
124
|
|
101
125
|
|
102
|
-
@dc.dataclass(frozen=True)
|
126
|
+
@dc.dataclass(frozen=True, kw_only=True)
|
103
127
|
class Shape:
|
104
|
-
__shape__: ShapeInfo
|
128
|
+
__shape__: ta.ClassVar[ShapeInfo]
|
105
129
|
|
106
130
|
def __init_subclass__(
|
107
131
|
cls,
|
@@ -132,10 +156,18 @@ class SERIALIZATION_NAME(lang.Marker): # noqa
|
|
132
156
|
pass
|
133
157
|
|
134
158
|
|
159
|
+
class VALUE_TYPE(lang.Marker): # noqa
|
160
|
+
pass
|
161
|
+
|
162
|
+
|
163
|
+
#
|
164
|
+
|
165
|
+
|
135
166
|
def field_metadata(
|
136
167
|
*,
|
137
168
|
member_name: str | None = None,
|
138
169
|
serialization_name: str | None = None,
|
170
|
+
value_type: ValueType | None = None,
|
139
171
|
**kwargs: ta.Any,
|
140
172
|
) -> dict[ta.Any, ta.Any]:
|
141
173
|
md = {**common_metadata(**kwargs)}
|
@@ -144,6 +176,8 @@ def field_metadata(
|
|
144
176
|
md[MEMBER_NAME] = member_name
|
145
177
|
if serialization_name is not None:
|
146
178
|
md[SERIALIZATION_NAME] = serialization_name
|
179
|
+
if value_type is not None:
|
180
|
+
md[VALUE_TYPE] = value_type
|
147
181
|
|
148
182
|
return md
|
149
183
|
|
@@ -164,6 +164,7 @@ class ModelGen:
|
|
164
164
|
'DateTime': '_base.DateTime',
|
165
165
|
'MillisecondDateTime': '_base.MillisecondDateTime',
|
166
166
|
|
167
|
+
'Tag': '_base.Tag',
|
167
168
|
'TagList': '_base.TagList',
|
168
169
|
}
|
169
170
|
|
@@ -303,6 +304,8 @@ class ModelGen:
|
|
303
304
|
san_name = self.sanitize_global_name(shape.name, upper=True)
|
304
305
|
|
305
306
|
if isinstance(shape, botocore.model.StructureShape):
|
307
|
+
rms = frozenset(shape.required_members or [])
|
308
|
+
|
306
309
|
lines: list[str] = []
|
307
310
|
|
308
311
|
mds = [
|
@@ -310,7 +313,7 @@ class ModelGen:
|
|
310
313
|
]
|
311
314
|
|
312
315
|
lines.extend([
|
313
|
-
'@_dc.dataclass(frozen=True)',
|
316
|
+
'@_dc.dataclass(frozen=True, kw_only=True)',
|
314
317
|
f'class {san_name}(',
|
315
318
|
' _base.Shape,',
|
316
319
|
*[f' {dl},' for dl in mds],
|
@@ -320,27 +323,64 @@ class ModelGen:
|
|
320
323
|
if not shape.members:
|
321
324
|
lines.append(' pass')
|
322
325
|
|
326
|
+
ms: botocore.model.Shape
|
323
327
|
for i, (mn, ms) in enumerate(shape.members.items()):
|
324
|
-
if i:
|
325
|
-
lines.append('')
|
326
|
-
fn = self.sanitize_local_name(self.demangle_name(mn))
|
327
328
|
mds = [
|
328
329
|
f'member_name={mn!r}',
|
329
330
|
]
|
331
|
+
|
330
332
|
if msn := ms.serialization.get('name'):
|
331
333
|
mds.append(f'serialization_name={msn!r}')
|
334
|
+
|
335
|
+
if isinstance(ms, botocore.model.MapShape):
|
336
|
+
ka = self.get_type_ann(
|
337
|
+
ms.key.name,
|
338
|
+
unquoted_names=unquoted_names,
|
339
|
+
) or ms.key.name
|
340
|
+
va = self.get_type_ann(
|
341
|
+
ms.value.name,
|
342
|
+
unquoted_names=unquoted_names,
|
343
|
+
) or ms.value.name
|
344
|
+
mds.append(f'value_type=_base.MapValueType({ka}, {va})')
|
345
|
+
|
346
|
+
elif isinstance(ms, botocore.model.ListShape):
|
347
|
+
ea = self.get_type_ann(
|
348
|
+
ms.member.name,
|
349
|
+
unquoted_names=unquoted_names,
|
350
|
+
) or ms.member.name
|
351
|
+
mds.append(f'value_type=_base.ListValueType({ea})')
|
352
|
+
|
332
353
|
mds.append(f'shape_name={ms.name!r}')
|
354
|
+
|
333
355
|
ma = self.get_type_ann(
|
334
356
|
ms.name,
|
335
357
|
unquoted_names=unquoted_names,
|
336
358
|
)
|
359
|
+
|
360
|
+
#
|
361
|
+
|
362
|
+
if i:
|
363
|
+
lines.append('')
|
364
|
+
|
365
|
+
fr = mn in rms
|
366
|
+
fa = ma or ms.name
|
367
|
+
if fr:
|
368
|
+
fd = ''
|
369
|
+
else:
|
370
|
+
fa += ' | None'
|
371
|
+
fd = 'default=None, '
|
372
|
+
|
373
|
+
fn = self.sanitize_local_name(self.demangle_name(mn))
|
374
|
+
|
337
375
|
fls = [
|
338
|
-
f'{fn}: {
|
376
|
+
f'{fn}: {fa} = _dc.field({fd}metadata=_base.field_metadata(',
|
339
377
|
*[f' {dl},' for dl in mds],
|
340
378
|
'))',
|
341
379
|
]
|
380
|
+
|
342
381
|
if ma is None:
|
343
382
|
fls = ['# ' + fl for fl in fls]
|
383
|
+
|
344
384
|
lines.append('\n'.join(' ' + fl for fl in fls))
|
345
385
|
|
346
386
|
return self.ShapeSrc(
|