localstack-core 4.4.1.dev67__py3-none-any.whl → 4.4.1.dev69__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.
- localstack/services/apigateway/legacy/provider.py +1 -1
- localstack/services/apigateway/next_gen/execute_api/context.py +8 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/parse.py +12 -10
- localstack/services/apigateway/next_gen/execute_api/helpers.py +7 -0
- localstack/services/apigateway/next_gen/execute_api/moto_helpers.py +14 -1
- localstack/services/apigateway/next_gen/execute_api/router.py +33 -0
- localstack/services/apigateway/next_gen/execute_api/variables.py +1 -1
- localstack/services/apigateway/next_gen/provider.py +4 -1
- localstack/utils/analytics/metrics.py +124 -61
- localstack/version.py +2 -2
- {localstack_core-4.4.1.dev67.dist-info → localstack_core-4.4.1.dev69.dist-info}/METADATA +1 -1
- {localstack_core-4.4.1.dev67.dist-info → localstack_core-4.4.1.dev69.dist-info}/RECORD +20 -20
- localstack_core-4.4.1.dev69.dist-info/plux.json +1 -0
- localstack_core-4.4.1.dev67.dist-info/plux.json +0 -1
- {localstack_core-4.4.1.dev67.data → localstack_core-4.4.1.dev69.data}/scripts/localstack +0 -0
- {localstack_core-4.4.1.dev67.data → localstack_core-4.4.1.dev69.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.4.1.dev67.data → localstack_core-4.4.1.dev69.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.4.1.dev67.dist-info → localstack_core-4.4.1.dev69.dist-info}/WHEEL +0 -0
- {localstack_core-4.4.1.dev67.dist-info → localstack_core-4.4.1.dev69.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.4.1.dev67.dist-info → localstack_core-4.4.1.dev69.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.4.1.dev67.dist-info → localstack_core-4.4.1.dev69.dist-info}/top_level.txt +0 -0
@@ -622,7 +622,7 @@ class ApigatewayProvider(ApigatewayApi, ServiceLifecycleHook):
|
|
622
622
|
param = param.replace("~1", "/")
|
623
623
|
if op == "remove":
|
624
624
|
integration_response.response_templates.pop(param)
|
625
|
-
elif op
|
625
|
+
elif op in ("add", "replace"):
|
626
626
|
integration_response.response_templates[param] = value
|
627
627
|
|
628
628
|
elif "/contentHandling" in path and op == "replace":
|
@@ -5,7 +5,7 @@ from rolo import Request
|
|
5
5
|
from rolo.gateway import RequestContext
|
6
6
|
from werkzeug.datastructures import Headers
|
7
7
|
|
8
|
-
from localstack.aws.api.apigateway import Integration, Method, Resource
|
8
|
+
from localstack.aws.api.apigateway import Integration, Method, Resource, Stage
|
9
9
|
from localstack.services.apigateway.models import RestApiDeployment
|
10
10
|
|
11
11
|
from .variables import ContextVariableOverrides, ContextVariables, LoggingContextVariables
|
@@ -79,7 +79,7 @@ class RestApiInvocationContext(RequestContext):
|
|
79
79
|
api_id: Optional[str]
|
80
80
|
"""The REST API identifier of the invoked API"""
|
81
81
|
stage: Optional[str]
|
82
|
-
"""The REST API stage linked to this invocation"""
|
82
|
+
"""The REST API stage name linked to this invocation"""
|
83
83
|
base_path: Optional[str]
|
84
84
|
"""The REST API base path mapped to the stage of this invocation"""
|
85
85
|
deployment_id: Optional[str]
|
@@ -96,6 +96,10 @@ class RestApiInvocationContext(RequestContext):
|
|
96
96
|
"""The method of the resource the invocation matched"""
|
97
97
|
stage_variables: Optional[dict[str, str]]
|
98
98
|
"""The Stage variables, also used in parameters mapping and mapping templates"""
|
99
|
+
stage_configuration: Optional[Stage]
|
100
|
+
"""The Stage configuration, containing canary deployment settings"""
|
101
|
+
is_canary: Optional[bool]
|
102
|
+
"""If the current call was directed to a canary deployment"""
|
99
103
|
context_variables: Optional[ContextVariables]
|
100
104
|
"""The $context used in data models, authorizers, mapping templates, and CloudWatch access logging"""
|
101
105
|
context_variable_overrides: Optional[ContextVariableOverrides]
|
@@ -126,6 +130,8 @@ class RestApiInvocationContext(RequestContext):
|
|
126
130
|
self.resource_method = None
|
127
131
|
self.integration = None
|
128
132
|
self.stage_variables = None
|
133
|
+
self.stage_configuration = None
|
134
|
+
self.is_canary = None
|
129
135
|
self.context_variables = None
|
130
136
|
self.logging_context_variables = None
|
131
137
|
self.integration_request = None
|
@@ -17,7 +17,6 @@ from ..api import RestApiGatewayHandler, RestApiGatewayHandlerChain
|
|
17
17
|
from ..context import InvocationRequest, RestApiInvocationContext
|
18
18
|
from ..header_utils import should_drop_header_from_invocation
|
19
19
|
from ..helpers import generate_trace_id, generate_trace_parent, parse_trace_id
|
20
|
-
from ..moto_helpers import get_stage_variables
|
21
20
|
from ..variables import (
|
22
21
|
ContextVariableOverrides,
|
23
22
|
ContextVariables,
|
@@ -53,7 +52,7 @@ class InvocationRequestParser(RestApiGatewayHandler):
|
|
53
52
|
# TODO: maybe adjust the logging
|
54
53
|
LOG.debug("Initializing $context='%s'", context.context_variables)
|
55
54
|
# then populate the stage variables
|
56
|
-
context.stage_variables = self.
|
55
|
+
context.stage_variables = self.get_stage_variables(context)
|
57
56
|
LOG.debug("Initializing $stageVariables='%s'", context.stage_variables)
|
58
57
|
|
59
58
|
context.trace_id = self.populate_trace_id(context.request.headers)
|
@@ -173,18 +172,21 @@ class InvocationRequestParser(RestApiGatewayHandler):
|
|
173
172
|
requestTimeEpoch=int(now.timestamp() * 1000),
|
174
173
|
stage=context.stage,
|
175
174
|
)
|
175
|
+
if context.is_canary is not None:
|
176
|
+
context_variables["isCanaryRequest"] = context.is_canary
|
177
|
+
|
176
178
|
return context_variables
|
177
179
|
|
178
180
|
@staticmethod
|
179
|
-
def
|
180
|
-
stage_variables =
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
181
|
+
def get_stage_variables(context: RestApiInvocationContext) -> Optional[dict[str, str]]:
|
182
|
+
stage_variables = context.stage_configuration.get("variables")
|
183
|
+
if context.is_canary:
|
184
|
+
overrides = (
|
185
|
+
context.stage_configuration["canarySettings"].get("stageVariableOverrides") or {}
|
186
|
+
)
|
187
|
+
stage_variables = (stage_variables or {}) | overrides
|
188
|
+
|
186
189
|
if not stage_variables:
|
187
|
-
# we need to set the stage variables to None in the context if we don't have at least one
|
188
190
|
return None
|
189
191
|
|
190
192
|
return stage_variables
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import copy
|
2
2
|
import logging
|
3
|
+
import random
|
3
4
|
import re
|
4
5
|
import time
|
5
6
|
from secrets import token_hex
|
@@ -174,3 +175,9 @@ def mime_type_matches_binary_media_types(mime_type: str | None, binary_media_typ
|
|
174
175
|
return True
|
175
176
|
|
176
177
|
return False
|
178
|
+
|
179
|
+
|
180
|
+
def should_divert_to_canary(percent_traffic: float) -> bool:
|
181
|
+
if int(percent_traffic) == 100:
|
182
|
+
return True
|
183
|
+
return percent_traffic > random.random() * 100
|
@@ -1,7 +1,13 @@
|
|
1
1
|
from moto.apigateway.models import APIGatewayBackend, apigateway_backends
|
2
2
|
from moto.apigateway.models import RestAPI as MotoRestAPI
|
3
3
|
|
4
|
-
from localstack.aws.api.apigateway import
|
4
|
+
from localstack.aws.api.apigateway import (
|
5
|
+
ApiKey,
|
6
|
+
ListOfUsagePlan,
|
7
|
+
ListOfUsagePlanKey,
|
8
|
+
Resource,
|
9
|
+
Stage,
|
10
|
+
)
|
5
11
|
|
6
12
|
|
7
13
|
def get_resources_from_moto_rest_api(moto_rest_api: MotoRestAPI) -> dict[str, Resource]:
|
@@ -40,6 +46,13 @@ def get_stage_variables(
|
|
40
46
|
return stage.variables
|
41
47
|
|
42
48
|
|
49
|
+
def get_stage_configuration(account_id: str, region: str, api_id: str, stage_name: str) -> Stage:
|
50
|
+
apigateway_backend: APIGatewayBackend = apigateway_backends[account_id][region]
|
51
|
+
moto_rest_api = apigateway_backend.get_rest_api(api_id)
|
52
|
+
stage = moto_rest_api.stages[stage_name]
|
53
|
+
return stage.to_json()
|
54
|
+
|
55
|
+
|
43
56
|
def get_usage_plans(account_id: str, region_name: str) -> ListOfUsagePlan:
|
44
57
|
"""
|
45
58
|
Will return a list of usage plans from the moto store.
|
@@ -5,6 +5,7 @@ from rolo import Request, Router
|
|
5
5
|
from rolo.routing.handler import Handler
|
6
6
|
from werkzeug.routing import Rule
|
7
7
|
|
8
|
+
from localstack.aws.api.apigateway import Stage
|
8
9
|
from localstack.constants import APPLICATION_JSON, AWS_REGION_US_EAST_1, DEFAULT_AWS_ACCOUNT_ID
|
9
10
|
from localstack.deprecations import deprecated_endpoint
|
10
11
|
from localstack.http import Response
|
@@ -14,6 +15,8 @@ from localstack.services.stores import AccountRegionBundle
|
|
14
15
|
|
15
16
|
from .context import RestApiInvocationContext
|
16
17
|
from .gateway import RestApiGateway
|
18
|
+
from .helpers import should_divert_to_canary
|
19
|
+
from .moto_helpers import get_stage_configuration
|
17
20
|
|
18
21
|
LOG = logging.getLogger(__name__)
|
19
22
|
|
@@ -88,11 +91,41 @@ class ApiGatewayEndpoint:
|
|
88
91
|
# TODO: find proper error when trying to hit an API with no deployment/stage linked
|
89
92
|
return
|
90
93
|
|
94
|
+
stage_configuration = self.fetch_stage_configuration(
|
95
|
+
account_id=frozen_deployment.account_id,
|
96
|
+
region=frozen_deployment.region,
|
97
|
+
api_id=api_id,
|
98
|
+
stage_name=stage,
|
99
|
+
)
|
100
|
+
if canary_settings := stage_configuration.get("canarySettings"):
|
101
|
+
if should_divert_to_canary(canary_settings["percentTraffic"]):
|
102
|
+
deployment_id = canary_settings["deploymentId"]
|
103
|
+
frozen_deployment = self._global_store.internal_deployments[api_id][deployment_id]
|
104
|
+
context.is_canary = True
|
105
|
+
else:
|
106
|
+
context.is_canary = False
|
107
|
+
|
91
108
|
context.deployment = frozen_deployment
|
92
109
|
context.api_id = api_id
|
93
110
|
context.stage = stage
|
111
|
+
context.stage_configuration = stage_configuration
|
94
112
|
context.deployment_id = deployment_id
|
95
113
|
|
114
|
+
@staticmethod
|
115
|
+
def fetch_stage_configuration(
|
116
|
+
account_id: str, region: str, api_id: str, stage_name: str
|
117
|
+
) -> Stage:
|
118
|
+
# this will be migrated once we move away from Moto, so we won't need the helper anymore and the logic will
|
119
|
+
# be implemented here
|
120
|
+
stage_variables = get_stage_configuration(
|
121
|
+
account_id=account_id,
|
122
|
+
region=region,
|
123
|
+
api_id=api_id,
|
124
|
+
stage_name=stage_name,
|
125
|
+
)
|
126
|
+
|
127
|
+
return stage_variables
|
128
|
+
|
96
129
|
@staticmethod
|
97
130
|
def create_response(request: Request) -> Response:
|
98
131
|
# Creates a default apigw response.
|
@@ -112,7 +112,7 @@ class ContextVariables(TypedDict, total=False):
|
|
112
112
|
httpMethod: str
|
113
113
|
"""The HTTP method used"""
|
114
114
|
identity: Optional[ContextVarsIdentity]
|
115
|
-
isCanaryRequest: Optional[bool
|
115
|
+
isCanaryRequest: Optional[bool]
|
116
116
|
"""Indicates if the request was directed to the canary"""
|
117
117
|
path: str
|
118
118
|
"""The request path."""
|
@@ -216,6 +216,9 @@ class ApigatewayNextGenProvider(ApigatewayProvider):
|
|
216
216
|
"useStageCache": False,
|
217
217
|
}
|
218
218
|
default_canary_settings.update(canary_settings)
|
219
|
+
default_canary_settings["percentTraffic"] = float(
|
220
|
+
default_canary_settings["percentTraffic"]
|
221
|
+
)
|
219
222
|
moto_stage_copy.canary_settings = default_canary_settings
|
220
223
|
|
221
224
|
moto_rest_api.stages[stage_name] = moto_stage_copy
|
@@ -291,7 +294,6 @@ class ApigatewayNextGenProvider(ApigatewayProvider):
|
|
291
294
|
|
292
295
|
if stage_name:
|
293
296
|
moto_stage = moto_rest_api.stages[stage_name]
|
294
|
-
store.active_deployments.setdefault(router_api_id, {})[stage_name] = deployment_id
|
295
297
|
if canary_settings:
|
296
298
|
moto_stage = current_stage
|
297
299
|
moto_rest_api.stages[stage_name] = current_stage
|
@@ -304,6 +306,7 @@ class ApigatewayNextGenProvider(ApigatewayProvider):
|
|
304
306
|
default_settings.update(canary_settings)
|
305
307
|
moto_stage.canary_settings = default_settings
|
306
308
|
else:
|
309
|
+
store.active_deployments.setdefault(router_api_id, {})[stage_name] = deployment_id
|
307
310
|
moto_stage.canary_settings = None
|
308
311
|
|
309
312
|
if variables:
|
@@ -5,7 +5,8 @@ import logging
|
|
5
5
|
import threading
|
6
6
|
from abc import ABC, abstractmethod
|
7
7
|
from collections import defaultdict
|
8
|
-
from
|
8
|
+
from dataclasses import dataclass
|
9
|
+
from typing import Any, Optional, Union, overload
|
9
10
|
|
10
11
|
from localstack import config
|
11
12
|
from localstack.runtime import hooks
|
@@ -16,6 +17,59 @@ from localstack.utils.analytics.publisher import AnalyticsClientPublisher
|
|
16
17
|
LOG = logging.getLogger(__name__)
|
17
18
|
|
18
19
|
|
20
|
+
@dataclass(frozen=True)
|
21
|
+
class MetricRegistryKey:
|
22
|
+
namespace: str
|
23
|
+
name: str
|
24
|
+
|
25
|
+
|
26
|
+
@dataclass(frozen=True)
|
27
|
+
class CounterPayload:
|
28
|
+
"""An immutable snapshot of a counter metric at the time of collection."""
|
29
|
+
|
30
|
+
namespace: str
|
31
|
+
name: str
|
32
|
+
value: int
|
33
|
+
type: str
|
34
|
+
labels: Optional[dict[str, Union[str, float]]] = None
|
35
|
+
|
36
|
+
def as_dict(self) -> dict[str, Any]:
|
37
|
+
result = {
|
38
|
+
"namespace": self.namespace,
|
39
|
+
"name": self.name,
|
40
|
+
"value": self.value,
|
41
|
+
"type": self.type,
|
42
|
+
}
|
43
|
+
|
44
|
+
if self.labels:
|
45
|
+
# Convert labels to the expected format (label_1, label_1_value, etc.)
|
46
|
+
for i, (label_name, label_value) in enumerate(self.labels.items(), 1):
|
47
|
+
result[f"label_{i}"] = label_name
|
48
|
+
result[f"label_{i}_value"] = label_value
|
49
|
+
|
50
|
+
return result
|
51
|
+
|
52
|
+
|
53
|
+
@dataclass
|
54
|
+
class MetricPayload:
|
55
|
+
"""
|
56
|
+
Stores all metric payloads collected during the execution of the LocalStack emulator.
|
57
|
+
Currently, supports only counter-type metrics, but designed to accommodate other types in the future.
|
58
|
+
"""
|
59
|
+
|
60
|
+
_payload: list[CounterPayload] # support for other metric types may be added in the future.
|
61
|
+
|
62
|
+
@property
|
63
|
+
def payload(self) -> list[CounterPayload]:
|
64
|
+
return self._payload
|
65
|
+
|
66
|
+
def __init__(self, payload: list[CounterPayload]):
|
67
|
+
self._payload = payload
|
68
|
+
|
69
|
+
def as_dict(self) -> dict[str, list[dict[str, Any]]]:
|
70
|
+
return {"metrics": [payload.as_dict() for payload in self._payload]}
|
71
|
+
|
72
|
+
|
19
73
|
class MetricRegistry:
|
20
74
|
"""
|
21
75
|
A Singleton class responsible for managing all registered metrics.
|
@@ -39,7 +93,7 @@ class MetricRegistry:
|
|
39
93
|
self._registry = dict()
|
40
94
|
|
41
95
|
@property
|
42
|
-
def registry(self) ->
|
96
|
+
def registry(self) -> dict[MetricRegistryKey, "Metric"]:
|
43
97
|
return self._registry
|
44
98
|
|
45
99
|
def register(self, metric: Metric) -> None:
|
@@ -54,22 +108,28 @@ class MetricRegistry:
|
|
54
108
|
if not isinstance(metric, Metric):
|
55
109
|
raise TypeError("Only subclasses of `Metric` can be registered.")
|
56
110
|
|
57
|
-
if metric.
|
58
|
-
raise ValueError(
|
111
|
+
if not metric.namespace:
|
112
|
+
raise ValueError("Metric 'namespace' must be defined and non-empty.")
|
59
113
|
|
60
|
-
|
114
|
+
registry_unique_key = MetricRegistryKey(namespace=metric.namespace, name=metric.name)
|
115
|
+
if registry_unique_key in self._registry:
|
116
|
+
raise ValueError(
|
117
|
+
f"A metric named '{metric.name}' already exists in the '{metric.namespace}' namespace"
|
118
|
+
)
|
61
119
|
|
62
|
-
|
120
|
+
self._registry[registry_unique_key] = metric
|
121
|
+
|
122
|
+
def collect(self) -> MetricPayload:
|
63
123
|
"""
|
64
124
|
Collects all registered metrics.
|
65
125
|
"""
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
126
|
+
payload = [
|
127
|
+
metric
|
128
|
+
for metric_instance in self._registry.values()
|
129
|
+
for metric in metric_instance.collect()
|
130
|
+
]
|
131
|
+
|
132
|
+
return MetricPayload(payload=payload)
|
73
133
|
|
74
134
|
|
75
135
|
class Metric(ABC):
|
@@ -79,20 +139,30 @@ class Metric(ABC):
|
|
79
139
|
Each subclass must implement the `collect()` method.
|
80
140
|
"""
|
81
141
|
|
142
|
+
_namespace: str
|
82
143
|
_name: str
|
83
144
|
|
84
|
-
def __init__(self, name: str):
|
145
|
+
def __init__(self, namespace: str, name: str):
|
146
|
+
if not namespace or namespace.strip() == "":
|
147
|
+
raise ValueError("Namespace must be non-empty string.")
|
148
|
+
self._namespace = namespace
|
149
|
+
|
85
150
|
if not name or name.strip() == "":
|
86
151
|
raise ValueError("Metric name must be non-empty string.")
|
87
|
-
|
88
152
|
self._name = name
|
89
153
|
|
154
|
+
@property
|
155
|
+
def namespace(self) -> str:
|
156
|
+
return self._namespace
|
157
|
+
|
90
158
|
@property
|
91
159
|
def name(self) -> str:
|
92
160
|
return self._name
|
93
161
|
|
94
162
|
@abstractmethod
|
95
|
-
def collect(
|
163
|
+
def collect(
|
164
|
+
self,
|
165
|
+
) -> list[CounterPayload]: # support for other metric types may be added in the future.
|
96
166
|
"""
|
97
167
|
Collects and returns metric data. Subclasses must implement this to return collected metric data.
|
98
168
|
"""
|
@@ -143,18 +213,16 @@ class CounterMetric(Metric, BaseCounter):
|
|
143
213
|
This class should not be instantiated directly, use the Counter class instead.
|
144
214
|
"""
|
145
215
|
|
146
|
-
_namespace: Optional[str]
|
147
216
|
_type: str
|
148
217
|
|
149
|
-
def __init__(self,
|
150
|
-
Metric.__init__(self, name=name)
|
218
|
+
def __init__(self, namespace: str, name: str):
|
219
|
+
Metric.__init__(self, namespace=namespace, name=name)
|
151
220
|
BaseCounter.__init__(self)
|
152
221
|
|
153
|
-
self._namespace = namespace.strip() if namespace else ""
|
154
222
|
self._type = "counter"
|
155
223
|
MetricRegistry().register(self)
|
156
224
|
|
157
|
-
def collect(self) ->
|
225
|
+
def collect(self) -> list[CounterPayload]:
|
158
226
|
"""Collects the metric unless events are disabled."""
|
159
227
|
if config.DISABLE_EVENTS:
|
160
228
|
return list()
|
@@ -162,13 +230,11 @@ class CounterMetric(Metric, BaseCounter):
|
|
162
230
|
if self._count == 0:
|
163
231
|
# Return an empty list if the count is 0, as there are no metrics to send to the analytics backend.
|
164
232
|
return list()
|
233
|
+
|
165
234
|
return [
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
"value": self._count,
|
170
|
-
"type": self._type,
|
171
|
-
}
|
235
|
+
CounterPayload(
|
236
|
+
namespace=self._namespace, name=self.name, value=self._count, type=self._type
|
237
|
+
)
|
172
238
|
]
|
173
239
|
|
174
240
|
|
@@ -178,15 +244,14 @@ class LabeledCounterMetric(Metric):
|
|
178
244
|
This class should not be instantiated directly, use the Counter class instead.
|
179
245
|
"""
|
180
246
|
|
181
|
-
_namespace: Optional[str]
|
182
247
|
_type: str
|
183
248
|
_unit: str
|
184
249
|
_labels: list[str]
|
185
|
-
_label_values:
|
186
|
-
_counters_by_label_values: defaultdict[
|
250
|
+
_label_values: tuple[Optional[Union[str, float]], ...]
|
251
|
+
_counters_by_label_values: defaultdict[tuple[Optional[Union[str, float]], ...], BaseCounter]
|
187
252
|
|
188
|
-
def __init__(self,
|
189
|
-
super(LabeledCounterMetric, self).__init__(name=name)
|
253
|
+
def __init__(self, namespace: str, name: str, labels: list[str]):
|
254
|
+
super(LabeledCounterMetric, self).__init__(namespace=namespace, name=name)
|
190
255
|
|
191
256
|
if not labels:
|
192
257
|
raise ValueError("At least one label is required; the labels list cannot be empty.")
|
@@ -197,7 +262,6 @@ class LabeledCounterMetric(Metric):
|
|
197
262
|
if len(labels) > 8:
|
198
263
|
raise ValueError("A maximum of 8 labels are allowed.")
|
199
264
|
|
200
|
-
self._namespace = namespace.strip() if namespace else ""
|
201
265
|
self._type = "counter"
|
202
266
|
self._labels = labels
|
203
267
|
self._counters_by_label_values = defaultdict(BaseCounter)
|
@@ -221,13 +285,12 @@ class LabeledCounterMetric(Metric):
|
|
221
285
|
|
222
286
|
return self._counters_by_label_values[_label_values]
|
223
287
|
|
224
|
-
def
|
225
|
-
|
226
|
-
|
227
|
-
static_key_label_value = [f"label_{i + 1}_value" for i in range(num_labels)]
|
228
|
-
static_key_label = [f"label_{i + 1}" for i in range(num_labels)]
|
288
|
+
def collect(self) -> list[CounterPayload]:
|
289
|
+
if config.DISABLE_EVENTS:
|
290
|
+
return list()
|
229
291
|
|
230
|
-
|
292
|
+
payload = []
|
293
|
+
num_labels = len(self._labels)
|
231
294
|
|
232
295
|
for label_values, counter in self._counters_by_label_values.items():
|
233
296
|
if counter.count == 0:
|
@@ -239,23 +302,23 @@ class LabeledCounterMetric(Metric):
|
|
239
302
|
f"but got {len(label_values)} values {label_values}."
|
240
303
|
)
|
241
304
|
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
"type": self._type,
|
248
|
-
**dict(zip(static_key_label_value, label_values)),
|
249
|
-
**dict(zip(static_key_label, self._labels)),
|
250
|
-
}
|
251
|
-
)
|
305
|
+
# Create labels dictionary
|
306
|
+
labels_dict = {
|
307
|
+
label_name: label_value
|
308
|
+
for label_name, label_value in zip(self._labels, label_values)
|
309
|
+
}
|
252
310
|
|
253
|
-
|
311
|
+
payload.append(
|
312
|
+
CounterPayload(
|
313
|
+
namespace=self._namespace,
|
314
|
+
name=self.name,
|
315
|
+
value=counter.count,
|
316
|
+
type=self._type,
|
317
|
+
labels=labels_dict,
|
318
|
+
)
|
319
|
+
)
|
254
320
|
|
255
|
-
|
256
|
-
if config.DISABLE_EVENTS:
|
257
|
-
return list()
|
258
|
-
return self._as_list()
|
321
|
+
return payload
|
259
322
|
|
260
323
|
|
261
324
|
class Counter:
|
@@ -268,17 +331,15 @@ class Counter:
|
|
268
331
|
"""
|
269
332
|
|
270
333
|
@overload
|
271
|
-
def __new__(cls,
|
334
|
+
def __new__(cls, namespace: str, name: str) -> CounterMetric:
|
272
335
|
return CounterMetric(namespace=namespace, name=name)
|
273
336
|
|
274
337
|
@overload
|
275
|
-
def __new__(
|
276
|
-
cls, name: str, labels: List[str], namespace: Optional[str] = ""
|
277
|
-
) -> LabeledCounterMetric:
|
338
|
+
def __new__(cls, namespace: str, name: str, labels: list[str]) -> LabeledCounterMetric:
|
278
339
|
return LabeledCounterMetric(namespace=namespace, name=name, labels=labels)
|
279
340
|
|
280
341
|
def __new__(
|
281
|
-
cls,
|
342
|
+
cls, namespace: str, name: str, labels: Optional[list[str]] = None
|
282
343
|
) -> Union[CounterMetric, LabeledCounterMetric]:
|
283
344
|
if labels is not None:
|
284
345
|
return LabeledCounterMetric(namespace=namespace, name=name, labels=labels)
|
@@ -297,7 +358,7 @@ def publish_metrics() -> None:
|
|
297
358
|
return
|
298
359
|
|
299
360
|
collected_metrics = MetricRegistry().collect()
|
300
|
-
if not collected_metrics
|
361
|
+
if not collected_metrics.payload: # Skip publishing if no metrics remain after filtering
|
301
362
|
return
|
302
363
|
|
303
364
|
metadata = EventMetadata(
|
@@ -307,4 +368,6 @@ def publish_metrics() -> None:
|
|
307
368
|
|
308
369
|
if collected_metrics:
|
309
370
|
publisher = AnalyticsClientPublisher()
|
310
|
-
publisher.publish(
|
371
|
+
publisher.publish(
|
372
|
+
[Event(name="ls_metrics", metadata=metadata, payload=collected_metrics.as_dict())]
|
373
|
+
)
|
localstack/version.py
CHANGED
@@ -17,5 +17,5 @@ __version__: str
|
|
17
17
|
__version_tuple__: VERSION_TUPLE
|
18
18
|
version_tuple: VERSION_TUPLE
|
19
19
|
|
20
|
-
__version__ = version = '4.4.1.
|
21
|
-
__version_tuple__ = version_tuple = (4, 4, 1, '
|
20
|
+
__version__ = version = '4.4.1.dev69'
|
21
|
+
__version_tuple__ = version_tuple = (4, 4, 1, 'dev69')
|
@@ -4,7 +4,7 @@ localstack/deprecations.py,sha256=mNXTebZ8kSbQjFKz0LbT-g1Kdr0CE8bhEgZfHV3IX0s,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=z9Kz5prke3b1wuadhqes9iPHbLh5UsCrHdh40ZzQTYg,526
|
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
|
@@ -192,24 +192,24 @@ localstack/services/apigateway/legacy/context.py,sha256=rAxA3Hsse8uDpDWsbJPvQUyD
|
|
192
192
|
localstack/services/apigateway/legacy/helpers.py,sha256=NXqO51XF84JNhfiACs2GS7IkZrVDD9THmq-j5oNkn-I,27714
|
193
193
|
localstack/services/apigateway/legacy/integration.py,sha256=huAXczErE_txGt29zLLm6Sl8GDemLTdI9Ku94uAZ0Y4,48669
|
194
194
|
localstack/services/apigateway/legacy/invocations.py,sha256=rowiOycXuehS6JC-WPipLTuNVoGS4lC-Y2VPy7pxUK0,15310
|
195
|
-
localstack/services/apigateway/legacy/provider.py,sha256=
|
195
|
+
localstack/services/apigateway/legacy/provider.py,sha256=nYsGMbwCMZfx5LmXcaPN9-OnC6rbfDjXMmt_JLjXfE0,121874
|
196
196
|
localstack/services/apigateway/legacy/router_asf.py,sha256=-hf0eRxn0BXiSf_-1j2N2JtY6dVeoY19eckB8JTCPwI,6102
|
197
197
|
localstack/services/apigateway/legacy/templates.py,sha256=LiK-LRO0hadI3_JgzbwMsybD-2XEGvgn06KcUEjL0Uo,15065
|
198
198
|
localstack/services/apigateway/next_gen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
199
|
-
localstack/services/apigateway/next_gen/provider.py,sha256=
|
199
|
+
localstack/services/apigateway/next_gen/provider.py,sha256=bTso2VEQ2qHwQee4o81H5YrU9isQ4y-1f_BtfftarJU,21500
|
200
200
|
localstack/services/apigateway/next_gen/execute_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
201
201
|
localstack/services/apigateway/next_gen/execute_api/api.py,sha256=4hBm-VYLhctVocblhap2g9HxbDu2HoMW0LkvxaMVFCA,550
|
202
|
-
localstack/services/apigateway/next_gen/execute_api/context.py,sha256=
|
202
|
+
localstack/services/apigateway/next_gen/execute_api/context.py,sha256=GDXZqH88Xx9wsoxPsKfXBObZFJ_08QHnBQbNl2zNt_M,5485
|
203
203
|
localstack/services/apigateway/next_gen/execute_api/gateway.py,sha256=8ZOqyrm5BiXpCQd2oxH5THN8WIALM7B-F5xAinDccmU,1791
|
204
204
|
localstack/services/apigateway/next_gen/execute_api/gateway_response.py,sha256=MxBDid0utvBhOPVYDav9eo4biHb-4EhXy9UvNFg3ZMU,10304
|
205
205
|
localstack/services/apigateway/next_gen/execute_api/header_utils.py,sha256=XViyp3Ku6-9LZrN792iROojVWqDSV1iq21C0BOOoGA8,1716
|
206
|
-
localstack/services/apigateway/next_gen/execute_api/helpers.py,sha256=
|
207
|
-
localstack/services/apigateway/next_gen/execute_api/moto_helpers.py,sha256=
|
206
|
+
localstack/services/apigateway/next_gen/execute_api/helpers.py,sha256=aH6coQ3Uth2EUQUWijYnGSK0kBFjsfDZZyRB2vrTdKA,6118
|
207
|
+
localstack/services/apigateway/next_gen/execute_api/moto_helpers.py,sha256=1_ww5oVj5vhGbex1kheY4eCPBc0Q0QBWeb2RGNSs77s,2895
|
208
208
|
localstack/services/apigateway/next_gen/execute_api/parameters_mapping.py,sha256=iDkI7WIp9xBnKQx--Xpao5bmTNpdDfu6Iz3HRfl6ykc,12173
|
209
|
-
localstack/services/apigateway/next_gen/execute_api/router.py,sha256=
|
209
|
+
localstack/services/apigateway/next_gen/execute_api/router.py,sha256=MyBM_f3DpFuFxDEvzJmauBVED4szgY2bWTn0mJUQDlA,9058
|
210
210
|
localstack/services/apigateway/next_gen/execute_api/template_mapping.py,sha256=i5tysGpcaIQxtXTwaBTkOeXtlqv3OiI3-Sxl3v8IX5o,10147
|
211
211
|
localstack/services/apigateway/next_gen/execute_api/test_invoke.py,sha256=vzaCUu4RdVNdipcl-Iro3IOpoBkm_m-aAI1XxwgbztA,9574
|
212
|
-
localstack/services/apigateway/next_gen/execute_api/variables.py,sha256=
|
212
|
+
localstack/services/apigateway/next_gen/execute_api/variables.py,sha256=ixEXZWYEjf7RFqPCr1sEZq2PiarvQZjVAD69i7BOhRc,7903
|
213
213
|
localstack/services/apigateway/next_gen/execute_api/handlers/__init__.py,sha256=6a7jt0l36AifxHho9WGBBiQZoEtHiiYsSYLBWUSBNJ4,1338
|
214
214
|
localstack/services/apigateway/next_gen/execute_api/handlers/analytics.py,sha256=5vVSXK3fPRiXt4WwuSoH1s8p2lQr27um7Te-jBZobsc,1733
|
215
215
|
localstack/services/apigateway/next_gen/execute_api/handlers/api_key_validation.py,sha256=Kz_1CqIHv4assRWoO_SPCxe1EZqDjH-kxuXqhfi4oXs,4916
|
@@ -219,7 +219,7 @@ localstack/services/apigateway/next_gen/execute_api/handlers/integration_request
|
|
219
219
|
localstack/services/apigateway/next_gen/execute_api/handlers/integration_response.py,sha256=bBhk6Nokk16DX_nCDyzsI2__4E-TUmBZ_Lzp4MliWnk,13640
|
220
220
|
localstack/services/apigateway/next_gen/execute_api/handlers/method_request.py,sha256=AA8ZxvqUOoyEKxDg-HscE1C7TNn_l2d_PqZq2wpG64Y,5651
|
221
221
|
localstack/services/apigateway/next_gen/execute_api/handlers/method_response.py,sha256=bgBNX1r9ZoZywh9bfx6XuYq5_GvYQGmhcdx-nhMKlGg,3264
|
222
|
-
localstack/services/apigateway/next_gen/execute_api/handlers/parse.py,sha256=
|
222
|
+
localstack/services/apigateway/next_gen/execute_api/handlers/parse.py,sha256=nH_rmKKJA2t3tZIF1r5J1rDKGDEpodPevL6mF_dw6YA,8702
|
223
223
|
localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py,sha256=uipAChGDPqXssQecUBBxydNgQSLo_0HrRieOY9Tgjug,6540
|
224
224
|
localstack/services/apigateway/next_gen/execute_api/handlers/response_enricher.py,sha256=XNCJQ0OpfxIw_hrPhJ_UKbJuTWbrHe5ZNwbIWDATiGw,1145
|
225
225
|
localstack/services/apigateway/next_gen/execute_api/integrations/__init__.py,sha256=-eU2l2ktfSZoLAXNjsmbsFoDKjSV885Faqr1UHBmy00,562
|
@@ -1246,7 +1246,7 @@ localstack/utils/analytics/client.py,sha256=6bUWMpS42dUCRcRhkJuqHhlx_OSJegQJ4WJo
|
|
1246
1246
|
localstack/utils/analytics/events.py,sha256=XMzrrcJc-p-6DxQfALHWO4lZco_I30dt_5MbCR_sKJc,582
|
1247
1247
|
localstack/utils/analytics/logger.py,sha256=-sA_zjptY7o2kOXP2sDduQPzfNwULYIRnoqwKGgsg2Q,1397
|
1248
1248
|
localstack/utils/analytics/metadata.py,sha256=tup9FurX-SlDGGY0at4YBcfdavz5C4pLet-gaqZltfM,7151
|
1249
|
-
localstack/utils/analytics/metrics.py,sha256=
|
1249
|
+
localstack/utils/analytics/metrics.py,sha256=1PIHZSZtGjcl6uTYto-HVeq3gdUnF4z389IeWttF4M8,11837
|
1250
1250
|
localstack/utils/analytics/publisher.py,sha256=Y_xbaM-cZjZVtTRSCQWpGLU4KrSiLJ7TC-iaIyBOufw,8629
|
1251
1251
|
localstack/utils/analytics/service_request_aggregator.py,sha256=QhgvA79wDjrXq3FI7EP9ziTHYEOspot7fy6D0yfVKDw,3926
|
1252
1252
|
localstack/utils/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1279,13 +1279,13 @@ localstack/utils/server/tcp_proxy.py,sha256=rR6d5jR0ozDvIlpHiqW0cfyY9a2fRGdOzyA8
|
|
1279
1279
|
localstack/utils/xray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1280
1280
|
localstack/utils/xray/trace_header.py,sha256=ahXk9eonq7LpeENwlqUEPj3jDOCiVRixhntQuxNor-Q,6209
|
1281
1281
|
localstack/utils/xray/traceid.py,sha256=SQSsMV2rhbTNK6ceIoozZYuGU7Fg687EXcgqxoDl1Fw,1106
|
1282
|
-
localstack_core-4.4.1.
|
1283
|
-
localstack_core-4.4.1.
|
1284
|
-
localstack_core-4.4.1.
|
1285
|
-
localstack_core-4.4.1.
|
1286
|
-
localstack_core-4.4.1.
|
1287
|
-
localstack_core-4.4.1.
|
1288
|
-
localstack_core-4.4.1.
|
1289
|
-
localstack_core-4.4.1.
|
1290
|
-
localstack_core-4.4.1.
|
1291
|
-
localstack_core-4.4.1.
|
1282
|
+
localstack_core-4.4.1.dev69.data/scripts/localstack,sha256=WyL11vp5CkuP79iIR-L8XT7Cj8nvmxX7XRAgxhbmXNE,529
|
1283
|
+
localstack_core-4.4.1.dev69.data/scripts/localstack-supervisor,sha256=nm1Il2d6ASyOB6Vo4CRHd90w7TK9FdRl9VPp0NN6hUk,6378
|
1284
|
+
localstack_core-4.4.1.dev69.data/scripts/localstack.bat,sha256=tlzZTXtveHkMX_s_fa7VDfvdNdS8iVpEz2ER3uk9B_c,29
|
1285
|
+
localstack_core-4.4.1.dev69.dist-info/licenses/LICENSE.txt,sha256=3PC-9Z69UsNARuQ980gNR_JsLx8uvMjdG6C7cc4LBYs,606
|
1286
|
+
localstack_core-4.4.1.dev69.dist-info/METADATA,sha256=jglL1BtkPDgzYzTzCBy7UP5nFhkGvVhD2r-Xq2S4X4w,5539
|
1287
|
+
localstack_core-4.4.1.dev69.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
1288
|
+
localstack_core-4.4.1.dev69.dist-info/entry_points.txt,sha256=K5M7il9Vwev64SlQiOaZVUhYpVNIE6IFHiWJ0znpbHQ,20491
|
1289
|
+
localstack_core-4.4.1.dev69.dist-info/plux.json,sha256=S46RdA2rCgjmixNLFzp8_6aHQbspCkQFSgmy9HpCLdg,20712
|
1290
|
+
localstack_core-4.4.1.dev69.dist-info/top_level.txt,sha256=3sqmK2lGac8nCy8nwsbS5SpIY_izmtWtgaTFKHYVHbI,11
|
1291
|
+
localstack_core-4.4.1.dev69.dist-info/RECORD,,
|
@@ -0,0 +1 @@
|
|
1
|
+
{"localstack.cloudformation.resource_providers": ["AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "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::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "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::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "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::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin"], "localstack.packages": ["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", "elasticsearch/community=localstack.services.es.plugins:elasticsearch_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "lambda-java-libs/community=localstack.services.lambda_.plugins:lambda_java_libs", "lambda-runtime/community=localstack.services.lambda_.plugins:lambda_runtime_package", "opensearch/community=localstack.services.opensearch.plugins:opensearch_package"], "localstack.hooks.on_infra_start": ["setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server", "delete_cached_certificate=localstack.plugins:delete_cached_certificate", "deprecation_warnings=localstack.plugins:deprecation_warnings", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "_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", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui"], "localstack.hooks.on_infra_shutdown": ["stop_server=localstack.dns.plugins:stop_server", "_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown", "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", "remove_custom_endpoints=localstack.services.lambda_.plugins:remove_custom_endpoints", "publish_metrics=localstack.utils.analytics.metrics:publish_metrics"], "localstack.openapi.spec": ["localstack=localstack.plugins:CoreOASPlugin"], "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"], "localstack.lambda.runtime_executor": ["docker=localstack.services.lambda_.invocation.plugins:DockerRuntimeExecutorPlugin"], "localstack.runtime.server": ["hypercorn=localstack.runtime.server.plugins:HypercornRuntimeServerPlugin", "twisted=localstack.runtime.server.plugins:TwistedRuntimeServerPlugin"], "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:default=localstack.services.providers:cloudformation", "cloudformation:engine-v2=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", "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.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"]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"localstack.cloudformation.resource_providers": ["AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "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::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "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::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "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::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin"], "localstack.openapi.spec": ["localstack=localstack.plugins:CoreOASPlugin"], "localstack.hooks.on_infra_start": ["delete_cached_certificate=localstack.plugins:delete_cached_certificate", "deprecation_warnings=localstack.plugins:deprecation_warnings", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server", "apply_runtime_patches=localstack.runtime.patches:apply_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", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints"], "localstack.packages": ["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", "elasticsearch/community=localstack.services.es.plugins:elasticsearch_package", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "lambda-java-libs/community=localstack.services.lambda_.plugins:lambda_java_libs", "lambda-runtime/community=localstack.services.lambda_.plugins:lambda_runtime_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "opensearch/community=localstack.services.opensearch.plugins:opensearch_package"], "localstack.hooks.on_infra_shutdown": ["publish_metrics=localstack.utils.analytics.metrics:publish_metrics", "stop_server=localstack.dns.plugins:stop_server", "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"], "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.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:default=localstack.services.providers:cloudformation", "cloudformation:engine-v2=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", "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.runtime.server": ["hypercorn=localstack.runtime.server.plugins:HypercornRuntimeServerPlugin", "twisted=localstack.runtime.server.plugins:TwistedRuntimeServerPlugin"], "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"], "localstack.lambda.runtime_executor": ["docker=localstack.services.lambda_.invocation.plugins:DockerRuntimeExecutorPlugin"], "localstack.runtime.components": ["aws=localstack.aws.components:AwsComponents"]}
|
File without changes
|
{localstack_core-4.4.1.dev67.data → localstack_core-4.4.1.dev69.data}/scripts/localstack-supervisor
RENAMED
File without changes
|
{localstack_core-4.4.1.dev67.data → localstack_core-4.4.1.dev69.data}/scripts/localstack.bat
RENAMED
File without changes
|
File without changes
|
{localstack_core-4.4.1.dev67.dist-info → localstack_core-4.4.1.dev69.dist-info}/entry_points.txt
RENAMED
File without changes
|
{localstack_core-4.4.1.dev67.dist-info → localstack_core-4.4.1.dev69.dist-info}/licenses/LICENSE.txt
RENAMED
File without changes
|
{localstack_core-4.4.1.dev67.dist-info → localstack_core-4.4.1.dev69.dist-info}/top_level.txt
RENAMED
File without changes
|