localstack-core 4.4.1.dev19__py3-none-any.whl → 4.4.1.dev21__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.
Files changed (23) hide show
  1. localstack/config.py +14 -0
  2. localstack/services/apigateway/next_gen/execute_api/context.py +5 -1
  3. localstack/services/apigateway/next_gen/execute_api/handlers/integration_request.py +12 -8
  4. localstack/services/apigateway/next_gen/execute_api/handlers/integration_response.py +2 -1
  5. localstack/services/apigateway/next_gen/execute_api/handlers/parse.py +11 -1
  6. localstack/services/apigateway/next_gen/execute_api/template_mapping.py +16 -11
  7. localstack/services/apigateway/next_gen/execute_api/test_invoke.py +9 -1
  8. localstack/services/apigateway/next_gen/execute_api/variables.py +5 -0
  9. localstack/services/kinesis/kinesis_mock_server.py +81 -18
  10. localstack/services/kinesis/packages.py +67 -13
  11. localstack/services/kinesis/plugins.py +9 -1
  12. localstack/version.py +2 -2
  13. {localstack_core-4.4.1.dev19.dist-info → localstack_core-4.4.1.dev21.dist-info}/METADATA +1 -1
  14. {localstack_core-4.4.1.dev19.dist-info → localstack_core-4.4.1.dev21.dist-info}/RECORD +22 -22
  15. localstack_core-4.4.1.dev21.dist-info/plux.json +1 -0
  16. localstack_core-4.4.1.dev19.dist-info/plux.json +0 -1
  17. {localstack_core-4.4.1.dev19.data → localstack_core-4.4.1.dev21.data}/scripts/localstack +0 -0
  18. {localstack_core-4.4.1.dev19.data → localstack_core-4.4.1.dev21.data}/scripts/localstack-supervisor +0 -0
  19. {localstack_core-4.4.1.dev19.data → localstack_core-4.4.1.dev21.data}/scripts/localstack.bat +0 -0
  20. {localstack_core-4.4.1.dev19.dist-info → localstack_core-4.4.1.dev21.dist-info}/WHEEL +0 -0
  21. {localstack_core-4.4.1.dev19.dist-info → localstack_core-4.4.1.dev21.dist-info}/entry_points.txt +0 -0
  22. {localstack_core-4.4.1.dev19.dist-info → localstack_core-4.4.1.dev21.dist-info}/licenses/LICENSE.txt +0 -0
  23. {localstack_core-4.4.1.dev19.dist-info → localstack_core-4.4.1.dev21.dist-info}/top_level.txt +0 -0
localstack/config.py CHANGED
@@ -896,6 +896,20 @@ KINESIS_MOCK_LOG_LEVEL = os.environ.get("KINESIS_MOCK_LOG_LEVEL", "").strip()
896
896
  # randomly inject faults to Kinesis
897
897
  KINESIS_ERROR_PROBABILITY = float(os.environ.get("KINESIS_ERROR_PROBABILITY", "").strip() or 0.0)
898
898
 
899
+ # SEMI-PUBLIC: "node" (default); not actively communicated
900
+ # Select whether to use the node or scala build when running Kinesis Mock
901
+ KINESIS_MOCK_PROVIDER_ENGINE = os.environ.get("KINESIS_MOCK_PROVIDER_ENGINE", "").strip() or "node"
902
+
903
+ # set the maximum Java heap size corresponding to the '-Xmx<size>' flag
904
+ KINESIS_MOCK_MAXIMUM_HEAP_SIZE = (
905
+ os.environ.get("KINESIS_MOCK_MAXIMUM_HEAP_SIZE", "").strip() or "512m"
906
+ )
907
+
908
+ # set the initial Java heap size corresponding to the '-Xms<size>' flag
909
+ KINESIS_MOCK_INITIAL_HEAP_SIZE = (
910
+ os.environ.get("KINESIS_MOCK_INITIAL_HEAP_SIZE", "").strip() or "256m"
911
+ )
912
+
899
913
  # randomly inject faults to DynamoDB
900
914
  DYNAMODB_ERROR_PROBABILITY = float(os.environ.get("DYNAMODB_ERROR_PROBABILITY", "").strip() or 0.0)
901
915
  DYNAMODB_READ_ERROR_PROBABILITY = float(
@@ -8,7 +8,7 @@ from werkzeug.datastructures import Headers
8
8
  from localstack.aws.api.apigateway import Integration, Method, Resource
9
9
  from localstack.services.apigateway.models import RestApiDeployment
10
10
 
11
- from .variables import ContextVariables, LoggingContextVariables
11
+ from .variables import ContextVariableOverrides, ContextVariables, LoggingContextVariables
12
12
 
13
13
 
14
14
  class InvocationRequest(TypedDict, total=False):
@@ -98,6 +98,9 @@ class RestApiInvocationContext(RequestContext):
98
98
  """The Stage variables, also used in parameters mapping and mapping templates"""
99
99
  context_variables: Optional[ContextVariables]
100
100
  """The $context used in data models, authorizers, mapping templates, and CloudWatch access logging"""
101
+ context_variable_overrides: Optional[ContextVariableOverrides]
102
+ """requestOverrides and responseOverrides are passed from request templates to response templates but are
103
+ not in the integration context"""
101
104
  logging_context_variables: Optional[LoggingContextVariables]
102
105
  """Additional $context variables available only for access logging, not yet implemented"""
103
106
  invocation_request: Optional[InvocationRequest]
@@ -129,3 +132,4 @@ class RestApiInvocationContext(RequestContext):
129
132
  self.endpoint_response = None
130
133
  self.invocation_response = None
131
134
  self.trace_id = None
135
+ self.context_variable_overrides = None
@@ -22,7 +22,7 @@ from ..template_mapping import (
22
22
  MappingTemplateParams,
23
23
  MappingTemplateVariables,
24
24
  )
25
- from ..variables import ContextVarsRequestOverride
25
+ from ..variables import ContextVariableOverrides, ContextVarsRequestOverride
26
26
 
27
27
  LOG = logging.getLogger(__name__)
28
28
 
@@ -119,13 +119,16 @@ class IntegrationRequestHandler(RestApiGatewayHandler):
119
119
 
120
120
  converted_body = self.convert_body(context)
121
121
 
122
- body, request_override = self.render_request_template_mapping(
122
+ body, mapped_overrides = self.render_request_template_mapping(
123
123
  context=context, body=converted_body, template=request_template
124
124
  )
125
+ # Update the context with the returned mapped overrides
126
+ context.context_variable_overrides = mapped_overrides
125
127
  # mutate the ContextVariables with the requestOverride result, as we copy the context when rendering the
126
128
  # template to avoid mutation on other fields
127
- # the VTL responseTemplate can access the requestOverride
128
- context.context_variables["requestOverride"] = request_override
129
+ request_override: ContextVarsRequestOverride = mapped_overrides.get(
130
+ "requestOverride", {}
131
+ )
129
132
  # TODO: log every override that happens afterwards (in a loop on `request_override`)
130
133
  merge_recursive(request_override, request_data_mapping, overwrite=True)
131
134
 
@@ -180,18 +183,18 @@ class IntegrationRequestHandler(RestApiGatewayHandler):
180
183
  context: RestApiInvocationContext,
181
184
  body: str | bytes,
182
185
  template: str,
183
- ) -> tuple[bytes, ContextVarsRequestOverride]:
186
+ ) -> tuple[bytes, ContextVariableOverrides]:
184
187
  request: InvocationRequest = context.invocation_request
185
188
 
186
189
  if not template:
187
- return to_bytes(body), {}
190
+ return to_bytes(body), context.context_variable_overrides
188
191
 
189
192
  try:
190
193
  body_utf8 = to_str(body)
191
194
  except UnicodeError:
192
195
  raise InternalServerError("Internal server error")
193
196
 
194
- body, request_override = self._vtl_template.render_request(
197
+ body, mapped_overrides = self._vtl_template.render_request(
195
198
  template=template,
196
199
  variables=MappingTemplateVariables(
197
200
  context=context.context_variables,
@@ -205,8 +208,9 @@ class IntegrationRequestHandler(RestApiGatewayHandler):
205
208
  ),
206
209
  ),
207
210
  ),
211
+ context_overrides=context.context_variable_overrides,
208
212
  )
209
- return to_bytes(body), request_override
213
+ return to_bytes(body), mapped_overrides
210
214
 
211
215
  @staticmethod
212
216
  def get_request_template(integration: Integration, request: InvocationRequest) -> str:
@@ -263,7 +263,7 @@ class IntegrationResponseHandler(RestApiGatewayHandler):
263
263
  self, context: RestApiInvocationContext, template: str, body: bytes | str
264
264
  ) -> tuple[bytes, ContextVarsResponseOverride]:
265
265
  if not template:
266
- return to_bytes(body), ContextVarsResponseOverride(status=0, header={})
266
+ return to_bytes(body), context.context_variable_overrides["responseOverride"]
267
267
 
268
268
  # if there are no template, we can pass binary data through
269
269
  if not isinstance(body, str):
@@ -284,6 +284,7 @@ class IntegrationResponseHandler(RestApiGatewayHandler):
284
284
  ),
285
285
  ),
286
286
  ),
287
+ context_overrides=context.context_variable_overrides,
287
288
  )
288
289
 
289
290
  # AWS ignores the status if the override isn't an integer between 100 and 599
@@ -18,7 +18,13 @@ 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
20
  from ..moto_helpers import get_stage_variables
21
- from ..variables import ContextVariables, ContextVarsIdentity
21
+ from ..variables import (
22
+ ContextVariableOverrides,
23
+ ContextVariables,
24
+ ContextVarsIdentity,
25
+ ContextVarsRequestOverride,
26
+ ContextVarsResponseOverride,
27
+ )
22
28
 
23
29
  LOG = logging.getLogger(__name__)
24
30
 
@@ -40,6 +46,10 @@ class InvocationRequestParser(RestApiGatewayHandler):
40
46
  # then we can create the ContextVariables, used throughout the invocation as payload and to render authorizer
41
47
  # payload, mapping templates and such.
42
48
  context.context_variables = self.create_context_variables(context)
49
+ context.context_variable_overrides = ContextVariableOverrides(
50
+ requestOverride=ContextVarsRequestOverride(header={}, querystring={}, path={}),
51
+ responseOverride=ContextVarsResponseOverride(header={}, status=0),
52
+ )
43
53
  # TODO: maybe adjust the logging
44
54
  LOG.debug("Initializing $context='%s'", context.context_variables)
45
55
  # then populate the stage variables
@@ -26,8 +26,8 @@ from airspeed.operators import dict_to_string
26
26
 
27
27
  from localstack import config
28
28
  from localstack.services.apigateway.next_gen.execute_api.variables import (
29
+ ContextVariableOverrides,
29
30
  ContextVariables,
30
- ContextVarsRequestOverride,
31
31
  ContextVarsResponseOverride,
32
32
  )
33
33
  from localstack.utils.aws.templating import APIGW_SOURCE, VelocityUtil, VtlTemplate
@@ -261,22 +261,27 @@ class ApiGatewayVtlTemplate(VtlTemplate):
261
261
  return namespace
262
262
 
263
263
  def render_request(
264
- self, template: str, variables: MappingTemplateVariables
265
- ) -> tuple[str, ContextVarsRequestOverride]:
264
+ self,
265
+ template: str,
266
+ variables: MappingTemplateVariables,
267
+ context_overrides: ContextVariableOverrides,
268
+ ) -> tuple[str, ContextVariableOverrides]:
266
269
  variables_copy: MappingTemplateVariables = copy.deepcopy(variables)
267
- variables_copy["context"]["requestOverride"] = ContextVarsRequestOverride(
268
- querystring={}, header={}, path={}
269
- )
270
+ variables_copy["context"].update(copy.deepcopy(context_overrides))
270
271
  result = self.render_vtl(template=template.strip(), variables=variables_copy)
271
- return result, variables_copy["context"]["requestOverride"]
272
+ return result, ContextVariableOverrides(
273
+ requestOverride=variables_copy["context"]["requestOverride"],
274
+ responseOverride=variables_copy["context"]["responseOverride"],
275
+ )
272
276
 
273
277
  def render_response(
274
- self, template: str, variables: MappingTemplateVariables
278
+ self,
279
+ template: str,
280
+ variables: MappingTemplateVariables,
281
+ context_overrides: ContextVariableOverrides,
275
282
  ) -> tuple[str, ContextVarsResponseOverride]:
276
283
  variables_copy: MappingTemplateVariables = copy.deepcopy(variables)
277
- variables_copy["context"]["responseOverride"] = ContextVarsResponseOverride(
278
- header={}, status=0
279
- )
284
+ variables_copy["context"].update(copy.deepcopy(context_overrides))
280
285
  result = self.render_vtl(template=template.strip(), variables=variables_copy)
281
286
  return result, variables_copy["context"]["responseOverride"]
282
287
 
@@ -16,6 +16,11 @@ from .context import InvocationRequest, RestApiInvocationContext
16
16
  from .handlers.resource_router import RestAPIResourceRouter
17
17
  from .header_utils import build_multi_value_headers
18
18
  from .template_mapping import dict_to_string
19
+ from .variables import (
20
+ ContextVariableOverrides,
21
+ ContextVarsRequestOverride,
22
+ ContextVarsResponseOverride,
23
+ )
19
24
 
20
25
  # TODO: we probably need to write and populate those logs as part of the handler chain itself
21
26
  # and store it in the InvocationContext. That way, we could also retrieve in when calling TestInvoke
@@ -150,8 +155,11 @@ def create_test_invocation_context(
150
155
  invocation_context.context_variables = parse_handler.create_context_variables(
151
156
  invocation_context
152
157
  )
158
+ invocation_context.context_variable_overrides = ContextVariableOverrides(
159
+ requestOverride=ContextVarsRequestOverride(header={}, path={}, querystring={}),
160
+ responseOverride=ContextVarsResponseOverride(header={}, status=0),
161
+ )
153
162
  invocation_context.trace_id = parse_handler.populate_trace_id({})
154
-
155
163
  resource = deployment.rest_api.resources[test_request["resourceId"]]
156
164
  resource_method = resource["resourceMethods"][http_method]
157
165
  invocation_context.resource = resource
@@ -75,6 +75,11 @@ class ContextVarsResponseOverride(TypedDict):
75
75
  status: int
76
76
 
77
77
 
78
+ class ContextVariableOverrides(TypedDict):
79
+ requestOverride: ContextVarsRequestOverride
80
+ responseOverride: ContextVarsResponseOverride
81
+
82
+
78
83
  class GatewayResponseContextVarsError(TypedDict, total=False):
79
84
  # This variable can only be used for simple variable substitution in a GatewayResponse body-mapping template,
80
85
  # which is not processed by the Velocity Template Language engine, and in access logging.
@@ -1,11 +1,16 @@
1
1
  import logging
2
2
  import os
3
3
  import threading
4
+ from abc import abstractmethod
4
5
  from pathlib import Path
5
6
  from typing import Dict, List, Optional, Tuple
6
7
 
7
8
  from localstack import config
8
- from localstack.services.kinesis.packages import kinesismock_package
9
+ from localstack.services.kinesis.packages import (
10
+ KinesisMockEngine,
11
+ kinesismock_package,
12
+ kinesismock_scala_package,
13
+ )
9
14
  from localstack.utils.common import TMP_THREADS, ShellCommandThread, get_free_tcp_port, mkdir
10
15
  from localstack.utils.run import FuncThread
11
16
  from localstack.utils.serving import Server
@@ -21,7 +26,7 @@ class KinesisMockServer(Server):
21
26
  def __init__(
22
27
  self,
23
28
  port: int,
24
- js_path: Path,
29
+ exe_path: Path,
25
30
  latency: str,
26
31
  account_id: str,
27
32
  host: str = "localhost",
@@ -32,7 +37,7 @@ class KinesisMockServer(Server):
32
37
  self._latency = latency
33
38
  self._data_dir = data_dir
34
39
  self._data_filename = f"{self._account_id}.json"
35
- self._js_path = js_path
40
+ self._exe_path = exe_path
36
41
  self._log_level = log_level
37
42
  super().__init__(port, host)
38
43
 
@@ -51,15 +56,9 @@ class KinesisMockServer(Server):
51
56
  t.start()
52
57
  return t
53
58
 
54
- def _create_shell_command(self) -> Tuple[List, Dict]:
55
- """
56
- Helper method for creating kinesis mock invocation command
57
- :return: returns a tuple containing the command list and a dictionary with the environment variables
58
- """
59
-
59
+ @property
60
+ def _environment_variables(self) -> Dict:
60
61
  env_vars = {
61
- # Use the `server.json` packaged next to the main.js
62
- "KINESIS_MOCK_CERT_PATH": str((self._js_path.parent / "server.json").absolute()),
63
62
  "KINESIS_MOCK_PLAIN_PORT": self.port,
64
63
  # Each kinesis-mock instance listens to two ports - secure and insecure.
65
64
  # LocalStack uses only one - the insecure one. Block the secure port to avoid conflicts.
@@ -91,13 +90,60 @@ class KinesisMockServer(Server):
91
90
  env_vars["PERSIST_INTERVAL"] = config.KINESIS_MOCK_PERSIST_INTERVAL
92
91
 
93
92
  env_vars["LOG_LEVEL"] = self._log_level
94
- cmd = ["node", self._js_path]
95
- return cmd, env_vars
93
+
94
+ return env_vars
95
+
96
+ @abstractmethod
97
+ def _create_shell_command(self) -> Tuple[List, Dict]:
98
+ """
99
+ Helper method for creating kinesis mock invocation command
100
+ :return: returns a tuple containing the command list and a dictionary with the environment variables
101
+ """
102
+ pass
96
103
 
97
104
  def _log_listener(self, line, **_kwargs):
98
105
  LOG.info(line.rstrip())
99
106
 
100
107
 
108
+ class KinesisMockScalaServer(KinesisMockServer):
109
+ def _create_shell_command(self) -> Tuple[List, Dict]:
110
+ cmd = ["java", "-jar", *self._get_java_vm_options(), str(self._exe_path)]
111
+ return cmd, self._environment_variables
112
+
113
+ @property
114
+ def _environment_variables(self) -> Dict:
115
+ default_env_vars = super()._environment_variables
116
+ kinesis_mock_installer = kinesismock_scala_package.get_installer()
117
+ return {
118
+ **default_env_vars,
119
+ **kinesis_mock_installer.get_java_env_vars(),
120
+ }
121
+
122
+ def _get_java_vm_options(self) -> list[str]:
123
+ return [
124
+ f"-Xms{config.KINESIS_MOCK_INITIAL_HEAP_SIZE}",
125
+ f"-Xmx{config.KINESIS_MOCK_MAXIMUM_HEAP_SIZE}",
126
+ "-XX:MaxGCPauseMillis=500",
127
+ "-XX:+ExitOnOutOfMemoryError",
128
+ ]
129
+
130
+
131
+ class KinesisMockNodeServer(KinesisMockServer):
132
+ @property
133
+ def _environment_variables(self) -> Dict:
134
+ node_env_vars = {
135
+ # Use the `server.json` packaged next to the main.js
136
+ "KINESIS_MOCK_CERT_PATH": str((self._exe_path.parent / "server.json").absolute()),
137
+ }
138
+
139
+ default_env_vars = super()._environment_variables
140
+ return {**node_env_vars, **default_env_vars}
141
+
142
+ def _create_shell_command(self) -> Tuple[List, Dict]:
143
+ cmd = ["node", self._exe_path]
144
+ return cmd, self._environment_variables
145
+
146
+
101
147
  class KinesisServerManager:
102
148
  default_startup_timeout = 60
103
149
 
@@ -136,8 +182,6 @@ class KinesisServerManager:
136
182
  config.KINESIS_LATENCY -> configure stream latency (in milliseconds)
137
183
  """
138
184
  port = get_free_tcp_port()
139
- kinesismock_package.install()
140
- kinesis_mock_js_path = Path(kinesismock_package.get_installer().get_executable_path())
141
185
 
142
186
  # kinesis-mock stores state in json files <account_id>.json, so we can dump everything into `kinesis/`
143
187
  persist_path = os.path.join(config.dirs.data, "kinesis")
@@ -159,12 +203,31 @@ class KinesisServerManager:
159
203
  log_level = "INFO"
160
204
  latency = config.KINESIS_LATENCY + "ms"
161
205
 
162
- server = KinesisMockServer(
206
+ # Install the Scala Kinesis Mock build if specified in KINESIS_MOCK_PROVIDER_ENGINE
207
+ if KinesisMockEngine(config.KINESIS_MOCK_PROVIDER_ENGINE) == KinesisMockEngine.SCALA:
208
+ kinesismock_scala_package.install()
209
+ kinesis_mock_path = Path(
210
+ kinesismock_scala_package.get_installer().get_executable_path()
211
+ )
212
+
213
+ return KinesisMockScalaServer(
214
+ port=port,
215
+ exe_path=kinesis_mock_path,
216
+ log_level=log_level,
217
+ latency=latency,
218
+ data_dir=persist_path,
219
+ account_id=account_id,
220
+ )
221
+
222
+ # Otherwise, install the NodeJS version (default)
223
+ kinesismock_package.install()
224
+ kinesis_mock_path = Path(kinesismock_package.get_installer().get_executable_path())
225
+
226
+ return KinesisMockNodeServer(
163
227
  port=port,
164
- js_path=kinesis_mock_js_path,
228
+ exe_path=kinesis_mock_path,
165
229
  log_level=log_level,
166
230
  latency=latency,
167
231
  data_dir=persist_path,
168
232
  account_id=account_id,
169
233
  )
170
- return server
@@ -1,28 +1,82 @@
1
1
  import os
2
+ from enum import StrEnum
2
3
  from functools import lru_cache
3
- from typing import List
4
+ from typing import Any, List
4
5
 
5
- from localstack.packages import Package
6
- from localstack.packages.core import NodePackageInstaller
6
+ from localstack.packages import InstallTarget, Package
7
+ from localstack.packages.core import GitHubReleaseInstaller, NodePackageInstaller
8
+ from localstack.packages.java import JavaInstallerMixin, java_package
7
9
 
8
- _KINESIS_MOCK_VERSION = os.environ.get("KINESIS_MOCK_VERSION") or "0.4.9"
10
+ _KINESIS_MOCK_VERSION = os.environ.get("KINESIS_MOCK_VERSION") or "0.4.12"
9
11
 
10
12
 
11
- class KinesisMockPackage(Package[NodePackageInstaller]):
12
- def __init__(self, default_version: str = _KINESIS_MOCK_VERSION):
13
+ class KinesisMockEngine(StrEnum):
14
+ NODE = "node"
15
+ SCALA = "scala"
16
+
17
+ @classmethod
18
+ def _missing_(cls, value: str | Any) -> str:
19
+ # default to 'node' if invalid enum
20
+ if not isinstance(value, str):
21
+ return cls(cls.NODE)
22
+ return cls.__members__.get(value.upper(), cls.NODE)
23
+
24
+
25
+ class KinesisMockNodePackageInstaller(NodePackageInstaller):
26
+ def __init__(self, version: str):
27
+ super().__init__(package_name="kinesis-local", version=version)
28
+
29
+
30
+ class KinesisMockScalaPackageInstaller(JavaInstallerMixin, GitHubReleaseInstaller):
31
+ def __init__(self, version: str = _KINESIS_MOCK_VERSION):
32
+ super().__init__(
33
+ name="kinesis-local", tag=f"v{version}", github_slug="etspaceman/kinesis-mock"
34
+ )
35
+
36
+ # Kinesis Mock requires JRE 21+
37
+ self.java_version = "21"
38
+
39
+ def _get_github_asset_name(self) -> str:
40
+ return "kinesis-mock.jar"
41
+
42
+ def _prepare_installation(self, target: InstallTarget) -> None:
43
+ java_package.get_installer(self.java_version).install(target)
44
+
45
+ def get_java_home(self) -> str | None:
46
+ """Override to use the specific Java version"""
47
+ return java_package.get_installer(self.java_version).get_java_home()
48
+
49
+
50
+ class KinesisMockScalaPackage(Package[KinesisMockScalaPackageInstaller]):
51
+ def __init__(
52
+ self,
53
+ default_version: str = _KINESIS_MOCK_VERSION,
54
+ ):
13
55
  super().__init__(name="Kinesis Mock", default_version=default_version)
14
56
 
15
57
  @lru_cache
16
- def _get_installer(self, version: str) -> NodePackageInstaller:
17
- return KinesisMockPackageInstaller(version)
58
+ def _get_installer(self, version: str) -> KinesisMockScalaPackageInstaller:
59
+ return KinesisMockScalaPackageInstaller(version)
18
60
 
19
61
  def get_versions(self) -> List[str]:
20
- return [_KINESIS_MOCK_VERSION]
62
+ return [_KINESIS_MOCK_VERSION] # Only supported on v0.4.12+
21
63
 
22
64
 
23
- class KinesisMockPackageInstaller(NodePackageInstaller):
24
- def __init__(self, version: str):
25
- super().__init__(package_name="kinesis-local", version=version)
65
+ class KinesisMockNodePackage(Package[KinesisMockNodePackageInstaller]):
66
+ def __init__(
67
+ self,
68
+ default_version: str = _KINESIS_MOCK_VERSION,
69
+ ):
70
+ super().__init__(name="Kinesis Mock", default_version=default_version)
71
+
72
+ @lru_cache
73
+ def _get_installer(self, version: str) -> KinesisMockNodePackageInstaller:
74
+ return KinesisMockNodePackageInstaller(version)
75
+
76
+ def get_versions(self) -> List[str]:
77
+ return [_KINESIS_MOCK_VERSION]
26
78
 
27
79
 
28
- kinesismock_package = KinesisMockPackage()
80
+ # leave as 'kinesismock_package' for backwards compatability
81
+ kinesismock_package = KinesisMockNodePackage()
82
+ kinesismock_scala_package = KinesisMockScalaPackage()
@@ -1,8 +1,16 @@
1
+ import localstack.config as config
1
2
  from localstack.packages import Package, package
2
3
 
3
4
 
4
5
  @package(name="kinesis-mock")
5
6
  def kinesismock_package() -> Package:
6
- from localstack.services.kinesis.packages import kinesismock_package
7
+ from localstack.services.kinesis.packages import (
8
+ KinesisMockEngine,
9
+ kinesismock_package,
10
+ kinesismock_scala_package,
11
+ )
12
+
13
+ if KinesisMockEngine(config.KINESIS_MOCK_PROVIDER_ENGINE) == KinesisMockEngine.SCALA:
14
+ return kinesismock_scala_package
7
15
 
8
16
  return kinesismock_package
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.dev19'
21
- __version_tuple__ = version_tuple = (4, 4, 1, 'dev19')
20
+ __version__ = version = '4.4.1.dev21'
21
+ __version_tuple__ = version_tuple = (4, 4, 1, 'dev21')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: localstack-core
3
- Version: 4.4.1.dev19
3
+ Version: 4.4.1.dev21
4
4
  Summary: The core library and runtime of LocalStack
5
5
  Author-email: LocalStack Contributors <info@localstack.cloud>
6
6
  License-Expression: Apache-2.0
@@ -1,10 +1,10 @@
1
- localstack/config.py,sha256=pXgl7lwhBr3vepDgGSpeEOiifAt5MBwuSs5YqHxbeXs,64427
1
+ localstack/config.py,sha256=4S7-Ct0EF97uvkQsxKqAGu92KbZttjoDhu63WoWF0Qc,65031
2
2
  localstack/constants.py,sha256=riikzAY9WFOnAHJqA9OEG1einNykFyGNVrvr2L4cnQc,6872
3
3
  localstack/deprecations.py,sha256=mNXTebZ8kSbQjFKz0LbT-g1Kdr0CE8bhEgZfHV3IX0s,15912
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=S3h-5mLOOossTayLgFjSwJa5BoZGfZkRzwau6YDN5_o,526
7
+ localstack/version.py,sha256=rjq1V5W0DDbBjkaTY4u-biiS8eugTxf9fVv7ZPSrZXw,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
@@ -199,7 +199,7 @@ localstack/services/apigateway/next_gen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5J
199
199
  localstack/services/apigateway/next_gen/provider.py,sha256=iDkrJmfx_4GOk7ixeOx9gOCW78VEgLvZBpv_1VESAAk,11367
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=t7hou4HJshaJJbHMP-Xi2zTzImiATcv_nIcTJ4JOJeY,4905
202
+ localstack/services/apigateway/next_gen/execute_api/context.py,sha256=33967H4AtpVzdwLkJ2yEWmsQ_OVh1HkTW-vNGAAA-Wc,5193
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
@@ -207,19 +207,19 @@ localstack/services/apigateway/next_gen/execute_api/helpers.py,sha256=LeCbwKw9tv
207
207
  localstack/services/apigateway/next_gen/execute_api/moto_helpers.py,sha256=TIoKSLAYMNtguXgto2yctSo0VNdJuyTiB1UKj3e_lD0,2547
208
208
  localstack/services/apigateway/next_gen/execute_api/parameters_mapping.py,sha256=iDkI7WIp9xBnKQx--Xpao5bmTNpdDfu6Iz3HRfl6ykc,12173
209
209
  localstack/services/apigateway/next_gen/execute_api/router.py,sha256=VDrfYSulZs5jQVdvBuYOcKlzL_Q0rNIm2cghqVmHEQg,7717
210
- localstack/services/apigateway/next_gen/execute_api/template_mapping.py,sha256=JBOa1pSI6czRRhox6ijDzYY1q-EXPzmlE_BYZUEtbPw,9987
211
- localstack/services/apigateway/next_gen/execute_api/test_invoke.py,sha256=G0ORdW3PEPlM4zHeEClniSMf9lKfnfMpQS4h6eMCyBI,9206
212
- localstack/services/apigateway/next_gen/execute_api/variables.py,sha256=HEwuFhsskRLJKP1-qmgE0v4rBDcUiJj6Wavo6-i6Jxs,7787
210
+ localstack/services/apigateway/next_gen/execute_api/template_mapping.py,sha256=i5tysGpcaIQxtXTwaBTkOeXtlqv3OiI3-Sxl3v8IX5o,10147
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=ARlPW2Aldg96ft2ufwE9_o-doqyfg68xV-23Sr1D958,7930
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
216
216
  localstack/services/apigateway/next_gen/execute_api/handlers/gateway_exception.py,sha256=7FQ7rgxBdu6kH49dG8pGB7EDPZX3QRBXi-k7k_NDNn8,3746
217
217
  localstack/services/apigateway/next_gen/execute_api/handlers/integration.py,sha256=kHt1hHHj_y9MpTjs1uIwq9zxDxlVqbLZx0E2tjnz_Fo,1097
218
- localstack/services/apigateway/next_gen/execute_api/handlers/integration_request.py,sha256=g7947i82sx5abFIrR9eTsOABWKzRfCUer8oTKlJeyLo,15506
219
- localstack/services/apigateway/next_gen/execute_api/handlers/integration_response.py,sha256=F1n_duaeW7FbUwGj5JgT6jDaSfxbYQyxdEMq2bwsTN0,13568
218
+ localstack/services/apigateway/next_gen/execute_api/handlers/integration_request.py,sha256=c0UQ0GRC7_2CdCicqf-_rpBGwG4AOWY89gXQtN_YJzw,15749
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=UYAf6zFyxR9Vdt-bgXjJE5MyG6LWsxbybnYd3TpFuxI,8285
222
+ localstack/services/apigateway/next_gen/execute_api/handlers/parse.py,sha256=6Dg0wU3aHF_GFG7lmoro-Tp2nrcRTmtxfHNHQyzFZL0,8645
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
@@ -507,10 +507,10 @@ localstack/services/iam/resource_providers/aws_iam_user.schema.json,sha256=NjcoB
507
507
  localstack/services/iam/resource_providers/aws_iam_user_plugin.py,sha256=n0OuJYcG4YhM52YKkpu_LkiBv7_13LLp1n8sYCXx78E,505
508
508
  localstack/services/iam/resources/service_linked_roles.py,sha256=4LWz9vTSTOQTxT4kxqmqm3CnS6GqzN_5BZtxgLPjUNs,21955
509
509
  localstack/services/kinesis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
510
- localstack/services/kinesis/kinesis_mock_server.py,sha256=fT6fa8EtmmGkp-7SdcJJ-p0AI7kJ6RY79B0Y1stUIYo,6580
510
+ localstack/services/kinesis/kinesis_mock_server.py,sha256=i6ZNsPQVhqwJYsgrXhLhj5augpnAoOgKCvagLojL12s,8641
511
511
  localstack/services/kinesis/models.py,sha256=Ttmo8o_f9QpIlGX9zKxkLM-ITJSkahCOo6vXs-pT4rc,641
512
- localstack/services/kinesis/packages.py,sha256=aClv2S7ZLcsmant46mHEJuLz31MDniXPYN-7Ln6LhN8,879
513
- localstack/services/kinesis/plugins.py,sha256=oqhoCRdfAKxrn1OSeDfnbNExYOol7oidY3M8mqVomVU,224
512
+ localstack/services/kinesis/packages.py,sha256=LfIPMwHR0y0ansf6vdmU4eRFcFtflv1PxEaydx9h5i8,2769
513
+ localstack/services/kinesis/plugins.py,sha256=iPaMbvhroTEHOWZ2io8lerh-TNPATWrb4ZanNGJPwG0,470
514
514
  localstack/services/kinesis/provider.py,sha256=SM8yyrGTL6dq5k1PXRkJPkJZgdWODpE6u20zK954E5g,7630
515
515
  localstack/services/kinesis/resource_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
516
516
  localstack/services/kinesis/resource_providers/aws_kinesis_stream.py,sha256=P1VBDA4haYcVTGRqoQissKJbkMedx9ps_zhCpT2l2yw,5721
@@ -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.dev19.data/scripts/localstack,sha256=WyL11vp5CkuP79iIR-L8XT7Cj8nvmxX7XRAgxhbmXNE,529
1283
- localstack_core-4.4.1.dev19.data/scripts/localstack-supervisor,sha256=nm1Il2d6ASyOB6Vo4CRHd90w7TK9FdRl9VPp0NN6hUk,6378
1284
- localstack_core-4.4.1.dev19.data/scripts/localstack.bat,sha256=tlzZTXtveHkMX_s_fa7VDfvdNdS8iVpEz2ER3uk9B_c,29
1285
- localstack_core-4.4.1.dev19.dist-info/licenses/LICENSE.txt,sha256=3PC-9Z69UsNARuQ980gNR_JsLx8uvMjdG6C7cc4LBYs,606
1286
- localstack_core-4.4.1.dev19.dist-info/METADATA,sha256=45vroB6iihSy8GCbJBf_PsKJvlLG5L4awM3Kue3Lx6g,5539
1287
- localstack_core-4.4.1.dev19.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
1288
- localstack_core-4.4.1.dev19.dist-info/entry_points.txt,sha256=K5M7il9Vwev64SlQiOaZVUhYpVNIE6IFHiWJ0znpbHQ,20491
1289
- localstack_core-4.4.1.dev19.dist-info/plux.json,sha256=Ph2upTrMGoKNHIW0Pcy1mK-ioEm82iUvRjNu-r5XxVA,20712
1290
- localstack_core-4.4.1.dev19.dist-info/top_level.txt,sha256=3sqmK2lGac8nCy8nwsbS5SpIY_izmtWtgaTFKHYVHbI,11
1291
- localstack_core-4.4.1.dev19.dist-info/RECORD,,
1282
+ localstack_core-4.4.1.dev21.data/scripts/localstack,sha256=WyL11vp5CkuP79iIR-L8XT7Cj8nvmxX7XRAgxhbmXNE,529
1283
+ localstack_core-4.4.1.dev21.data/scripts/localstack-supervisor,sha256=nm1Il2d6ASyOB6Vo4CRHd90w7TK9FdRl9VPp0NN6hUk,6378
1284
+ localstack_core-4.4.1.dev21.data/scripts/localstack.bat,sha256=tlzZTXtveHkMX_s_fa7VDfvdNdS8iVpEz2ER3uk9B_c,29
1285
+ localstack_core-4.4.1.dev21.dist-info/licenses/LICENSE.txt,sha256=3PC-9Z69UsNARuQ980gNR_JsLx8uvMjdG6C7cc4LBYs,606
1286
+ localstack_core-4.4.1.dev21.dist-info/METADATA,sha256=Fc2Ak4nKqVyirndfzZQywcGY84hrI9BDAxIAtyDJwyk,5539
1287
+ localstack_core-4.4.1.dev21.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
1288
+ localstack_core-4.4.1.dev21.dist-info/entry_points.txt,sha256=K5M7il9Vwev64SlQiOaZVUhYpVNIE6IFHiWJ0znpbHQ,20491
1289
+ localstack_core-4.4.1.dev21.dist-info/plux.json,sha256=59BR7LNlJmtHDJLKmVR0_0RHNsyg081WwIDEW0nqV_M,20712
1290
+ localstack_core-4.4.1.dev21.dist-info/top_level.txt,sha256=3sqmK2lGac8nCy8nwsbS5SpIY_izmtWtgaTFKHYVHbI,11
1291
+ localstack_core-4.4.1.dev21.dist-info/RECORD,,
@@ -0,0 +1 @@
1
+ {"localstack.cloudformation.resource_providers": ["AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "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::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "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::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "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::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "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::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin"], "localstack.hooks.on_infra_start": ["register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "delete_cached_certificate=localstack.plugins:delete_cached_certificate", "deprecation_warnings=localstack.plugins:deprecation_warnings", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration", "_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", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start"], "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.packages": ["vosk/community=localstack.services.transcribe.plugins:vosk_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "elasticsearch/community=localstack.services.es.plugins:elasticsearch_package", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "opensearch/community=localstack.services.opensearch.plugins:opensearch_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"], "localstack.runtime.components": ["aws=localstack.aws.components:AwsComponents"], "localstack.hooks.on_infra_shutdown": ["stop_server=localstack.dns.plugins:stop_server", "publish_metrics=localstack.utils.analytics.metrics:publish_metrics", "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", "_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown"], "localstack.runtime.server": ["hypercorn=localstack.runtime.server.plugins:HypercornRuntimeServerPlugin", "twisted=localstack.runtime.server.plugins:TwistedRuntimeServerPlugin"], "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"], "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"]}
@@ -1 +0,0 @@
1
- {"localstack.cloudformation.resource_providers": ["AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "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::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "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::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin"], "localstack.runtime.server": ["hypercorn=localstack.runtime.server.plugins:HypercornRuntimeServerPlugin", "twisted=localstack.runtime.server.plugins:TwistedRuntimeServerPlugin"], "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", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start", "setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server", "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", "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", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches"], "localstack.packages": ["ffmpeg/community=localstack.packages.plugins:ffmpeg_package", "java/community=localstack.packages.plugins:java_package", "terraform/community=localstack.packages.plugins:terraform_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "vosk/community=localstack.services.transcribe.plugins:vosk_package", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "elasticsearch/community=localstack.services.es.plugins:elasticsearch_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", "opensearch/community=localstack.services.opensearch.plugins:opensearch_package"], "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.hooks.on_infra_shutdown": ["_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown", "stop_server=localstack.dns.plugins:stop_server", "publish_metrics=localstack.utils.analytics.metrics:publish_metrics", "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"], "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.components": ["aws=localstack.aws.components:AwsComponents"], "localstack.lambda.runtime_executor": ["docker=localstack.services.lambda_.invocation.plugins:DockerRuntimeExecutorPlugin"]}