localstack-core 4.8.2.dev3__py3-none-any.whl → 4.8.2.dev5__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.
Potentially problematic release.
This version of localstack-core might be problematic. Click here for more details.
- localstack/aws/protocol/parser.py +151 -16
- localstack/aws/protocol/serializer.py +224 -59
- localstack/aws/spec.py +1 -1
- localstack/services/ecr/resource_providers/aws_ecr_repository.py +1 -2
- localstack/version.py +2 -2
- {localstack_core-4.8.2.dev3.dist-info → localstack_core-4.8.2.dev5.dist-info}/METADATA +1 -1
- {localstack_core-4.8.2.dev3.dist-info → localstack_core-4.8.2.dev5.dist-info}/RECORD +15 -15
- localstack_core-4.8.2.dev5.dist-info/plux.json +1 -0
- localstack_core-4.8.2.dev3.dist-info/plux.json +0 -1
- {localstack_core-4.8.2.dev3.data → localstack_core-4.8.2.dev5.data}/scripts/localstack +0 -0
- {localstack_core-4.8.2.dev3.data → localstack_core-4.8.2.dev5.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.8.2.dev3.data → localstack_core-4.8.2.dev5.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.8.2.dev3.dist-info → localstack_core-4.8.2.dev5.dist-info}/WHEEL +0 -0
- {localstack_core-4.8.2.dev3.dist-info → localstack_core-4.8.2.dev5.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.8.2.dev3.dist-info → localstack_core-4.8.2.dev5.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.8.2.dev3.dist-info → localstack_core-4.8.2.dev5.dist-info}/top_level.txt +0 -0
|
@@ -19,19 +19,18 @@ The class hierarchy looks as follows:
|
|
|
19
19
|
│RequestParser│
|
|
20
20
|
└─────────────┘
|
|
21
21
|
▲ ▲ ▲
|
|
22
|
-
┌─────────────────┘ │
|
|
23
|
-
┌────────┴─────────┐ ┌─────────┴───────────┐ ┌──────────┴──────────┐ ┌──────────┴──────────┐
|
|
24
|
-
│QueryRequestParser│ │BaseRestRequestParser│ │BaseJSONRequestParser│ │BaseCBORRequestParser│
|
|
25
|
-
└──────────────────┘ └─────────────────────┘ └─────────────────────┘ └─────────────────────┘
|
|
26
|
-
▲ ▲ ▲ ▲ ▲ ▲
|
|
27
|
-
┌───────┴────────┐ ┌─────────┴──────────┐ │ │ ┌────────┴────────┐ │
|
|
28
|
-
│EC2RequestParser│ │RestXMLRequestParser│ │ │ │JSONRequestParser│ │
|
|
29
|
-
└────────────────┘ └────────────────────┘ │ │ └─────────────────┘ │
|
|
22
|
+
┌─────────────────┘ │ └────────────────────┬───────────────────────┬───────────────────────┐
|
|
23
|
+
┌────────┴─────────┐ ┌─────────┴───────────┐ ┌──────────┴──────────┐ ┌──────────┴──────────┐ ┌──────────┴───────────┐
|
|
24
|
+
│QueryRequestParser│ │BaseRestRequestParser│ │BaseJSONRequestParser│ │BaseCBORRequestParser│ │BaseRpcV2RequestParser│
|
|
25
|
+
└──────────────────┘ └─────────────────────┘ └─────────────────────┘ └─────────────────────┘ └──────────────────────┘
|
|
26
|
+
▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲
|
|
27
|
+
┌───────┴────────┐ ┌─────────┴──────────┐ │ │ ┌────────┴────────┐ │ ┌───┴─────────────┴────┐
|
|
28
|
+
│EC2RequestParser│ │RestXMLRequestParser│ │ │ │JSONRequestParser│ │ │RpcV2CBORRequestParser│
|
|
29
|
+
└────────────────┘ └────────────────────┘ │ │ └─────────────────┘ │ └──────────────────────┘
|
|
30
30
|
┌────────────────┴───┴┐ ▲ │
|
|
31
31
|
│RestJSONRequestParser│ ┌───┴──────┴──────┐
|
|
32
32
|
└─────────────────────┘ │CBORRequestParser│
|
|
33
33
|
└─────────────────┘
|
|
34
|
-
|
|
35
34
|
::
|
|
36
35
|
|
|
37
36
|
The ``RequestParser`` contains the logic that is used among all the
|
|
@@ -46,6 +45,8 @@ The classes are structured as follows:
|
|
|
46
45
|
which is shared among all different protocols.
|
|
47
46
|
* The ``BaseRestRequestParser`` contains the logic for the REST
|
|
48
47
|
protocol specifics (i.e. specific HTTP metadata parsing).
|
|
48
|
+
* The ``BaseRpcV2RequestParser`` contains the logic for the RPC v2
|
|
49
|
+
protocol specifics (special path routing, no logic about body decoding)
|
|
49
50
|
* The ``BaseJSONRequestParser`` contains the logic for the JSON body
|
|
50
51
|
parsing.
|
|
51
52
|
* The ``BaseCBORRequestParser`` contains the logic for the CBOR body
|
|
@@ -56,8 +57,9 @@ The classes are structured as follows:
|
|
|
56
57
|
* The ``CBORRequestParser`` inherits the ``json``-protocol specific
|
|
57
58
|
logic from the ``JSONRequestParser`` and the CBOR body parsing
|
|
58
59
|
from the ``BaseCBORRequestParser``.
|
|
59
|
-
* The ``QueryRequestParser``, ``RestXMLRequestParser
|
|
60
|
-
``JSONRequestParser`` have a
|
|
60
|
+
* The ``QueryRequestParser``, ``RestXMLRequestParser``,
|
|
61
|
+
``RpcV2CBORRequestParser`` and ``JSONRequestParser`` have a
|
|
62
|
+
conventional inheritance structure.
|
|
61
63
|
|
|
62
64
|
The services and their protocols are defined by using AWS's Smithy
|
|
63
65
|
(a language to define services in a - somewhat - protocol-agnostic
|
|
@@ -99,6 +101,7 @@ from cbor2._decoder import loads as cbor2_loads
|
|
|
99
101
|
from werkzeug.exceptions import BadRequest, NotFound
|
|
100
102
|
|
|
101
103
|
from localstack.aws.protocol.op_router import RestServiceOperationRouter
|
|
104
|
+
from localstack.aws.spec import ProtocolName
|
|
102
105
|
from localstack.http import Request
|
|
103
106
|
|
|
104
107
|
|
|
@@ -1200,7 +1203,7 @@ class CBORRequestParser(BaseCBORRequestParser, JSONRequestParser):
|
|
|
1200
1203
|
it for now.
|
|
1201
1204
|
"""
|
|
1202
1205
|
|
|
1203
|
-
# timestamp format is different from traditional CBOR
|
|
1206
|
+
# timestamp format is different from traditional CBOR, and is encoded as a milliseconds integer
|
|
1204
1207
|
TIMESTAMP_FORMAT = "unixtimestampmillis"
|
|
1205
1208
|
|
|
1206
1209
|
def _do_parse(
|
|
@@ -1244,6 +1247,132 @@ class CBORRequestParser(BaseCBORRequestParser, JSONRequestParser):
|
|
|
1244
1247
|
return super()._parse_timestamp(request, shape, node, uri_params)
|
|
1245
1248
|
|
|
1246
1249
|
|
|
1250
|
+
class BaseRpcV2RequestParser(RequestParser):
|
|
1251
|
+
"""
|
|
1252
|
+
The ``BaseRpcV2RequestParser`` is the base class for all RPC V2-based AWS service protocols.
|
|
1253
|
+
This base class handles the routing of the request, which is specific based on the path.
|
|
1254
|
+
The body decoding is done in the respective subclasses.
|
|
1255
|
+
"""
|
|
1256
|
+
|
|
1257
|
+
@_handle_exceptions
|
|
1258
|
+
def parse(self, request: Request) -> tuple[OperationModel, Any]:
|
|
1259
|
+
# see https://smithy.io/2.0/additional-specs/protocols/smithy-rpc-v2.html
|
|
1260
|
+
if request.method != "POST":
|
|
1261
|
+
raise ProtocolParserError("RPC v2 only accepts POST requests.")
|
|
1262
|
+
|
|
1263
|
+
headers = request.headers
|
|
1264
|
+
if "X-Amz-Target" in headers or "X-Amzn-Target" in headers:
|
|
1265
|
+
raise ProtocolParserError(
|
|
1266
|
+
"RPC v2 does not accept 'X-Amz-Target' or 'X-Amzn-Target'. "
|
|
1267
|
+
"Such requests are rejected for security reasons."
|
|
1268
|
+
)
|
|
1269
|
+
# TODO: add this special path handling to the ServiceNameParser to allow RPC v2 service to be properly extracted
|
|
1270
|
+
# path = '/service/{service_name}/operation/{operation_name}'
|
|
1271
|
+
# The Smithy RPCv2 CBOR protocol will only use the last four segments of the URL when routing requests.
|
|
1272
|
+
rpc_v2_params = request.path.lstrip("/").split("/")
|
|
1273
|
+
if len(rpc_v2_params) < 4 or not (
|
|
1274
|
+
operation := self.service.operation_model(rpc_v2_params[-1])
|
|
1275
|
+
):
|
|
1276
|
+
raise OperationNotFoundParserError(
|
|
1277
|
+
f"Unable to find operation for request to service "
|
|
1278
|
+
f"{self.service.service_name}: {request.method} {request.path}"
|
|
1279
|
+
)
|
|
1280
|
+
|
|
1281
|
+
# there are no URI params in RPC v2
|
|
1282
|
+
uri_params = {}
|
|
1283
|
+
shape: StructureShape = operation.input_shape
|
|
1284
|
+
final_parsed = self._do_parse(request, shape, uri_params)
|
|
1285
|
+
return operation, final_parsed
|
|
1286
|
+
|
|
1287
|
+
@_handle_exceptions
|
|
1288
|
+
def _do_parse(
|
|
1289
|
+
self, request: Request, shape: Shape, uri_params: Mapping[str, Any] = None
|
|
1290
|
+
) -> dict[str, Any]:
|
|
1291
|
+
parsed = {}
|
|
1292
|
+
if shape is not None:
|
|
1293
|
+
event_stream_name = shape.event_stream_name
|
|
1294
|
+
if event_stream_name:
|
|
1295
|
+
parsed = self._handle_event_stream(request, shape, event_stream_name)
|
|
1296
|
+
else:
|
|
1297
|
+
parsed = {}
|
|
1298
|
+
self._parse_payload(request, shape, parsed, uri_params)
|
|
1299
|
+
|
|
1300
|
+
return parsed
|
|
1301
|
+
|
|
1302
|
+
def _handle_event_stream(self, request: Request, shape: Shape, event_name: str):
|
|
1303
|
+
# TODO handle event streams
|
|
1304
|
+
raise NotImplementedError
|
|
1305
|
+
|
|
1306
|
+
def _parse_structure(
|
|
1307
|
+
self,
|
|
1308
|
+
request: Request,
|
|
1309
|
+
shape: StructureShape,
|
|
1310
|
+
node: dict | None,
|
|
1311
|
+
uri_params: Mapping[str, Any] = None,
|
|
1312
|
+
):
|
|
1313
|
+
if shape.is_document_type:
|
|
1314
|
+
final_parsed = node
|
|
1315
|
+
else:
|
|
1316
|
+
if node is None:
|
|
1317
|
+
# If the comes across the wire as "null" (None in python),
|
|
1318
|
+
# we should be returning this unchanged, instead of as an
|
|
1319
|
+
# empty dict.
|
|
1320
|
+
return None
|
|
1321
|
+
final_parsed = {}
|
|
1322
|
+
members = shape.members
|
|
1323
|
+
if shape.is_tagged_union:
|
|
1324
|
+
cleaned_value = node.copy()
|
|
1325
|
+
cleaned_value.pop("__type", None)
|
|
1326
|
+
cleaned_value = {k: v for k, v in cleaned_value.items() if v is not None}
|
|
1327
|
+
if len(cleaned_value) != 1:
|
|
1328
|
+
raise ProtocolParserError(
|
|
1329
|
+
f"Invalid service response: {shape.name} must have one and only one member set."
|
|
1330
|
+
)
|
|
1331
|
+
|
|
1332
|
+
for member_name, member_shape in members.items():
|
|
1333
|
+
member_value = node.get(member_name)
|
|
1334
|
+
if member_value is not None:
|
|
1335
|
+
final_parsed[member_name] = self._parse_shape(
|
|
1336
|
+
request, member_shape, member_value, uri_params
|
|
1337
|
+
)
|
|
1338
|
+
|
|
1339
|
+
return final_parsed
|
|
1340
|
+
|
|
1341
|
+
def _parse_payload(
|
|
1342
|
+
self,
|
|
1343
|
+
request: Request,
|
|
1344
|
+
shape: Shape,
|
|
1345
|
+
final_parsed: dict,
|
|
1346
|
+
uri_params: Mapping[str, Any] = None,
|
|
1347
|
+
) -> None:
|
|
1348
|
+
original_parsed = self._initial_body_parse(request)
|
|
1349
|
+
body_parsed = self._parse_shape(request, shape, original_parsed, uri_params)
|
|
1350
|
+
final_parsed.update(body_parsed)
|
|
1351
|
+
|
|
1352
|
+
def _initial_body_parse(self, request: Request):
|
|
1353
|
+
# This method should do the initial parsing of the
|
|
1354
|
+
# body. We still need to walk the parsed body in order
|
|
1355
|
+
# to convert types, but this method will do the first round
|
|
1356
|
+
# of parsing.
|
|
1357
|
+
raise NotImplementedError("_initial_body_parse")
|
|
1358
|
+
|
|
1359
|
+
|
|
1360
|
+
class RpcV2CBORRequestParser(BaseRpcV2RequestParser, BaseCBORRequestParser):
|
|
1361
|
+
"""
|
|
1362
|
+
The ``RpcV2CBORRequestParser`` is responsible for parsing incoming requests for services which use the
|
|
1363
|
+
``rpc-v2-cbor`` protocol. The requests for these services encode all of their parameters as CBOR in the
|
|
1364
|
+
request body.
|
|
1365
|
+
"""
|
|
1366
|
+
|
|
1367
|
+
# TODO: investigate datetime format for RpcV2CBOR protocol, which might be different than Kinesis CBOR
|
|
1368
|
+
def _initial_body_parse(self, request: Request):
|
|
1369
|
+
body_contents = request.data
|
|
1370
|
+
if body_contents == b"":
|
|
1371
|
+
return body_contents
|
|
1372
|
+
body_contents_stream = self.get_peekable_stream_from_bytes(body_contents)
|
|
1373
|
+
return self.parse_data_item(body_contents_stream)
|
|
1374
|
+
|
|
1375
|
+
|
|
1247
1376
|
class EC2RequestParser(QueryRequestParser):
|
|
1248
1377
|
"""
|
|
1249
1378
|
The ``EC2RequestParser`` is responsible for parsing incoming requests for services which use the ``ec2``
|
|
@@ -1422,11 +1551,12 @@ class SQSQueryRequestParser(QueryRequestParser):
|
|
|
1422
1551
|
|
|
1423
1552
|
|
|
1424
1553
|
@functools.cache
|
|
1425
|
-
def create_parser(service: ServiceModel) -> RequestParser:
|
|
1554
|
+
def create_parser(service: ServiceModel, protocol: ProtocolName | None = None) -> RequestParser:
|
|
1426
1555
|
"""
|
|
1427
1556
|
Creates the right parser for the given service model.
|
|
1428
1557
|
|
|
1429
1558
|
:param service: to create the parser for
|
|
1559
|
+
:param protocol: the protocol for the parser. If not provided, fallback to the service's default protocol
|
|
1430
1560
|
:return: RequestParser which can handle the protocol of the service
|
|
1431
1561
|
"""
|
|
1432
1562
|
# Unfortunately, some services show subtle differences in their parsing or operation detection behavior, even though
|
|
@@ -1444,17 +1574,22 @@ def create_parser(service: ServiceModel) -> RequestParser:
|
|
|
1444
1574
|
"rest-json": RestJSONRequestParser,
|
|
1445
1575
|
"rest-xml": RestXMLRequestParser,
|
|
1446
1576
|
"ec2": EC2RequestParser,
|
|
1577
|
+
"smithy-rpc-v2-cbor": RpcV2CBORRequestParser,
|
|
1447
1578
|
# TODO: implement multi-protocol support for Kinesis, so that it can uses the `cbor` protocol and remove
|
|
1448
1579
|
# CBOR handling from JSONRequestParser
|
|
1449
1580
|
# this is not an "official" protocol defined from the spec, but is derived from ``json``
|
|
1450
1581
|
}
|
|
1451
1582
|
|
|
1583
|
+
# TODO: do we want to add a check if the user-defined protocol is part of the available ones in the ServiceModel?
|
|
1584
|
+
# or should it be checked once
|
|
1585
|
+
service_protocol = protocol or service.protocol
|
|
1586
|
+
|
|
1452
1587
|
# Try to select a service- and protocol-specific parser implementation
|
|
1453
1588
|
if (
|
|
1454
1589
|
service.service_name in service_specific_parsers
|
|
1455
|
-
and
|
|
1590
|
+
and service_protocol in service_specific_parsers[service.service_name]
|
|
1456
1591
|
):
|
|
1457
|
-
return service_specific_parsers[service.service_name][
|
|
1592
|
+
return service_specific_parsers[service.service_name][service_protocol](service)
|
|
1458
1593
|
else:
|
|
1459
1594
|
# Otherwise, pick the protocol-specific parser for the protocol of the service
|
|
1460
|
-
return protocol_specific_parsers[
|
|
1595
|
+
return protocol_specific_parsers[service_protocol](service)
|
|
@@ -14,21 +14,27 @@ The different protocols have many similarities. The class hierarchy is
|
|
|
14
14
|
designed such that the serializers share as much logic as possible.
|
|
15
15
|
The class hierarchy looks as follows:
|
|
16
16
|
::
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
│
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
17
|
+
┌────────────────────┐
|
|
18
|
+
│ ResponseSerializer │
|
|
19
|
+
└────────────────────┘
|
|
20
|
+
▲ ▲ ▲
|
|
21
|
+
┌─────────────────┬───────┘ │ └──────────────┬──────────────────────┐
|
|
22
|
+
┌────────────┴────────────┐ │ ┌───────┴──────────────┐ │ ┌────────────┴─────────────┐
|
|
23
|
+
│BaseXMLResponseSerializer│ │ │JSONResponseSerializer│ │ │BaseCBORResponseSerializer│
|
|
24
|
+
└─────────────────────────┘ │ └──────────────────────┘ │ └──────────────────────────┘
|
|
25
|
+
▲ ▲ ┌─────────────┴────────────┐ ▲ ┌─────┴─────────────────────┐ ▲ ▲
|
|
26
|
+
│ │ │BaseRestResponseSerializer│ │ │BaseRpcV2ResponseSerializer│ │ │
|
|
27
|
+
│ │ └──────────────────────────┘ │ └───────────────────────────┘ │ │
|
|
28
|
+
│ │ ▲ ▲ │ ▲ │ │
|
|
29
|
+
│ │ │ │ │ │ │ │
|
|
30
|
+
│ ┌─┴──────────────┴────────┐ ┌──┴───────────┴───────────┐ ┌──────────┴───────────┴────┐ │
|
|
31
|
+
│ │RestXMLResponseSerializer│ │RestJSONResponseSerializer│ │RpcV2CBORResponseSerializer│ │
|
|
32
|
+
│ └─────────────────────────┘ └──────────────────────────┘ └───────────────────────────┘ │
|
|
33
|
+
┌─────┴──────────────────┐ ┌──────────┴─────────────┐
|
|
34
|
+
│QueryResponseSerializer │ │ CBORResponseSerializer │
|
|
35
|
+
└────────────────────────┘ └────────────────────────┘
|
|
36
|
+
▲
|
|
37
|
+
┌─────────┴───────────┐
|
|
32
38
|
│EC2ResponseSerializer│
|
|
33
39
|
└─────────────────────┘
|
|
34
40
|
::
|
|
@@ -49,6 +55,8 @@ The protocols relate to each other in the following ways:
|
|
|
49
55
|
the HTTP response's header fields.
|
|
50
56
|
* The ``ec2`` protocol is basically similar to the ``query`` protocol with a
|
|
51
57
|
specific error response formatting.
|
|
58
|
+
* The ``smithy-rpc-v2-cbor`` protocol defines a specific way to route request
|
|
59
|
+
to services via the RPC v2 trait, and encodes its body with the CBOR format.
|
|
52
60
|
|
|
53
61
|
The serializer classes in this module correspond directly to the different
|
|
54
62
|
protocols. ``#create_serializer`` shows the explicit mapping between the
|
|
@@ -62,9 +70,15 @@ The classes are structured as follows:
|
|
|
62
70
|
and the CBOR serialization respectively.
|
|
63
71
|
* The ``BaseRestResponseSerializer`` contains the logic for the REST
|
|
64
72
|
protocol specifics (i.e. specific HTTP header serializations).
|
|
73
|
+
* The ``BaseRpcV2ResponseSerializer`` contains the logic for the RPC v2
|
|
74
|
+
protocol specifics (i.e. pretty bare, does not has any specific
|
|
75
|
+
about body serialization).
|
|
65
76
|
* The ``RestXMLResponseSerializer`` and the ``RestJSONResponseSerializer``
|
|
66
77
|
inherit the ReST specific logic from the ``BaseRestResponseSerializer``
|
|
67
78
|
and the XML / JSON body serialization from their second super class.
|
|
79
|
+
* The ``RpcV2CBORResponseSerializer`` inherits the RPC v2 specific logic
|
|
80
|
+
from the ``BaseRpcV2ResponseSerializer`` and the CBOR body serialization
|
|
81
|
+
from its second super class.
|
|
68
82
|
* The ``CBORResponseSerializer`` contains the logic specific to the
|
|
69
83
|
non-official ``cbor`` protocol, mirroring the ``json`` protocol but
|
|
70
84
|
with CBOR encoded body
|
|
@@ -81,6 +95,7 @@ be sent back to the calling client.
|
|
|
81
95
|
import abc
|
|
82
96
|
import base64
|
|
83
97
|
import copy
|
|
98
|
+
import datetime
|
|
84
99
|
import functools
|
|
85
100
|
import json
|
|
86
101
|
import logging
|
|
@@ -90,7 +105,6 @@ import struct
|
|
|
90
105
|
from abc import ABC
|
|
91
106
|
from binascii import crc32
|
|
92
107
|
from collections.abc import Iterable, Iterator
|
|
93
|
-
from datetime import datetime
|
|
94
108
|
from email.utils import formatdate
|
|
95
109
|
from struct import pack
|
|
96
110
|
from typing import IO, Any
|
|
@@ -524,7 +538,7 @@ class ResponseSerializer(abc.ABC):
|
|
|
524
538
|
# Some extra utility methods subclasses can use.
|
|
525
539
|
|
|
526
540
|
@staticmethod
|
|
527
|
-
def _timestamp_iso8601(value: datetime) -> str:
|
|
541
|
+
def _timestamp_iso8601(value: datetime.datetime) -> str:
|
|
528
542
|
if value.microsecond > 0:
|
|
529
543
|
timestamp_format = ISO8601_MICRO
|
|
530
544
|
else:
|
|
@@ -532,15 +546,17 @@ class ResponseSerializer(abc.ABC):
|
|
|
532
546
|
return value.strftime(timestamp_format)
|
|
533
547
|
|
|
534
548
|
@staticmethod
|
|
535
|
-
def _timestamp_unixtimestamp(value: datetime) -> float:
|
|
549
|
+
def _timestamp_unixtimestamp(value: datetime.datetime) -> float:
|
|
536
550
|
return value.timestamp()
|
|
537
551
|
|
|
538
|
-
def _timestamp_rfc822(self, value: datetime) -> str:
|
|
539
|
-
if isinstance(value, datetime):
|
|
552
|
+
def _timestamp_rfc822(self, value: datetime.datetime) -> str:
|
|
553
|
+
if isinstance(value, datetime.datetime):
|
|
540
554
|
value = self._timestamp_unixtimestamp(value)
|
|
541
555
|
return formatdate(value, usegmt=True)
|
|
542
556
|
|
|
543
|
-
def _convert_timestamp_to_str(
|
|
557
|
+
def _convert_timestamp_to_str(
|
|
558
|
+
self, value: int | str | datetime.datetime, timestamp_format=None
|
|
559
|
+
) -> str:
|
|
544
560
|
if timestamp_format is None:
|
|
545
561
|
timestamp_format = self.TIMESTAMP_FORMAT
|
|
546
562
|
timestamp_format = timestamp_format.lower()
|
|
@@ -1426,6 +1442,20 @@ class RestJSONResponseSerializer(BaseRestResponseSerializer, JSONResponseSeriali
|
|
|
1426
1442
|
|
|
1427
1443
|
|
|
1428
1444
|
class BaseCBORResponseSerializer(ResponseSerializer):
|
|
1445
|
+
"""
|
|
1446
|
+
The ``BaseCBORResponseSerializer`` performs the basic logic for the CBOR response serialization.
|
|
1447
|
+
|
|
1448
|
+
There are two types of map/list in CBOR, indefinite length types and "defined" ones:
|
|
1449
|
+
You can use the `\xbf` byte marker to indicate a map with indefinite length, then `\xff` to indicate the end
|
|
1450
|
+
of the map.
|
|
1451
|
+
You can also use, for example, `\xa4` to indicate a map with exactly 4 things in it, so `\xff` is not
|
|
1452
|
+
required at the end.
|
|
1453
|
+
AWS, for both Kinesis and `smithy-rpc-v2-cbor` services, is using indefinite data structures when returning
|
|
1454
|
+
responses.
|
|
1455
|
+
"""
|
|
1456
|
+
|
|
1457
|
+
SUPPORTED_MIME_TYPES = [APPLICATION_CBOR, APPLICATION_AMZ_CBOR_1_1]
|
|
1458
|
+
|
|
1429
1459
|
UNSIGNED_INT_MAJOR_TYPE = 0
|
|
1430
1460
|
NEGATIVE_INT_MAJOR_TYPE = 1
|
|
1431
1461
|
BLOB_MAJOR_TYPE = 2
|
|
@@ -1435,6 +1465,10 @@ class BaseCBORResponseSerializer(ResponseSerializer):
|
|
|
1435
1465
|
TAG_MAJOR_TYPE = 6
|
|
1436
1466
|
FLOAT_AND_SIMPLE_MAJOR_TYPE = 7
|
|
1437
1467
|
|
|
1468
|
+
INDEFINITE_ITEM_ADDITIONAL_INFO = 31
|
|
1469
|
+
BREAK_CODE = b"\xff"
|
|
1470
|
+
USE_INDEFINITE_DATA_STRUCTURE = True
|
|
1471
|
+
|
|
1438
1472
|
def _serialize_data_item(
|
|
1439
1473
|
self, serialized: bytearray, value: Any, shape: Shape | None, name: str | None = None
|
|
1440
1474
|
) -> None:
|
|
@@ -1503,32 +1537,34 @@ class BaseCBORResponseSerializer(ResponseSerializer):
|
|
|
1503
1537
|
serialized.extend(initial_byte + length.to_bytes(num_bytes, "big") + encoded)
|
|
1504
1538
|
|
|
1505
1539
|
def _serialize_type_list(
|
|
1506
|
-
self, serialized: bytearray, value:
|
|
1540
|
+
self, serialized: bytearray, value: list, shape: Shape | None, name: str | None = None
|
|
1507
1541
|
) -> None:
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
else:
|
|
1514
|
-
serialized.extend(initial_byte + length.to_bytes(num_bytes, "big"))
|
|
1542
|
+
initial_bytes, closing_bytes = self._get_bytes_for_data_structure(
|
|
1543
|
+
value, self.LIST_MAJOR_TYPE
|
|
1544
|
+
)
|
|
1545
|
+
serialized.extend(initial_bytes)
|
|
1546
|
+
|
|
1515
1547
|
for item in value:
|
|
1516
1548
|
self._serialize_data_item(serialized, item, shape.member)
|
|
1517
1549
|
|
|
1550
|
+
if closing_bytes is not None:
|
|
1551
|
+
serialized.extend(closing_bytes)
|
|
1552
|
+
|
|
1518
1553
|
def _serialize_type_map(
|
|
1519
1554
|
self, serialized: bytearray, value: dict, shape: Shape | None, name: str | None = None
|
|
1520
1555
|
) -> None:
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
else:
|
|
1527
|
-
serialized.extend(initial_byte + length.to_bytes(num_bytes, "big"))
|
|
1556
|
+
initial_bytes, closing_bytes = self._get_bytes_for_data_structure(
|
|
1557
|
+
value, self.MAP_MAJOR_TYPE
|
|
1558
|
+
)
|
|
1559
|
+
serialized.extend(initial_bytes)
|
|
1560
|
+
|
|
1528
1561
|
for key_item, item in value.items():
|
|
1529
1562
|
self._serialize_data_item(serialized, key_item, shape.key)
|
|
1530
1563
|
self._serialize_data_item(serialized, item, shape.value)
|
|
1531
1564
|
|
|
1565
|
+
if closing_bytes is not None:
|
|
1566
|
+
serialized.extend(closing_bytes)
|
|
1567
|
+
|
|
1532
1568
|
def _serialize_type_structure(
|
|
1533
1569
|
self, serialized: bytearray, value: dict, shape: Shape | None, name: str | None = None
|
|
1534
1570
|
) -> None:
|
|
@@ -1539,13 +1575,10 @@ class BaseCBORResponseSerializer(ResponseSerializer):
|
|
|
1539
1575
|
# Remove `None` values from the dictionary
|
|
1540
1576
|
value = {k: v for k, v in value.items() if v is not None}
|
|
1541
1577
|
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
serialized.extend(initial_byte)
|
|
1547
|
-
else:
|
|
1548
|
-
serialized.extend(initial_byte + map_length.to_bytes(num_bytes, "big"))
|
|
1578
|
+
initial_bytes, closing_bytes = self._get_bytes_for_data_structure(
|
|
1579
|
+
value, self.MAP_MAJOR_TYPE
|
|
1580
|
+
)
|
|
1581
|
+
serialized.extend(initial_bytes)
|
|
1549
1582
|
|
|
1550
1583
|
members = shape.members
|
|
1551
1584
|
for member_key, member_value in value.items():
|
|
@@ -1556,25 +1589,29 @@ class BaseCBORResponseSerializer(ResponseSerializer):
|
|
|
1556
1589
|
self._serialize_type_string(serialized, member_key, None, None)
|
|
1557
1590
|
self._serialize_data_item(serialized, member_value, member_shape)
|
|
1558
1591
|
|
|
1592
|
+
if closing_bytes is not None:
|
|
1593
|
+
serialized.extend(closing_bytes)
|
|
1594
|
+
|
|
1559
1595
|
def _serialize_type_timestamp(
|
|
1560
1596
|
self,
|
|
1561
1597
|
serialized: bytearray,
|
|
1562
|
-
value: int | str | datetime,
|
|
1598
|
+
value: int | str | datetime.datetime,
|
|
1563
1599
|
shape: Shape | None,
|
|
1564
1600
|
name: str | None = None,
|
|
1565
1601
|
) -> None:
|
|
1566
|
-
|
|
1602
|
+
# https://smithy.io/2.0/additional-specs/protocols/smithy-rpc-v2.html#timestamp-type-serialization
|
|
1567
1603
|
tag = 1 # Use tag 1 for unix timestamp
|
|
1568
1604
|
initial_byte = self._get_initial_byte(self.TAG_MAJOR_TYPE, tag)
|
|
1569
1605
|
serialized.extend(initial_byte) # Tagging the timestamp
|
|
1570
|
-
additional_info, num_bytes = self._get_additional_info_and_num_bytes(timestamp)
|
|
1571
1606
|
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1607
|
+
# we encode the timestamp as a double, like the Go SDK
|
|
1608
|
+
# https://github.com/aws/aws-sdk-go-v2/blob/5d7c17325a2581afae4455c150549174ebfd9428/internal/protocoltest/smithyrpcv2cbor/serializers.go#L664-L669
|
|
1609
|
+
# Currently, the Botocore serializer using unsigned integers, but it does not conform to the Smithy specs:
|
|
1610
|
+
# > This protocol uses epoch-seconds, also known as Unix timestamps, with millisecond
|
|
1611
|
+
# > (1/1000th of a second) resolution.
|
|
1612
|
+
timestamp = float(self._convert_timestamp_to_str(value))
|
|
1613
|
+
initial_byte = self._get_initial_byte(self.FLOAT_AND_SIMPLE_MAJOR_TYPE, 27)
|
|
1614
|
+
serialized.extend(initial_byte + struct.pack(">d", timestamp))
|
|
1578
1615
|
|
|
1579
1616
|
def _serialize_type_float(
|
|
1580
1617
|
self, serialized: bytearray, value: float, shape: Shape | None, name: str | None = None
|
|
@@ -1653,6 +1690,21 @@ class BaseCBORResponseSerializer(ResponseSerializer):
|
|
|
1653
1690
|
elif math.isnan(value):
|
|
1654
1691
|
return initial_byte + struct.pack(">H", 0x7E00)
|
|
1655
1692
|
|
|
1693
|
+
def _get_bytes_for_data_structure(
|
|
1694
|
+
self, value: list | dict, major_type: int
|
|
1695
|
+
) -> tuple[bytes, bytes | None]:
|
|
1696
|
+
if self.USE_INDEFINITE_DATA_STRUCTURE:
|
|
1697
|
+
additional_info = self.INDEFINITE_ITEM_ADDITIONAL_INFO
|
|
1698
|
+
return self._get_initial_byte(major_type, additional_info), self.BREAK_CODE
|
|
1699
|
+
else:
|
|
1700
|
+
length = len(value)
|
|
1701
|
+
additional_info, num_bytes = self._get_additional_info_and_num_bytes(length)
|
|
1702
|
+
initial_byte = self._get_initial_byte(major_type, additional_info)
|
|
1703
|
+
if num_bytes != 0:
|
|
1704
|
+
initial_byte = initial_byte + length.to_bytes(num_bytes, "big")
|
|
1705
|
+
|
|
1706
|
+
return initial_byte, None
|
|
1707
|
+
|
|
1656
1708
|
|
|
1657
1709
|
class CBORResponseSerializer(BaseCBORResponseSerializer):
|
|
1658
1710
|
"""
|
|
@@ -1661,8 +1713,6 @@ class CBORResponseSerializer(BaseCBORResponseSerializer):
|
|
|
1661
1713
|
conceptually from the ``JSONResponseSerializer``
|
|
1662
1714
|
"""
|
|
1663
1715
|
|
|
1664
|
-
SUPPORTED_MIME_TYPES = [APPLICATION_CBOR, APPLICATION_AMZ_CBOR_1_1]
|
|
1665
|
-
|
|
1666
1716
|
TIMESTAMP_FORMAT = "unixtimestamp"
|
|
1667
1717
|
|
|
1668
1718
|
def _serialize_error(
|
|
@@ -1737,6 +1787,113 @@ class CBORResponseSerializer(BaseCBORResponseSerializer):
|
|
|
1737
1787
|
return response
|
|
1738
1788
|
|
|
1739
1789
|
|
|
1790
|
+
class BaseRpcV2ResponseSerializer(ResponseSerializer):
|
|
1791
|
+
"""
|
|
1792
|
+
The BaseRpcV2ResponseSerializer performs the basic logic for the RPC V2 response serialization.
|
|
1793
|
+
The only variance between the various RPCv2 protocols is the way the body is serialized for regular responses,
|
|
1794
|
+
and the way they will encode exceptions.
|
|
1795
|
+
"""
|
|
1796
|
+
|
|
1797
|
+
def _serialize_response(
|
|
1798
|
+
self,
|
|
1799
|
+
parameters: dict,
|
|
1800
|
+
response: Response,
|
|
1801
|
+
shape: Shape | None,
|
|
1802
|
+
shape_members: dict,
|
|
1803
|
+
operation_model: OperationModel,
|
|
1804
|
+
mime_type: str,
|
|
1805
|
+
request_id: str,
|
|
1806
|
+
) -> None:
|
|
1807
|
+
response.content_type = mime_type
|
|
1808
|
+
response.set_response(
|
|
1809
|
+
self._serialize_body_params(parameters, shape, operation_model, mime_type, request_id)
|
|
1810
|
+
)
|
|
1811
|
+
|
|
1812
|
+
def _serialize_body_params(
|
|
1813
|
+
self,
|
|
1814
|
+
params: dict,
|
|
1815
|
+
shape: Shape,
|
|
1816
|
+
operation_model: OperationModel,
|
|
1817
|
+
mime_type: str,
|
|
1818
|
+
request_id: str,
|
|
1819
|
+
) -> bytes | None:
|
|
1820
|
+
raise NotImplementedError
|
|
1821
|
+
|
|
1822
|
+
|
|
1823
|
+
class RpcV2CBORResponseSerializer(BaseRpcV2ResponseSerializer, BaseCBORResponseSerializer):
|
|
1824
|
+
"""
|
|
1825
|
+
The RpcV2CBORResponseSerializer implements the CBOR body serialization part for the RPC v2 protocol, and implements the
|
|
1826
|
+
specific exception serialization.
|
|
1827
|
+
https://smithy.io/2.0/additional-specs/protocols/smithy-rpc-v2.html
|
|
1828
|
+
"""
|
|
1829
|
+
|
|
1830
|
+
# the Smithy spec defines that only `application/cbor` is supported for RPC v2 CBOR
|
|
1831
|
+
SUPPORTED_MIME_TYPES = [APPLICATION_CBOR]
|
|
1832
|
+
TIMESTAMP_FORMAT = "unixtimestamp"
|
|
1833
|
+
|
|
1834
|
+
def _serialize_body_params(
|
|
1835
|
+
self,
|
|
1836
|
+
params: dict,
|
|
1837
|
+
shape: Shape,
|
|
1838
|
+
operation_model: OperationModel,
|
|
1839
|
+
mime_type: str,
|
|
1840
|
+
request_id: str,
|
|
1841
|
+
) -> bytes | None:
|
|
1842
|
+
body = bytearray()
|
|
1843
|
+
self._serialize_data_item(body, params, shape)
|
|
1844
|
+
return bytes(body)
|
|
1845
|
+
|
|
1846
|
+
def _serialize_error(
|
|
1847
|
+
self,
|
|
1848
|
+
error: ServiceException,
|
|
1849
|
+
response: Response,
|
|
1850
|
+
shape: StructureShape,
|
|
1851
|
+
operation_model: OperationModel,
|
|
1852
|
+
mime_type: str,
|
|
1853
|
+
request_id: str,
|
|
1854
|
+
) -> None:
|
|
1855
|
+
body = bytearray()
|
|
1856
|
+
response.content_type = mime_type # can only be 'application/cbor'
|
|
1857
|
+
# TODO: the Botocore parser is able to look at the `x-amzn-query-error` header for the RpcV2 CBOR protocol
|
|
1858
|
+
# we'll need to investigate which services need it
|
|
1859
|
+
# Responses for the rpcv2Cbor protocol SHOULD NOT contain the X-Amzn-ErrorType header.
|
|
1860
|
+
# Type information is always serialized in the payload. This is different than `json` protocol
|
|
1861
|
+
|
|
1862
|
+
if shape:
|
|
1863
|
+
# FIXME: we need to manually add the `__type` field to the shape as it is not part of the specs
|
|
1864
|
+
# think about a better way, this is very hacky
|
|
1865
|
+
# Error responses in the rpcv2Cbor protocol MUST be serialized identically to standard responses with one
|
|
1866
|
+
# additional component to distinguish which error is contained: a body field named __type.
|
|
1867
|
+
shape_copy = copy.deepcopy(shape)
|
|
1868
|
+
shape_copy.members["__type"] = StringShape(
|
|
1869
|
+
shape_name="__type", shape_model={"type": "string"}
|
|
1870
|
+
)
|
|
1871
|
+
remaining_params = {"__type": error.code}
|
|
1872
|
+
|
|
1873
|
+
for member_name in shape_copy.members:
|
|
1874
|
+
if hasattr(error, member_name):
|
|
1875
|
+
remaining_params[member_name] = getattr(error, member_name)
|
|
1876
|
+
# Default error message fields can sometimes have different casing in the specs
|
|
1877
|
+
elif member_name.lower() in ["code", "message"] and hasattr(
|
|
1878
|
+
error, member_name.lower()
|
|
1879
|
+
):
|
|
1880
|
+
remaining_params[member_name] = getattr(error, member_name.lower())
|
|
1881
|
+
|
|
1882
|
+
self._serialize_data_item(body, remaining_params, shape_copy, None)
|
|
1883
|
+
|
|
1884
|
+
response.set_response(bytes(body))
|
|
1885
|
+
|
|
1886
|
+
def _prepare_additional_traits_in_response(
|
|
1887
|
+
self, response: Response, operation_model: OperationModel, request_id: str
|
|
1888
|
+
):
|
|
1889
|
+
response.headers["x-amzn-requestid"] = request_id
|
|
1890
|
+
response.headers["Smithy-Protocol"] = "rpc-v2-cbor"
|
|
1891
|
+
response = super()._prepare_additional_traits_in_response(
|
|
1892
|
+
response, operation_model, request_id
|
|
1893
|
+
)
|
|
1894
|
+
return response
|
|
1895
|
+
|
|
1896
|
+
|
|
1740
1897
|
class S3ResponseSerializer(RestXMLResponseSerializer):
|
|
1741
1898
|
"""
|
|
1742
1899
|
The ``S3ResponseSerializer`` adds some minor logic to handle S3 specific peculiarities with the error response
|
|
@@ -1903,7 +2060,7 @@ class S3ResponseSerializer(RestXMLResponseSerializer):
|
|
|
1903
2060
|
root.attrib["xmlns"] = self.XML_NAMESPACE
|
|
1904
2061
|
|
|
1905
2062
|
@staticmethod
|
|
1906
|
-
def _timestamp_iso8601(value: datetime) -> str:
|
|
2063
|
+
def _timestamp_iso8601(value: datetime.datetime) -> str:
|
|
1907
2064
|
"""
|
|
1908
2065
|
This is very specific to S3, S3 returns an ISO8601 timestamp but with milliseconds always set to 000
|
|
1909
2066
|
Some SDKs are very picky about the length
|
|
@@ -2074,11 +2231,14 @@ def gen_amzn_requestid():
|
|
|
2074
2231
|
|
|
2075
2232
|
|
|
2076
2233
|
@functools.cache
|
|
2077
|
-
def create_serializer(
|
|
2234
|
+
def create_serializer(
|
|
2235
|
+
service: ServiceModel, protocol: ProtocolName | None = None
|
|
2236
|
+
) -> ResponseSerializer:
|
|
2078
2237
|
"""
|
|
2079
2238
|
Creates the right serializer for the given service model.
|
|
2080
2239
|
|
|
2081
2240
|
:param service: to create the serializer for
|
|
2241
|
+
:param protocol: the protocol for the serializer. If not provided, fallback to the service's default protocol
|
|
2082
2242
|
:return: ResponseSerializer which can handle the protocol of the service
|
|
2083
2243
|
"""
|
|
2084
2244
|
|
|
@@ -2098,20 +2258,25 @@ def create_serializer(service: ServiceModel) -> ResponseSerializer:
|
|
|
2098
2258
|
"rest-json": RestJSONResponseSerializer,
|
|
2099
2259
|
"rest-xml": RestXMLResponseSerializer,
|
|
2100
2260
|
"ec2": EC2ResponseSerializer,
|
|
2261
|
+
"smithy-rpc-v2-cbor": RpcV2CBORResponseSerializer,
|
|
2101
2262
|
# TODO: implement multi-protocol support for Kinesis, so that it can uses the `cbor` protocol and remove
|
|
2102
2263
|
# CBOR handling from JSONResponseParser
|
|
2103
2264
|
# this is not an "official" protocol defined from the spec, but is derived from ``json``
|
|
2104
2265
|
}
|
|
2266
|
+
# TODO: even though our Service Name Parser will only use a protocol that is available for the service, we might
|
|
2267
|
+
# want to verify if the given protocol here is available for that service, in case we are manually calling
|
|
2268
|
+
# this factory. Revisit once we implement multi-protocol support
|
|
2269
|
+
service_protocol = protocol or service.protocol
|
|
2105
2270
|
|
|
2106
2271
|
# Try to select a service- and protocol-specific serializer implementation
|
|
2107
2272
|
if (
|
|
2108
2273
|
service.service_name in service_specific_serializers
|
|
2109
|
-
and
|
|
2274
|
+
and service_protocol in service_specific_serializers[service.service_name]
|
|
2110
2275
|
):
|
|
2111
|
-
return service_specific_serializers[service.service_name][
|
|
2276
|
+
return service_specific_serializers[service.service_name][service_protocol]()
|
|
2112
2277
|
else:
|
|
2113
2278
|
# Otherwise, pick the protocol-specific serializer for the protocol of the service
|
|
2114
|
-
return protocol_specific_serializers[
|
|
2279
|
+
return protocol_specific_serializers[service_protocol]()
|
|
2115
2280
|
|
|
2116
2281
|
|
|
2117
2282
|
def aws_response_serializer(
|
localstack/aws/spec.py
CHANGED
|
@@ -21,7 +21,7 @@ from localstack.utils.objects import singleton_factory
|
|
|
21
21
|
LOG = logging.getLogger(__name__)
|
|
22
22
|
|
|
23
23
|
ServiceName = str
|
|
24
|
-
ProtocolName = Literal["query", "json", "rest-json", "rest-xml", "ec2"]
|
|
24
|
+
ProtocolName = Literal["query", "json", "rest-json", "rest-xml", "ec2", "smithy-rpc-v2-cbor"]
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
class ServiceModelIdentifier(NamedTuple):
|
|
@@ -6,7 +6,6 @@ from pathlib import Path
|
|
|
6
6
|
from typing import TypedDict
|
|
7
7
|
|
|
8
8
|
import localstack.services.cloudformation.provider_utils as util
|
|
9
|
-
from localstack.constants import AWS_REGION_US_EAST_1, DEFAULT_AWS_ACCOUNT_ID
|
|
10
9
|
from localstack.services.cloudformation.resource_provider import (
|
|
11
10
|
OperationStatus,
|
|
12
11
|
ProgressEvent,
|
|
@@ -102,7 +101,7 @@ class ECRRepositoryProvider(ResourceProvider[ECRRepositoryProperties]):
|
|
|
102
101
|
model.update(
|
|
103
102
|
{
|
|
104
103
|
"Arn": arns.ecr_repository_arn(
|
|
105
|
-
model["RepositoryName"],
|
|
104
|
+
model["RepositoryName"], request.account_id, request.region_name
|
|
106
105
|
),
|
|
107
106
|
"RepositoryUri": "http://localhost:4566",
|
|
108
107
|
"ImageTagMutability": "MUTABLE",
|
localstack/version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '4.8.2.
|
|
32
|
-
__version_tuple__ = version_tuple = (4, 8, 2, '
|
|
31
|
+
__version__ = version = '4.8.2.dev5'
|
|
32
|
+
__version_tuple__ = version_tuple = (4, 8, 2, 'dev5')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -4,7 +4,7 @@ localstack/deprecations.py,sha256=78Sf99fgH3ckJ20a9SMqsu01r1cm5GgcomkuY4yDMDo,15
|
|
|
4
4
|
localstack/openapi.yaml,sha256=B803NmpwsxG8PHpHrdZYBrUYjnrRh7B_JX0XuNynuFs,30237
|
|
5
5
|
localstack/plugins.py,sha256=BIJC9dlo0WbP7lLKkCiGtd_2q5oeqiHZohvoRTcejXM,2457
|
|
6
6
|
localstack/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
localstack/version.py,sha256=
|
|
7
|
+
localstack/version.py,sha256=nTiRhJ5-edqFZ7Wr4SZmoyAxaYno5rIzwZ3hY6Hnw-8,717
|
|
8
8
|
localstack/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
9
|
localstack/aws/accounts.py,sha256=102zpGowOxo0S6UGMpfjw14QW7WCLVAGsnFK5xFMLoo,3043
|
|
10
10
|
localstack/aws/app.py,sha256=n9bJCfJRuMz_gLGAH430c3bIQXgUXeWO5NPfcdL2MV8,5145
|
|
@@ -19,7 +19,7 @@ localstack/aws/patches.py,sha256=r5EDhDE_OL25fQzT6oEhV7LvpBzTisOqxdn-JD_ZfrI,188
|
|
|
19
19
|
localstack/aws/scaffold.py,sha256=9GLeSaWQdCWBpFJghj92tFuGZ2CaCNE9iqJ020vs8a0,20029
|
|
20
20
|
localstack/aws/skeleton.py,sha256=zlbzAEiMV-tS5EQz5MxqflInalK613BrTOFviyT4X5Y,8175
|
|
21
21
|
localstack/aws/spec-patches.json,sha256=9zIgusH52V72SmOaRHTlWcu4aX5GEb2SzX1U9EL7SpU,42563
|
|
22
|
-
localstack/aws/spec.py,sha256=
|
|
22
|
+
localstack/aws/spec.py,sha256=61aAB3bqJ5rVJKh35ApLJR6cSGUGIgElKSnN2n2i8w8,14255
|
|
23
23
|
localstack/aws/api/__init__.py,sha256=JspwCauxfTTdLNVAr7AkQaPu1lELdBQ1miB9B9sndOo,297
|
|
24
24
|
localstack/aws/api/core.py,sha256=5BdwwThfkrZThxgGIbIabXdtMSPZfElzNdzRlw224m4,6733
|
|
25
25
|
localstack/aws/api/acm/__init__.py,sha256=67OHJbngmz4nKaXm9grkLW_Rl4RLRCeOBffhh3u1z0k,19079
|
|
@@ -83,9 +83,9 @@ localstack/aws/handlers/tracing.py,sha256=y_BUJKjNgaRGebm88NSqni4GFCQ_ZgB2JBRnEt
|
|
|
83
83
|
localstack/aws/handlers/validation.py,sha256=4iyHdJx3ijd49rySwMQNx2UW0XNN5fnkFQxdUO7-AQM,4386
|
|
84
84
|
localstack/aws/protocol/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
85
85
|
localstack/aws/protocol/op_router.py,sha256=2nSpL6H9seK1h_AuIZlBG1yYa_ykARIgJJrKm4Hkc0s,12039
|
|
86
|
-
localstack/aws/protocol/parser.py,sha256=
|
|
86
|
+
localstack/aws/protocol/parser.py,sha256=yVM8SSa2ZoaJDAMV7n-wG77xiwKDWE90dmwgqm7VpPg,70911
|
|
87
87
|
localstack/aws/protocol/routing.py,sha256=x9AFpMQsVHD7JadtLHR7zjfBw3AJBayITNAYiUtnlwQ,3217
|
|
88
|
-
localstack/aws/protocol/serializer.py,sha256=
|
|
88
|
+
localstack/aws/protocol/serializer.py,sha256=UXIOyB--iQcv2s8AazaSFrvk1eAPJOcqNqiv25wT3R8,103498
|
|
89
89
|
localstack/aws/protocol/service_router.py,sha256=nJK1s9oCPax5rBWBDry5RgLqGojRJSkQscZuNzPut_M,16418
|
|
90
90
|
localstack/aws/protocol/validate.py,sha256=j3HJAQEKS6V_arrmvlPmP2jbge3LutxwEXDNabDlDdY,5285
|
|
91
91
|
localstack/aws/serving/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -436,7 +436,7 @@ localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment.schema.j
|
|
|
436
436
|
localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment_plugin.py,sha256=VEEBwGt7kT2dMJsedNWbj1bQzALio0H0E257BfgmPFI,572
|
|
437
437
|
localstack/services/ecr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
438
438
|
localstack/services/ecr/resource_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
439
|
-
localstack/services/ecr/resource_providers/aws_ecr_repository.py,sha256=
|
|
439
|
+
localstack/services/ecr/resource_providers/aws_ecr_repository.py,sha256=cgiJLHdc8W9M98yxKy-ovwheOlgVRQ5igVGuF1jUPTI,5066
|
|
440
440
|
localstack/services/ecr/resource_providers/aws_ecr_repository.schema.json,sha256=lAqAkaPHsvc12nMwYXsOllBxLdSh9HB44NPLCB6fUBs,7832
|
|
441
441
|
localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py,sha256=hb1nsrn93j-ZrA0JDlO1_XHLP1ygFyvSG1MqG34XIGw,522
|
|
442
442
|
localstack/services/es/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -1291,13 +1291,13 @@ localstack/utils/server/tcp_proxy.py,sha256=rR6d5jR0ozDvIlpHiqW0cfyY9a2fRGdOzyA8
|
|
|
1291
1291
|
localstack/utils/xray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1292
1292
|
localstack/utils/xray/trace_header.py,sha256=ahXk9eonq7LpeENwlqUEPj3jDOCiVRixhntQuxNor-Q,6209
|
|
1293
1293
|
localstack/utils/xray/traceid.py,sha256=GKO-R2sMMjlrH2UaLPXlQlZ6flbE7ZKb6IZMtMu_M5U,1110
|
|
1294
|
-
localstack_core-4.8.2.
|
|
1295
|
-
localstack_core-4.8.2.
|
|
1296
|
-
localstack_core-4.8.2.
|
|
1297
|
-
localstack_core-4.8.2.
|
|
1298
|
-
localstack_core-4.8.2.
|
|
1299
|
-
localstack_core-4.8.2.
|
|
1300
|
-
localstack_core-4.8.2.
|
|
1301
|
-
localstack_core-4.8.2.
|
|
1302
|
-
localstack_core-4.8.2.
|
|
1303
|
-
localstack_core-4.8.2.
|
|
1294
|
+
localstack_core-4.8.2.dev5.data/scripts/localstack,sha256=WyL11vp5CkuP79iIR-L8XT7Cj8nvmxX7XRAgxhbmXNE,529
|
|
1295
|
+
localstack_core-4.8.2.dev5.data/scripts/localstack-supervisor,sha256=nm1Il2d6ASyOB6Vo4CRHd90w7TK9FdRl9VPp0NN6hUk,6378
|
|
1296
|
+
localstack_core-4.8.2.dev5.data/scripts/localstack.bat,sha256=tlzZTXtveHkMX_s_fa7VDfvdNdS8iVpEz2ER3uk9B_c,29
|
|
1297
|
+
localstack_core-4.8.2.dev5.dist-info/licenses/LICENSE.txt,sha256=3PC-9Z69UsNARuQ980gNR_JsLx8uvMjdG6C7cc4LBYs,606
|
|
1298
|
+
localstack_core-4.8.2.dev5.dist-info/METADATA,sha256=QOmG-7vGc9mL-yJlSpH0c1Mc1VtW2sglIY5pog10z3w,5536
|
|
1299
|
+
localstack_core-4.8.2.dev5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
1300
|
+
localstack_core-4.8.2.dev5.dist-info/entry_points.txt,sha256=_ZJMdzN2FZoPbjxM2Q2yVTF6eucmoJsNpwav9_UyfTA,20821
|
|
1301
|
+
localstack_core-4.8.2.dev5.dist-info/plux.json,sha256=_h6anSmObvcZlCRTaMaol9Thec-okjQcLD66sXU2gOQ,21046
|
|
1302
|
+
localstack_core-4.8.2.dev5.dist-info/top_level.txt,sha256=3sqmK2lGac8nCy8nwsbS5SpIY_izmtWtgaTFKHYVHbI,11
|
|
1303
|
+
localstack_core-4.8.2.dev5.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"localstack.cloudformation.resource_providers": ["AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin"], "localstack.aws.provider": ["acm:default=localstack.services.providers:acm", "apigateway:default=localstack.services.providers:apigateway", "apigateway:legacy=localstack.services.providers:apigateway_legacy", "apigateway:next_gen=localstack.services.providers:apigateway_next_gen", "config:default=localstack.services.providers:awsconfig", "cloudformation:engine-legacy=localstack.services.providers:cloudformation", "cloudformation:default=localstack.services.providers:cloudformation_v2", "cloudwatch:default=localstack.services.providers:cloudwatch", "cloudwatch:v1=localstack.services.providers:cloudwatch_v1", "cloudwatch:v2=localstack.services.providers:cloudwatch_v2", "dynamodb:default=localstack.services.providers:dynamodb", "dynamodb:v2=localstack.services.providers:dynamodb_v2", "dynamodbstreams:default=localstack.services.providers:dynamodbstreams", "dynamodbstreams:v2=localstack.services.providers:dynamodbstreams_v2", "ec2:default=localstack.services.providers:ec2", "es:default=localstack.services.providers:es", "events:default=localstack.services.providers:events", "events:legacy=localstack.services.providers:events_legacy", "events:v1=localstack.services.providers:events_v1", "events:v2=localstack.services.providers:events_v2", "firehose:default=localstack.services.providers:firehose", "iam:default=localstack.services.providers:iam", "kinesis:default=localstack.services.providers:kinesis", "kms:default=localstack.services.providers:kms", "lambda:default=localstack.services.providers:lambda_", "lambda:asf=localstack.services.providers:lambda_asf", "lambda:v2=localstack.services.providers:lambda_v2", "logs:default=localstack.services.providers:logs", "opensearch:default=localstack.services.providers:opensearch", "redshift:default=localstack.services.providers:redshift", "resource-groups:default=localstack.services.providers:resource_groups", "resourcegroupstaggingapi:default=localstack.services.providers:resourcegroupstaggingapi", "route53:default=localstack.services.providers:route53", "route53resolver:default=localstack.services.providers:route53resolver", "s3:default=localstack.services.providers:s3", "s3control:default=localstack.services.providers:s3control", "scheduler:default=localstack.services.providers:scheduler", "secretsmanager:default=localstack.services.providers:secretsmanager", "ses:default=localstack.services.providers:ses", "sns:default=localstack.services.providers:sns", "sns:v2=localstack.services.providers:sns_v2", "sqs:default=localstack.services.providers:sqs", "ssm:default=localstack.services.providers:ssm", "stepfunctions:default=localstack.services.providers:stepfunctions", "stepfunctions:v2=localstack.services.providers:stepfunctions_v2", "sts:default=localstack.services.providers:sts", "support:default=localstack.services.providers:support", "swf:default=localstack.services.providers:swf", "transcribe:default=localstack.services.providers:transcribe"], "localstack.packages": ["jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "vosk/community=localstack.services.transcribe.plugins:vosk_package", "lambda-java-libs/community=localstack.services.lambda_.plugins:lambda_java_libs", "lambda-runtime/community=localstack.services.lambda_.plugins:lambda_runtime_package", "elasticsearch/community=localstack.services.es.plugins:elasticsearch_package", "ffmpeg/community=localstack.packages.plugins:ffmpeg_package", "java/community=localstack.packages.plugins:java_package", "terraform/community=localstack.packages.plugins:terraform_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "opensearch/community=localstack.services.opensearch.plugins:opensearch_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package"], "localstack.hooks.on_infra_shutdown": ["publish_metrics=localstack.utils.analytics.metrics.publisher:publish_metrics", "remove_custom_endpoints=localstack.services.lambda_.plugins:remove_custom_endpoints", "run_on_after_service_shutdown_handlers=localstack.runtime.shutdown:run_on_after_service_shutdown_handlers", "run_shutdown_handlers=localstack.runtime.shutdown:run_shutdown_handlers", "shutdown_services=localstack.runtime.shutdown:shutdown_services", "_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown", "stop_server=localstack.dns.plugins:stop_server"], "localstack.hooks.on_infra_start": ["init_response_mutation_handler=localstack.aws.handlers.response:init_response_mutation_handler", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "delete_cached_certificate=localstack.plugins:delete_cached_certificate", "deprecation_warnings=localstack.plugins:deprecation_warnings", "eager_load_services=localstack.services.plugins:eager_load_services", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "_patch_botocore_endpoint_in_memory=localstack.aws.client:_patch_botocore_endpoint_in_memory", "_patch_botocore_json_parser=localstack.aws.client:_patch_botocore_json_parser", "_patch_cbor2=localstack.aws.client:_patch_cbor2", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server"], "localstack.hooks.on_infra_ready": ["publish_provider_assignment=localstack.utils.analytics.service_providers:publish_provider_assignment", "_run_init_scripts_on_ready=localstack.runtime.init:_run_init_scripts_on_ready"], "localstack.hooks.configure_localstack_container": ["_mount_machine_file=localstack.utils.analytics.metadata:_mount_machine_file"], "localstack.hooks.prepare_host": ["prepare_host_machine_id=localstack.utils.analytics.metadata:prepare_host_machine_id"], "localstack.runtime.server": ["hypercorn=localstack.runtime.server.plugins:HypercornRuntimeServerPlugin", "twisted=localstack.runtime.server.plugins:TwistedRuntimeServerPlugin"], "localstack.lambda.runtime_executor": ["docker=localstack.services.lambda_.invocation.plugins:DockerRuntimeExecutorPlugin"], "localstack.openapi.spec": ["localstack=localstack.plugins:CoreOASPlugin"], "localstack.init.runner": ["py=localstack.runtime.init:PythonScriptRunner", "sh=localstack.runtime.init:ShellScriptRunner"], "localstack.runtime.components": ["aws=localstack.aws.components:AwsComponents"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"localstack.cloudformation.resource_providers": ["AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin"], "localstack.packages": ["elasticsearch/community=localstack.services.es.plugins:elasticsearch_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "opensearch/community=localstack.services.opensearch.plugins:opensearch_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "lambda-java-libs/community=localstack.services.lambda_.plugins:lambda_java_libs", "lambda-runtime/community=localstack.services.lambda_.plugins:lambda_runtime_package", "ffmpeg/community=localstack.packages.plugins:ffmpeg_package", "java/community=localstack.packages.plugins:java_package", "terraform/community=localstack.packages.plugins:terraform_package", "vosk/community=localstack.services.transcribe.plugins:vosk_package", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package"], "localstack.hooks.on_infra_start": ["register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "_patch_botocore_endpoint_in_memory=localstack.aws.client:_patch_botocore_endpoint_in_memory", "_patch_botocore_json_parser=localstack.aws.client:_patch_botocore_json_parser", "_patch_cbor2=localstack.aws.client:_patch_cbor2", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start", "init_response_mutation_handler=localstack.aws.handlers.response:init_response_mutation_handler", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration", "delete_cached_certificate=localstack.plugins:delete_cached_certificate", "deprecation_warnings=localstack.plugins:deprecation_warnings", "eager_load_services=localstack.services.plugins:eager_load_services", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server"], "localstack.aws.provider": ["acm:default=localstack.services.providers:acm", "apigateway:default=localstack.services.providers:apigateway", "apigateway:legacy=localstack.services.providers:apigateway_legacy", "apigateway:next_gen=localstack.services.providers:apigateway_next_gen", "config:default=localstack.services.providers:awsconfig", "cloudformation:engine-legacy=localstack.services.providers:cloudformation", "cloudformation:default=localstack.services.providers:cloudformation_v2", "cloudwatch:default=localstack.services.providers:cloudwatch", "cloudwatch:v1=localstack.services.providers:cloudwatch_v1", "cloudwatch:v2=localstack.services.providers:cloudwatch_v2", "dynamodb:default=localstack.services.providers:dynamodb", "dynamodb:v2=localstack.services.providers:dynamodb_v2", "dynamodbstreams:default=localstack.services.providers:dynamodbstreams", "dynamodbstreams:v2=localstack.services.providers:dynamodbstreams_v2", "ec2:default=localstack.services.providers:ec2", "es:default=localstack.services.providers:es", "events:default=localstack.services.providers:events", "events:legacy=localstack.services.providers:events_legacy", "events:v1=localstack.services.providers:events_v1", "events:v2=localstack.services.providers:events_v2", "firehose:default=localstack.services.providers:firehose", "iam:default=localstack.services.providers:iam", "kinesis:default=localstack.services.providers:kinesis", "kms:default=localstack.services.providers:kms", "lambda:default=localstack.services.providers:lambda_", "lambda:asf=localstack.services.providers:lambda_asf", "lambda:v2=localstack.services.providers:lambda_v2", "logs:default=localstack.services.providers:logs", "opensearch:default=localstack.services.providers:opensearch", "redshift:default=localstack.services.providers:redshift", "resource-groups:default=localstack.services.providers:resource_groups", "resourcegroupstaggingapi:default=localstack.services.providers:resourcegroupstaggingapi", "route53:default=localstack.services.providers:route53", "route53resolver:default=localstack.services.providers:route53resolver", "s3:default=localstack.services.providers:s3", "s3control:default=localstack.services.providers:s3control", "scheduler:default=localstack.services.providers:scheduler", "secretsmanager:default=localstack.services.providers:secretsmanager", "ses:default=localstack.services.providers:ses", "sns:default=localstack.services.providers:sns", "sns:v2=localstack.services.providers:sns_v2", "sqs:default=localstack.services.providers:sqs", "ssm:default=localstack.services.providers:ssm", "stepfunctions:default=localstack.services.providers:stepfunctions", "stepfunctions:v2=localstack.services.providers:stepfunctions_v2", "sts:default=localstack.services.providers:sts", "support:default=localstack.services.providers:support", "swf:default=localstack.services.providers:swf", "transcribe:default=localstack.services.providers:transcribe"], "localstack.init.runner": ["py=localstack.runtime.init:PythonScriptRunner", "sh=localstack.runtime.init:ShellScriptRunner"], "localstack.hooks.on_infra_ready": ["_run_init_scripts_on_ready=localstack.runtime.init:_run_init_scripts_on_ready", "publish_provider_assignment=localstack.utils.analytics.service_providers:publish_provider_assignment"], "localstack.hooks.on_infra_shutdown": ["_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown", "publish_metrics=localstack.utils.analytics.metrics.publisher:publish_metrics", "remove_custom_endpoints=localstack.services.lambda_.plugins:remove_custom_endpoints", "stop_server=localstack.dns.plugins:stop_server", "run_on_after_service_shutdown_handlers=localstack.runtime.shutdown:run_on_after_service_shutdown_handlers", "run_shutdown_handlers=localstack.runtime.shutdown:run_shutdown_handlers", "shutdown_services=localstack.runtime.shutdown:shutdown_services"], "localstack.runtime.server": ["hypercorn=localstack.runtime.server.plugins:HypercornRuntimeServerPlugin", "twisted=localstack.runtime.server.plugins:TwistedRuntimeServerPlugin"], "localstack.openapi.spec": ["localstack=localstack.plugins:CoreOASPlugin"], "localstack.runtime.components": ["aws=localstack.aws.components:AwsComponents"], "localstack.hooks.configure_localstack_container": ["_mount_machine_file=localstack.utils.analytics.metadata:_mount_machine_file"], "localstack.hooks.prepare_host": ["prepare_host_machine_id=localstack.utils.analytics.metadata:prepare_host_machine_id"], "localstack.lambda.runtime_executor": ["docker=localstack.services.lambda_.invocation.plugins:DockerRuntimeExecutorPlugin"]}
|
|
File without changes
|
{localstack_core-4.8.2.dev3.data → localstack_core-4.8.2.dev5.data}/scripts/localstack-supervisor
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{localstack_core-4.8.2.dev3.dist-info → localstack_core-4.8.2.dev5.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{localstack_core-4.8.2.dev3.dist-info → localstack_core-4.8.2.dev5.dist-info}/licenses/LICENSE.txt
RENAMED
|
File without changes
|
|
File without changes
|