localstack-core 4.3.1.dev63__py3-none-any.whl → 4.3.1.dev64__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 (21) hide show
  1. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/mock_eval_utils.py +45 -0
  2. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py +14 -6
  3. localstack/services/stepfunctions/asl/eval/environment.py +28 -0
  4. localstack/services/stepfunctions/backend/execution.py +6 -0
  5. localstack/services/stepfunctions/backend/execution_worker.py +5 -0
  6. localstack/services/stepfunctions/mocking/mock_config.py +208 -63
  7. localstack/services/stepfunctions/mocking/mock_config_file.py +150 -0
  8. localstack/services/stepfunctions/provider.py +24 -1
  9. localstack/testing/pytest/stepfunctions/utils.py +61 -1
  10. localstack/version.py +2 -2
  11. {localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/METADATA +1 -1
  12. {localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/RECORD +20 -18
  13. localstack_core-4.3.1.dev64.dist-info/plux.json +1 -0
  14. localstack_core-4.3.1.dev63.dist-info/plux.json +0 -1
  15. {localstack_core-4.3.1.dev63.data → localstack_core-4.3.1.dev64.data}/scripts/localstack +0 -0
  16. {localstack_core-4.3.1.dev63.data → localstack_core-4.3.1.dev64.data}/scripts/localstack-supervisor +0 -0
  17. {localstack_core-4.3.1.dev63.data → localstack_core-4.3.1.dev64.data}/scripts/localstack.bat +0 -0
  18. {localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/WHEEL +0 -0
  19. {localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/entry_points.txt +0 -0
  20. {localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/licenses/LICENSE.txt +0 -0
  21. {localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,45 @@
1
+ import copy
2
+
3
+ from localstack.aws.api.stepfunctions import HistoryEventType, TaskFailedEventDetails
4
+ from localstack.services.stepfunctions.asl.component.common.error_name.custom_error_name import (
5
+ CustomErrorName,
6
+ )
7
+ from localstack.services.stepfunctions.asl.component.common.error_name.failure_event import (
8
+ FailureEvent,
9
+ FailureEventException,
10
+ )
11
+ from localstack.services.stepfunctions.asl.eval.environment import Environment
12
+ from localstack.services.stepfunctions.asl.eval.event.event_detail import EventDetails
13
+ from localstack.services.stepfunctions.mocking.mock_config import (
14
+ MockedResponse,
15
+ MockedResponseReturn,
16
+ MockedResponseThrow,
17
+ )
18
+
19
+
20
+ def _eval_mocked_response_throw(env: Environment, mocked_response: MockedResponseThrow) -> None:
21
+ task_failed_event_details = TaskFailedEventDetails(
22
+ error=mocked_response.error, cause=mocked_response.cause
23
+ )
24
+ error_name = CustomErrorName(mocked_response.error)
25
+ failure_event = FailureEvent(
26
+ env=env,
27
+ error_name=error_name,
28
+ event_type=HistoryEventType.TaskFailed,
29
+ event_details=EventDetails(taskFailedEventDetails=task_failed_event_details),
30
+ )
31
+ raise FailureEventException(failure_event=failure_event)
32
+
33
+
34
+ def _eval_mocked_response_return(env: Environment, mocked_response: MockedResponseReturn) -> None:
35
+ payload_copy = copy.deepcopy(mocked_response.payload)
36
+ env.stack.append(payload_copy)
37
+
38
+
39
+ def eval_mocked_response(env: Environment, mocked_response: MockedResponse) -> None:
40
+ if isinstance(mocked_response, MockedResponseReturn):
41
+ _eval_mocked_response_return(env=env, mocked_response=mocked_response)
42
+ elif isinstance(mocked_response, MockedResponseThrow):
43
+ _eval_mocked_response_throw(env=env, mocked_response=mocked_response)
44
+ else:
45
+ raise RuntimeError(f"Invalid MockedResponse type '{type(mocked_response)}'")
@@ -33,6 +33,9 @@ from localstack.services.stepfunctions.asl.component.common.error_name.states_er
33
33
  from localstack.services.stepfunctions.asl.component.state.state_execution.state_task.credentials import (
34
34
  StateCredentials,
35
35
  )
36
+ from localstack.services.stepfunctions.asl.component.state.state_execution.state_task.mock_eval_utils import (
37
+ eval_mocked_response,
38
+ )
36
39
  from localstack.services.stepfunctions.asl.component.state.state_execution.state_task.service.resource import (
37
40
  ResourceRuntimePart,
38
41
  ServiceResource,
@@ -44,6 +47,7 @@ from localstack.services.stepfunctions.asl.component.state.state_props import St
44
47
  from localstack.services.stepfunctions.asl.eval.environment import Environment
45
48
  from localstack.services.stepfunctions.asl.eval.event.event_detail import EventDetails
46
49
  from localstack.services.stepfunctions.asl.utils.encoding import to_json_str
50
+ from localstack.services.stepfunctions.mocking.mock_config import MockedResponse
47
51
  from localstack.services.stepfunctions.quotas import is_within_size_quota
48
52
  from localstack.utils.strings import camel_to_snake_case, snake_to_camel_case, to_bytes, to_str
49
53
 
@@ -352,12 +356,16 @@ class StateTaskService(StateTask, abc.ABC):
352
356
  normalised_parameters = copy.deepcopy(raw_parameters)
353
357
  self._normalise_parameters(normalised_parameters)
354
358
 
355
- self._eval_service_task(
356
- env=env,
357
- resource_runtime_part=resource_runtime_part,
358
- normalised_parameters=normalised_parameters,
359
- state_credentials=state_credentials,
360
- )
359
+ if env.is_mocked_mode():
360
+ mocked_response: MockedResponse = env.get_current_mocked_response()
361
+ eval_mocked_response(env=env, mocked_response=mocked_response)
362
+ else:
363
+ self._eval_service_task(
364
+ env=env,
365
+ resource_runtime_part=resource_runtime_part,
366
+ normalised_parameters=normalised_parameters,
367
+ state_credentials=state_credentials,
368
+ )
361
369
 
362
370
  output_value = env.stack[-1]
363
371
  self._normalise_response(output_value)
@@ -34,6 +34,7 @@ from localstack.services.stepfunctions.asl.eval.program_state import (
34
34
  from localstack.services.stepfunctions.asl.eval.states import ContextObjectData, States
35
35
  from localstack.services.stepfunctions.asl.eval.variable_store import VariableStore
36
36
  from localstack.services.stepfunctions.backend.activity import Activity
37
+ from localstack.services.stepfunctions.mocking.mock_config import MockedResponse, MockTestCase
37
38
 
38
39
  LOG = logging.getLogger(__name__)
39
40
 
@@ -51,6 +52,7 @@ class Environment:
51
52
  callback_pool_manager: CallbackPoolManager
52
53
  map_run_record_pool_manager: MapRunRecordPoolManager
53
54
  activity_store: Final[dict[Arn, Activity]]
55
+ mock_test_case: Optional[MockTestCase] = None
54
56
 
55
57
  _frames: Final[list[Environment]]
56
58
  _is_frame: bool = False
@@ -69,6 +71,7 @@ class Environment:
69
71
  cloud_watch_logging_session: Optional[CloudWatchLoggingSession],
70
72
  activity_store: dict[Arn, Activity],
71
73
  variable_store: Optional[VariableStore] = None,
74
+ mock_test_case: Optional[MockTestCase] = None,
72
75
  ):
73
76
  super(Environment, self).__init__()
74
77
  self._state_mutex = threading.RLock()
@@ -86,6 +89,8 @@ class Environment:
86
89
 
87
90
  self.activity_store = activity_store
88
91
 
92
+ self.mock_test_case = mock_test_case
93
+
89
94
  self._frames = list()
90
95
  self._is_frame = False
91
96
 
@@ -133,6 +138,7 @@ class Environment:
133
138
  cloud_watch_logging_session=env.cloud_watch_logging_session,
134
139
  activity_store=env.activity_store,
135
140
  variable_store=variable_store,
141
+ mock_test_case=env.mock_test_case,
136
142
  )
137
143
  frame._is_frame = True
138
144
  frame.event_manager = env.event_manager
@@ -262,3 +268,25 @@ class Environment:
262
268
 
263
269
  def is_standard_workflow(self) -> bool:
264
270
  return self.execution_type == StateMachineType.STANDARD
271
+
272
+ def is_mocked_mode(self) -> bool:
273
+ return self.mock_test_case is not None
274
+
275
+ def get_current_mocked_response(self) -> MockedResponse:
276
+ if not self.is_mocked_mode():
277
+ raise RuntimeError(
278
+ "Cannot retrieve mocked response: execution is not operating in mocked mode"
279
+ )
280
+ state_name = self.next_state_name
281
+ state_mocked_responses: Optional = self.mock_test_case.state_mocked_responses.get(
282
+ state_name
283
+ )
284
+ if state_mocked_responses is None:
285
+ raise RuntimeError(f"No mocked response definition for state '{state_name}'")
286
+ retry_count = self.states.context_object.context_object_data["State"]["RetryCount"]
287
+ if len(state_mocked_responses.mocked_responses) <= retry_count:
288
+ raise RuntimeError(
289
+ f"No mocked response definition for state '{state_name}' "
290
+ f"and retry number '{retry_count}'"
291
+ )
292
+ return state_mocked_responses.mocked_responses[retry_count]
@@ -59,6 +59,7 @@ from localstack.services.stepfunctions.backend.state_machine import (
59
59
  StateMachineInstance,
60
60
  StateMachineVersion,
61
61
  )
62
+ from localstack.services.stepfunctions.mocking.mock_config import MockTestCase
62
63
 
63
64
  LOG = logging.getLogger(__name__)
64
65
 
@@ -107,6 +108,8 @@ class Execution:
107
108
  state_machine_version_arn: Final[Optional[Arn]]
108
109
  state_machine_alias_arn: Final[Optional[Arn]]
109
110
 
111
+ mock_test_case: Final[Optional[MockTestCase]]
112
+
110
113
  start_date: Final[Timestamp]
111
114
  input_data: Final[Optional[json]]
112
115
  input_details: Final[Optional[CloudWatchEventsExecutionDataDetails]]
@@ -141,6 +144,7 @@ class Execution:
141
144
  input_data: Optional[json] = None,
142
145
  trace_header: Optional[TraceHeader] = None,
143
146
  state_machine_alias_arn: Optional[Arn] = None,
147
+ mock_test_case: Optional[MockTestCase] = None,
144
148
  ):
145
149
  self.name = name
146
150
  self.sm_type = sm_type
@@ -169,6 +173,7 @@ class Execution:
169
173
  self.error = None
170
174
  self.cause = None
171
175
  self._activity_store = activity_store
176
+ self.mock_test_case = mock_test_case
172
177
 
173
178
  def _get_events_client(self):
174
179
  return connect_to(aws_access_key_id=self.account_id, region_name=self.region_name).events
@@ -301,6 +306,7 @@ class Execution:
301
306
  exec_comm=self._get_start_execution_worker_comm(),
302
307
  cloud_watch_logging_session=self._cloud_watch_logging_session,
303
308
  activity_store=self._activity_store,
309
+ mock_test_case=self.mock_test_case,
304
310
  )
305
311
 
306
312
  def start(self) -> None:
@@ -29,6 +29,7 @@ from localstack.services.stepfunctions.backend.activity import Activity
29
29
  from localstack.services.stepfunctions.backend.execution_worker_comm import (
30
30
  ExecutionWorkerCommunication,
31
31
  )
32
+ from localstack.services.stepfunctions.mocking.mock_config import MockTestCase
32
33
  from localstack.utils.common import TMP_THREADS
33
34
 
34
35
 
@@ -36,6 +37,7 @@ class ExecutionWorker:
36
37
  _evaluation_details: Final[EvaluationDetails]
37
38
  _execution_communication: Final[ExecutionWorkerCommunication]
38
39
  _cloud_watch_logging_session: Final[Optional[CloudWatchLoggingSession]]
40
+ _mock_test_case: Final[Optional[MockTestCase]]
39
41
  _activity_store: dict[Arn, Activity]
40
42
 
41
43
  env: Optional[Environment]
@@ -46,10 +48,12 @@ class ExecutionWorker:
46
48
  exec_comm: ExecutionWorkerCommunication,
47
49
  cloud_watch_logging_session: Optional[CloudWatchLoggingSession],
48
50
  activity_store: dict[Arn, Activity],
51
+ mock_test_case: Optional[MockTestCase] = None,
49
52
  ):
50
53
  self._evaluation_details = evaluation_details
51
54
  self._execution_communication = exec_comm
52
55
  self._cloud_watch_logging_session = cloud_watch_logging_session
56
+ self._mock_test_case = mock_test_case
53
57
  self._activity_store = activity_store
54
58
  self.env = None
55
59
 
@@ -78,6 +82,7 @@ class ExecutionWorker:
78
82
  event_history_context=EventHistoryContext.of_program_start(),
79
83
  cloud_watch_logging_session=self._cloud_watch_logging_session,
80
84
  activity_store=self._activity_store,
85
+ mock_test_case=self._mock_test_case,
81
86
  )
82
87
 
83
88
  def _execution_logic(self):
@@ -1,69 +1,214 @@
1
- import json
2
- import logging
3
- import os
4
- from functools import lru_cache
5
- from typing import Optional
6
-
7
- from localstack import config
8
-
9
- LOG = logging.getLogger(__name__)
10
-
11
-
12
- @lru_cache(maxsize=1)
13
- def _retrieve_sfn_mock_config(file_path: str, modified_epoch: int) -> Optional[dict]: # noqa
14
- """
15
- Load and cache the Step Functions mock configuration from a JSON file.
16
-
17
- This function is memoized using `functools.lru_cache` to avoid re-reading the file
18
- from disk unless it has changed. The `modified_epoch` parameter is used solely to
19
- trigger cache invalidation when the file is updated. If either the file path or the
20
- modified timestamp changes, the cached result is discarded and the file is reloaded.
21
-
22
- Parameters:
23
- file_path (str):
24
- The absolute path to the JSON configuration file.
25
-
26
- modified_epoch (int):
27
- The last modified time of the file, in epoch seconds. This value is used
28
- as part of the cache key to ensure the cache is refreshed when the file is updated.
29
-
30
- Returns:
31
- Optional[dict]:
32
- The parsed configuration as a dictionary if the file is successfully loaded,
33
- or `None` if an error occurs during reading or parsing.
34
-
35
- Notes:
36
- - The `modified_epoch` argument is not used inside the function logic, but is
37
- necessary to ensure cache correctness via `lru_cache`.
38
- - Logging is used to capture warnings if file access or parsing fails.
39
- """
40
- try:
41
- with open(file_path, "r") as df:
42
- mock_config = json.load(df)
43
- return mock_config
44
- except Exception as ex:
45
- LOG.warning(
46
- "Unable to load step functions mock configuration file at '%s' due to %s",
47
- file_path,
48
- ex,
1
+ import abc
2
+ from typing import Any, Final, Optional
3
+
4
+ from localstack.services.stepfunctions.mocking.mock_config_file import (
5
+ RawMockConfig,
6
+ RawResponseModel,
7
+ RawTestCase,
8
+ _load_sfn_raw_mock_config,
9
+ )
10
+
11
+
12
+ class MockedResponse(abc.ABC):
13
+ range_start: Final[int]
14
+ range_end: Final[int]
15
+
16
+ def __init__(self, range_start: int, range_end: int):
17
+ super().__init__()
18
+ if range_start < 0 or range_end < 0:
19
+ raise ValueError(
20
+ f"Invalid range: both '{range_start}' and '{range_end}' must be positive integers."
21
+ )
22
+ if range_start != range_end and range_end < range_start + 1:
23
+ raise ValueError(
24
+ f"Invalid range: values must be equal or '{range_start}' "
25
+ f"must be at least one greater than '{range_end}'."
26
+ )
27
+ self.range_start = range_start
28
+ self.range_end = range_end
29
+
30
+
31
+ class MockedResponseReturn(MockedResponse):
32
+ payload: Final[dict[Any, Any]]
33
+
34
+ def __init__(self, range_start: int, range_end: int, payload: dict[Any, Any]):
35
+ super().__init__(range_start=range_start, range_end=range_end)
36
+ self.payload = payload
37
+
38
+
39
+ class MockedResponseThrow(MockedResponse):
40
+ error: Final[str]
41
+ cause: Final[str]
42
+
43
+ def __init__(self, range_start: int, range_end: int, error: str, cause: str):
44
+ super().__init__(range_start=range_start, range_end=range_end)
45
+ self.error = error
46
+ self.cause = cause
47
+
48
+
49
+ class StateMockedResponses:
50
+ state_name: Final[str]
51
+ mocked_response_name: Final[str]
52
+ mocked_responses: Final[list[MockedResponse]]
53
+
54
+ def __init__(
55
+ self, state_name: str, mocked_response_name: str, mocked_responses: list[MockedResponse]
56
+ ):
57
+ self.state_name = state_name
58
+ self.mocked_response_name = mocked_response_name
59
+ self.mocked_responses = list()
60
+ last_range_end: int = 0
61
+ mocked_responses_sorted = sorted(mocked_responses, key=lambda mr: mr.range_start)
62
+ for mocked_response in mocked_responses_sorted:
63
+ if not mocked_response.range_start - last_range_end == 0:
64
+ raise RuntimeError(
65
+ f"Inconsistent event numbering detected for state '{state_name}': "
66
+ f"the previous mocked response ended at event '{last_range_end}' "
67
+ f"while the next response '{mocked_response_name}' "
68
+ f"starts at event '{mocked_response.range_start}'. "
69
+ "Mock responses must be consecutively numbered. "
70
+ f"Expected the next response to begin at event {last_range_end + 1}."
71
+ )
72
+ repeats = mocked_response.range_start - mocked_response.range_end + 1
73
+ self.mocked_responses.extend([mocked_response] * repeats)
74
+ last_range_end = mocked_response.range_end
75
+
76
+
77
+ class MockTestCase:
78
+ state_machine_name: Final[str]
79
+ test_case_name: Final[str]
80
+ state_mocked_responses: Final[dict[str, StateMockedResponses]]
81
+
82
+ def __init__(
83
+ self,
84
+ state_machine_name: str,
85
+ test_case_name: str,
86
+ state_mocked_responses_list: list[StateMockedResponses],
87
+ ):
88
+ self.state_machine_name = state_machine_name
89
+ self.test_case_name = test_case_name
90
+ self.state_mocked_responses = dict()
91
+ for state_mocked_response in state_mocked_responses_list:
92
+ state_name = state_mocked_response.state_name
93
+ if state_name in self.state_mocked_responses:
94
+ raise RuntimeError(
95
+ f"Duplicate definition of state '{state_name}' for test case '{test_case_name}'"
96
+ )
97
+ self.state_mocked_responses[state_name] = state_mocked_response
98
+
99
+
100
+ def _parse_mocked_response_range(string_definition: str) -> tuple[int, int]:
101
+ definition_parts = string_definition.strip().split("-")
102
+ if len(definition_parts) == 1:
103
+ range_part = definition_parts[0]
104
+ try:
105
+ range_value = int(range_part)
106
+ return range_value, range_value
107
+ except Exception:
108
+ raise RuntimeError(
109
+ f"Unknown mocked response retry range value '{range_part}', not a valid integer"
110
+ )
111
+ elif len(definition_parts) == 2:
112
+ range_part_start = definition_parts[0]
113
+ range_part_end = definition_parts[1]
114
+ try:
115
+ return int(range_part_start), int(range_part_end)
116
+ except Exception:
117
+ raise RuntimeError(
118
+ f"Unknown mocked response retry range value '{range_part_start}:{range_part_end}', "
119
+ "not valid integer values"
120
+ )
121
+ else:
122
+ raise RuntimeError(
123
+ f"Unknown mocked response retry range definition '{string_definition}', "
124
+ "range definition should consist of one integer (e.g. '0'), or a integer range (e.g. '1-2')'."
49
125
  )
50
- return None
51
126
 
52
127
 
53
- def load_sfn_mock_config_file() -> Optional[dict]:
54
- configuration_file_path = config.SFN_MOCK_CONFIG
55
- if not configuration_file_path:
56
- return None
128
+ def _mocked_response_from_raw(
129
+ raw_response_model_range: str, raw_response_model: RawResponseModel
130
+ ) -> MockedResponse:
131
+ range_start, range_end = _parse_mocked_response_range(raw_response_model_range)
132
+ if raw_response_model.Return:
133
+ payload = raw_response_model.Return.model_dump()
134
+ return MockedResponseReturn(range_start=range_start, range_end=range_end, payload=payload)
135
+ throw_definition = raw_response_model.Throw
136
+ return MockedResponseThrow(
137
+ range_start=range_start,
138
+ range_end=range_end,
139
+ error=throw_definition.Error,
140
+ cause=throw_definition.Cause,
141
+ )
57
142
 
58
- try:
59
- modified_time = int(os.path.getmtime(configuration_file_path))
60
- except Exception as ex:
61
- LOG.warning(
62
- "Unable to access the step functions mock configuration file at '%s' due to %s",
63
- configuration_file_path,
64
- ex,
143
+
144
+ def _mocked_responses_from_raw(
145
+ mocked_response_name: str, raw_mock_config: RawMockConfig
146
+ ) -> list[MockedResponse]:
147
+ raw_response_models: Optional[dict[str, RawResponseModel]] = (
148
+ raw_mock_config.MockedResponses.get(mocked_response_name)
149
+ )
150
+ if not raw_response_models:
151
+ raise RuntimeError(
152
+ f"No definitions for mocked response '{mocked_response_name}' in the mock configuration file."
65
153
  )
66
- return None
154
+ mocked_responses: list[MockedResponse] = list()
155
+ for raw_response_model_range, raw_response_model in raw_response_models.items():
156
+ mocked_response: MockedResponse = _mocked_response_from_raw(
157
+ raw_response_model_range=raw_response_model_range, raw_response_model=raw_response_model
158
+ )
159
+ mocked_responses.append(mocked_response)
160
+ return mocked_responses
161
+
67
162
 
68
- mock_config = _retrieve_sfn_mock_config(configuration_file_path, modified_time)
69
- return mock_config
163
+ def _state_mocked_responses_from_raw(
164
+ state_name: str, mocked_response_name: str, raw_mock_config: RawMockConfig
165
+ ) -> StateMockedResponses:
166
+ mocked_responses = _mocked_responses_from_raw(
167
+ mocked_response_name=mocked_response_name, raw_mock_config=raw_mock_config
168
+ )
169
+ return StateMockedResponses(
170
+ state_name=state_name,
171
+ mocked_response_name=mocked_response_name,
172
+ mocked_responses=mocked_responses,
173
+ )
174
+
175
+
176
+ def _mock_test_case_from_raw(
177
+ state_machine_name: str, test_case_name: str, raw_mock_config: RawMockConfig
178
+ ) -> MockTestCase:
179
+ state_machine = raw_mock_config.StateMachines.get(state_machine_name)
180
+ if not state_machine:
181
+ raise RuntimeError(
182
+ f"No definitions for state machine '{state_machine_name}' in the mock configuration file."
183
+ )
184
+ test_case: RawTestCase = state_machine.TestCases.get(test_case_name)
185
+ if not test_case:
186
+ raise RuntimeError(
187
+ f"No definitions for test case '{test_case_name}' and "
188
+ f"state machine '{state_machine_name}' in the mock configuration file."
189
+ )
190
+ state_mocked_responses_list: list[StateMockedResponses] = list()
191
+ for state_name, mocked_response_name in test_case.root.items():
192
+ state_mocked_responses = _state_mocked_responses_from_raw(
193
+ state_name=state_name,
194
+ mocked_response_name=mocked_response_name,
195
+ raw_mock_config=raw_mock_config,
196
+ )
197
+ state_mocked_responses_list.append(state_mocked_responses)
198
+ return MockTestCase(
199
+ state_machine_name=state_machine_name,
200
+ test_case_name=test_case_name,
201
+ state_mocked_responses_list=state_mocked_responses_list,
202
+ )
203
+
204
+
205
+ def load_mock_test_case_for(state_machine_name: str, test_case_name: str) -> Optional[MockTestCase]:
206
+ raw_mock_config: Optional[RawMockConfig] = _load_sfn_raw_mock_config()
207
+ if raw_mock_config is None:
208
+ return None
209
+ mock_test_case: MockTestCase = _mock_test_case_from_raw(
210
+ state_machine_name=state_machine_name,
211
+ test_case_name=test_case_name,
212
+ raw_mock_config=raw_mock_config,
213
+ )
214
+ return mock_test_case
@@ -0,0 +1,150 @@
1
+ import logging
2
+ import os
3
+ from functools import lru_cache
4
+ from typing import Dict, Final, Optional
5
+
6
+ from pydantic import BaseModel, RootModel, model_validator
7
+
8
+ from localstack import config
9
+
10
+ LOG = logging.getLogger(__name__)
11
+
12
+ _RETURN_KEY: Final[str] = "Return"
13
+ _THROW_KEY: Final[str] = "Throw"
14
+
15
+
16
+ class RawReturnResponse(BaseModel):
17
+ """
18
+ Represents a return response.
19
+ Accepts any fields.
20
+ """
21
+
22
+ model_config = {"extra": "allow", "frozen": True}
23
+
24
+
25
+ class RawThrowResponse(BaseModel):
26
+ """
27
+ Represents an error response.
28
+ Both 'Error' and 'Cause' are required.
29
+ """
30
+
31
+ model_config = {"frozen": True}
32
+
33
+ Error: str
34
+ Cause: str
35
+
36
+
37
+ class RawResponseModel(BaseModel):
38
+ """
39
+ A response step must include exactly one of:
40
+ - 'Return': a ReturnResponse object.
41
+ - 'Throw': a ThrowResponse object.
42
+ """
43
+
44
+ model_config = {"frozen": True}
45
+
46
+ Return: Optional[RawReturnResponse] = None
47
+ Throw: Optional[RawThrowResponse] = None
48
+
49
+ @model_validator(mode="before")
50
+ def validate_response(cls, data: dict) -> dict:
51
+ if _RETURN_KEY in data and _THROW_KEY in data:
52
+ raise ValueError(f"Response cannot contain both '{_RETURN_KEY}' and '{_THROW_KEY}'")
53
+ if _RETURN_KEY not in data and _THROW_KEY not in data:
54
+ raise ValueError(f"Response must contain one of '{_RETURN_KEY}' or '{_THROW_KEY}'")
55
+ return data
56
+
57
+
58
+ class RawTestCase(RootModel[Dict[str, str]]):
59
+ """
60
+ Represents an individual test case.
61
+ The keys are state names (e.g., 'LambdaState', 'SQSState')
62
+ and the values are the names of the mocked response configurations.
63
+ """
64
+
65
+ model_config = {"frozen": True}
66
+
67
+
68
+ class RawStateMachine(BaseModel):
69
+ """
70
+ Represents a state machine configuration containing multiple test cases.
71
+ """
72
+
73
+ model_config = {"frozen": True}
74
+
75
+ TestCases: Dict[str, RawTestCase]
76
+
77
+
78
+ class RawMockConfig(BaseModel):
79
+ """
80
+ The root configuration that contains:
81
+ - StateMachines: mapping state machine names to their configuration.
82
+ - MockedResponses: mapping response configuration names to response steps.
83
+ Each response step is keyed (e.g. "0", "1-2") and maps to a ResponseModel.
84
+ """
85
+
86
+ model_config = {"frozen": True}
87
+
88
+ StateMachines: Dict[str, RawStateMachine]
89
+ MockedResponses: Dict[str, Dict[str, RawResponseModel]]
90
+
91
+
92
+ @lru_cache(maxsize=1)
93
+ def _read_sfn_raw_mock_config(file_path: str, modified_epoch: int) -> Optional[RawMockConfig]: # noqa
94
+ """
95
+ Load and cache the Step Functions mock configuration from a JSON file.
96
+
97
+ This function is memoized using `functools.lru_cache` to avoid re-reading the file
98
+ from disk unless it has changed. The `modified_epoch` parameter is used solely to
99
+ trigger cache invalidation when the file is updated. If either the file path or the
100
+ modified timestamp changes, the cached result is discarded and the file is reloaded.
101
+
102
+ Parameters:
103
+ file_path (str):
104
+ The absolute path to the JSON configuration file.
105
+
106
+ modified_epoch (int):
107
+ The last modified time of the file, in epoch seconds. This value is used
108
+ as part of the cache key to ensure the cache is refreshed when the file is updated.
109
+
110
+ Returns:
111
+ Optional[dict]:
112
+ The parsed configuration as a dictionary if the file is successfully loaded,
113
+ or `None` if an error occurs during reading or parsing.
114
+
115
+ Notes:
116
+ - The `modified_epoch` argument is not used inside the function logic, but is
117
+ necessary to ensure cache correctness via `lru_cache`.
118
+ - Logging is used to capture warnings if file access or parsing fails.
119
+ """
120
+ try:
121
+ with open(file_path, "r") as df:
122
+ mock_config_str = df.read()
123
+ mock_config: RawMockConfig = RawMockConfig.model_validate_json(mock_config_str)
124
+ return mock_config
125
+ except Exception as ex:
126
+ LOG.warning(
127
+ "Unable to load step functions mock configuration file at '%s' due to %s",
128
+ file_path,
129
+ ex,
130
+ )
131
+ return None
132
+
133
+
134
+ def _load_sfn_raw_mock_config() -> Optional[RawMockConfig]:
135
+ configuration_file_path = config.SFN_MOCK_CONFIG
136
+ if not configuration_file_path:
137
+ return None
138
+
139
+ try:
140
+ modified_time = int(os.path.getmtime(configuration_file_path))
141
+ except Exception as ex:
142
+ LOG.warning(
143
+ "Unable to access the step functions mock configuration file at '%s' due to %s",
144
+ configuration_file_path,
145
+ ex,
146
+ )
147
+ return None
148
+
149
+ mock_config = _read_sfn_raw_mock_config(configuration_file_path, modified_time)
150
+ return mock_config
@@ -150,6 +150,10 @@ from localstack.services.stepfunctions.backend.store import SFNStore, sfn_stores
150
150
  from localstack.services.stepfunctions.backend.test_state.execution import (
151
151
  TestStateExecution,
152
152
  )
153
+ from localstack.services.stepfunctions.mocking.mock_config import (
154
+ MockTestCase,
155
+ load_mock_test_case_for,
156
+ )
153
157
  from localstack.services.stepfunctions.stepfunctions_utils import (
154
158
  assert_pagination_parameters_valid,
155
159
  get_next_page_token_from_arn,
@@ -180,7 +184,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
180
184
  visitor.visit(sfn_stores)
181
185
 
182
186
  _STATE_MACHINE_ARN_REGEX: Final[re.Pattern] = re.compile(
183
- rf"{ARN_PARTITION_REGEX}:states:[a-z0-9-]+:[0-9]{{12}}:stateMachine:[a-zA-Z0-9-_.]+(:\d+)?(:[a-zA-Z0-9-_.]+)*$"
187
+ rf"{ARN_PARTITION_REGEX}:states:[a-z0-9-]+:[0-9]{{12}}:stateMachine:[a-zA-Z0-9-_.]+(:\d+)?(:[a-zA-Z0-9-_.]+)*(?:#[a-zA-Z0-9-_]+)?$"
184
188
  )
185
189
 
186
190
  _STATE_MACHINE_EXECUTION_ARN_REGEX: Final[re.Pattern] = re.compile(
@@ -779,6 +783,12 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
779
783
  ) -> StartExecutionOutput:
780
784
  self._validate_state_machine_arn(state_machine_arn)
781
785
 
786
+ state_machine_arn_parts = state_machine_arn.split("#")
787
+ state_machine_arn = state_machine_arn_parts[0]
788
+ mock_test_case_name = (
789
+ state_machine_arn_parts[1] if len(state_machine_arn_parts) == 2 else None
790
+ )
791
+
782
792
  store = self.get_store(context=context)
783
793
 
784
794
  alias: Optional[Alias] = store.aliases.get(state_machine_arn)
@@ -832,6 +842,18 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
832
842
  configuration=state_machine_clone.cloud_watch_logging_configuration,
833
843
  )
834
844
 
845
+ mock_test_case: Optional[MockTestCase] = None
846
+ if mock_test_case_name is not None:
847
+ state_machine_name = state_machine_clone.name
848
+ mock_test_case = load_mock_test_case_for(
849
+ state_machine_name=state_machine_name, test_case_name=mock_test_case_name
850
+ )
851
+ if mock_test_case is None:
852
+ raise InvalidName(
853
+ f"Invalid mock test case name '{mock_test_case_name}' "
854
+ f"for state machine '{state_machine_name}'"
855
+ )
856
+
835
857
  execution = Execution(
836
858
  name=exec_name,
837
859
  sm_type=state_machine_clone.sm_type,
@@ -846,6 +868,7 @@ class StepFunctionsProvider(StepfunctionsApi, ServiceLifecycleHook):
846
868
  input_data=input_data,
847
869
  trace_header=trace_header,
848
870
  activity_store=self.get_store(context).activities,
871
+ mock_test_case=mock_test_case,
849
872
  )
850
873
 
851
874
  store.executions[exec_arn] = execution
@@ -383,6 +383,7 @@ def create_state_machine_with_iam_role(
383
383
  snapshot,
384
384
  definition: Definition,
385
385
  logging_configuration: Optional[LoggingConfiguration] = None,
386
+ state_machine_name: Optional[str] = None,
386
387
  ):
387
388
  snf_role_arn = create_state_machine_iam_role(target_aws_client=target_aws_client)
388
389
  snapshot.add_transformer(RegexTransformer(snf_role_arn, "snf_role_arn"))
@@ -396,7 +397,7 @@ def create_state_machine_with_iam_role(
396
397
  RegexTransformer("Request ID: [a-zA-Z0-9-]+", "Request ID: <request_id>")
397
398
  )
398
399
 
399
- sm_name: str = f"statemachine_create_and_record_execution_{short_uid()}"
400
+ sm_name: str = state_machine_name or f"statemachine_create_and_record_execution_{short_uid()}"
400
401
  create_arguments = {
401
402
  "name": sm_name,
402
403
  "definition": definition,
@@ -450,6 +451,42 @@ def launch_and_record_execution(
450
451
  return execution_arn
451
452
 
452
453
 
454
+ def launch_and_record_mocked_execution(
455
+ target_aws_client,
456
+ sfn_snapshot,
457
+ state_machine_arn,
458
+ execution_input,
459
+ test_name,
460
+ ) -> LongArn:
461
+ stepfunctions_client = target_aws_client.stepfunctions
462
+ exec_resp = stepfunctions_client.start_execution(
463
+ stateMachineArn=f"{state_machine_arn}#{test_name}", input=execution_input
464
+ )
465
+ sfn_snapshot.add_transformer(sfn_snapshot.transform.sfn_sm_exec_arn(exec_resp, 0))
466
+ execution_arn = exec_resp["executionArn"]
467
+
468
+ await_execution_terminated(
469
+ stepfunctions_client=stepfunctions_client, execution_arn=execution_arn
470
+ )
471
+
472
+ get_execution_history = stepfunctions_client.get_execution_history(executionArn=execution_arn)
473
+
474
+ # Transform all map runs if any.
475
+ try:
476
+ map_run_arns = extract_json("$..mapRunArn", get_execution_history)
477
+ if isinstance(map_run_arns, str):
478
+ map_run_arns = [map_run_arns]
479
+ for i, map_run_arn in enumerate(list(set(map_run_arns))):
480
+ sfn_snapshot.add_transformer(sfn_snapshot.transform.sfn_map_run_arn(map_run_arn, i))
481
+ except NoSuchJsonPathError:
482
+ # No mapRunArns
483
+ pass
484
+
485
+ sfn_snapshot.match("get_execution_history", get_execution_history)
486
+
487
+ return execution_arn
488
+
489
+
453
490
  def launch_and_record_logs(
454
491
  target_aws_client,
455
492
  state_machine_arn,
@@ -513,6 +550,29 @@ def create_and_record_execution(
513
550
  )
514
551
 
515
552
 
553
+ def create_and_record_mocked_execution(
554
+ target_aws_client,
555
+ create_state_machine_iam_role,
556
+ create_state_machine,
557
+ sfn_snapshot,
558
+ definition,
559
+ execution_input,
560
+ state_machine_name,
561
+ test_name,
562
+ ):
563
+ state_machine_arn = create_state_machine_with_iam_role(
564
+ target_aws_client,
565
+ create_state_machine_iam_role,
566
+ create_state_machine,
567
+ sfn_snapshot,
568
+ definition,
569
+ state_machine_name=state_machine_name,
570
+ )
571
+ launch_and_record_mocked_execution(
572
+ target_aws_client, sfn_snapshot, state_machine_arn, execution_input, test_name
573
+ )
574
+
575
+
516
576
  def create_and_record_logs(
517
577
  target_aws_client,
518
578
  create_state_machine_iam_role,
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.3.1.dev63'
21
- __version_tuple__ = version_tuple = (4, 3, 1, 'dev63')
20
+ __version__ = version = '4.3.1.dev64'
21
+ __version_tuple__ = version_tuple = (4, 3, 1, 'dev64')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: localstack-core
3
- Version: 4.3.1.dev63
3
+ Version: 4.3.1.dev64
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
@@ -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=i1zcM6wR7qscyNjRJMxR71iMz5J5JSAcVu0g2d5D2n8,526
7
+ localstack/version.py,sha256=WYz10QKNJCWgTjRGKhMUpUosiKRp_GH_FZt8jkS5rtA,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
@@ -786,7 +786,7 @@ localstack/services/ssm/resource_providers/aws_ssm_patchbaseline_plugin.py,sha25
786
786
  localstack/services/stepfunctions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
787
787
  localstack/services/stepfunctions/packages.py,sha256=RZblddr9VARCXqtCeFn_Z6FmyLerWP1-REkJ-spi1Ko,1705
788
788
  localstack/services/stepfunctions/plugins.py,sha256=oY-qlTgrZHUalqoeIV4v9mkpC5cpMRUN_PX4YMPFMMI,324
789
- localstack/services/stepfunctions/provider.py,sha256=JBKVYXAyVBZcl9VRlJe9tNIJFtYNhZbQmmi5YnIbMKU,68990
789
+ localstack/services/stepfunctions/provider.py,sha256=oeezfdzX_6tCVMUqdq7McD3Kb1Ij1wBc9PrVTLqbpXo,69964
790
790
  localstack/services/stepfunctions/quotas.py,sha256=FprfsAD-_IziguWQnR-b3VA7QYhFdQzItuMLOwl9_FU,484
791
791
  localstack/services/stepfunctions/stepfunctions_utils.py,sha256=8LUfXJ3N1LC_y2QIe_TgHIVIkoQLhS0R4i6aXiSMink,2340
792
792
  localstack/services/stepfunctions/usage.py,sha256=rcn58eYuAEb8KRmj4YMcjO4eXryqUo8bV9wvo7xyhjg,349
@@ -1028,13 +1028,14 @@ localstack/services/stepfunctions/asl/component/state/state_execution/state_para
1028
1028
  localstack/services/stepfunctions/asl/component/state/state_execution/state_task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1029
1029
  localstack/services/stepfunctions/asl/component/state/state_execution/state_task/credentials.py,sha256=Q1YMVbcVe8k5QLwarwjIzCXqP0KdUQ35uBFU2FLXH54,1071
1030
1030
  localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py,sha256=IwDqRb5Nbwofp6kTsji3ww4d6IBuWrFrCBJET1K7oGU,2765
1031
+ localstack/services/stepfunctions/asl/component/state/state_execution/state_task/mock_eval_utils.py,sha256=GGAQDDno38i5AoXJ1sz_QGX0YYlr0UpUmbXZ2dLyagE,1883
1031
1032
  localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task.py,sha256=eKy-fDc-xOgDYnBHKobSLpnC2U2kRLMKJ2lCuj__ZVk,3766
1032
1033
  localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task_activitiy.py,sha256=GQ1CGe9PUOVOF2k2h7ORxAeTL4nYlg7RjVJuYsXyX0M,8858
1033
1034
  localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task_factory.py,sha256=0k5_0BJ2d-wQn6VbvGcAXh6vIZT1IhAF92BmyD6AZNM,1337
1034
1035
  localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task_lambda.py,sha256=cR2_JVaIiCdInzlLEssOoHUK7t9RXl7alTc5jLOGhac,7467
1035
1036
  localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1036
1037
  localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/resource.py,sha256=Z1pe7EVQe5lmU9A25iZEx20ovmnJJ8DARDg46NWfdAs,5272
1037
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py,sha256=Rsfr02vjlGLInd8db369jURQ5dr8zhjFJxrEFeI2_Rw,15741
1038
+ localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py,sha256=SYZDmGli8dJMT-ASqpV0hGd8ymBaGu_w4AwB18fi1gc,16187
1038
1039
  localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_api_gateway.py,sha256=YCAmxhDaLMuWQwzOkou3ruX_0w7uNtOkz4M4qkBRPdw,11254
1039
1040
  localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_aws_sdk.py,sha256=VO68Yw75_efYlJbFkMI6zUPGQFaHXjd5k55RXyyboBU,5851
1040
1041
  localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py,sha256=z3JlCNsiLdWs_R8zAiA8-MmDr9kQYzZ6DO3UZ_iFYOg,8164
@@ -1073,7 +1074,7 @@ localstack/services/stepfunctions/asl/component/test_state/state/test_state_stat
1073
1074
  localstack/services/stepfunctions/asl/eval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1074
1075
  localstack/services/stepfunctions/asl/eval/contex_object.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1075
1076
  localstack/services/stepfunctions/asl/eval/count_down_latch.py,sha256=Ls1iaL0gRznuEj9pf17EwQL1DFMWj7n9UA2GkwTtg5o,498
1076
- localstack/services/stepfunctions/asl/eval/environment.py,sha256=CBPI0keQzA-P1xbhDlt4KtP5fsiCd30_SJp9RCemOUg,10201
1077
+ localstack/services/stepfunctions/asl/eval/environment.py,sha256=ixZ7KB1th3G5y7iAYC-MqXYjn5h0_h-hbq2FcXLxmg4,11523
1077
1078
  localstack/services/stepfunctions/asl/eval/evaluation_details.py,sha256=uBWzdUEXdXFnLqvLsGyT12gbUnZo_556W6tG8JsS7UQ,1675
1078
1079
  localstack/services/stepfunctions/asl/eval/program_state.py,sha256=gJtr8cazw_mS0BhkEFEjV9NXgxuoSt5K6UneytRzXtI,1829
1079
1080
  localstack/services/stepfunctions/asl/eval/states.py,sha256=uLQd9j94NKzKs-JsbqSVLYYLBtWzVnrYaMNLCWcQz4k,5373
@@ -1117,8 +1118,8 @@ localstack/services/stepfunctions/asl/utils/json_path.py,sha256=Its-8J-JCd9hvam9
1117
1118
  localstack/services/stepfunctions/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1118
1119
  localstack/services/stepfunctions/backend/activity.py,sha256=O0mPxXtSSg04-enVIL7e62qB4PYwiidoy0NymHOc9Dk,1371
1119
1120
  localstack/services/stepfunctions/backend/alias.py,sha256=5u7yugVzFUs6lcaomVAOh2tsZHk2mbm5YzCLWLrJatg,4566
1120
- localstack/services/stepfunctions/backend/execution.py,sha256=syWOUUKdM2F4wrsR8YHpZwM1TfulB06pi8xLaoPNdx4,16576
1121
- localstack/services/stepfunctions/backend/execution_worker.py,sha256=WEC7QzsS87zMestESVg5LdXJYHrqV9hqcef_RAkGW74,4910
1121
+ localstack/services/stepfunctions/backend/execution.py,sha256=1Jy1ir3dGGxwpLwy07A_94dwYQQQtD7UdhZ_aQoVdUI,16854
1122
+ localstack/services/stepfunctions/backend/execution_worker.py,sha256=f_b8QUArn0C51P_f0XUjcDS3EFhAZ2RFGKBjk2xn6co,5190
1122
1123
  localstack/services/stepfunctions/backend/execution_worker_comm.py,sha256=61yq2i_KAPFZj-f6kd5TETR0VT2xkOLmaOUkwxnuIvw,387
1123
1124
  localstack/services/stepfunctions/backend/state_machine.py,sha256=14KdKg6ugJoVrrbH5X47uUh3tODtWdWc5_MWX5Qc_vs,9581
1124
1125
  localstack/services/stepfunctions/backend/store.py,sha256=eslh4iDAyXzBqZ0cN40GVQKdAzh1I0Sp-Jf8K2upk6o,1127
@@ -1126,7 +1127,8 @@ localstack/services/stepfunctions/backend/test_state/__init__.py,sha256=47DEQpj8
1126
1127
  localstack/services/stepfunctions/backend/test_state/execution.py,sha256=LPhZZqtWDbzucmeBqv4CrSF4rnERBnbtG4zZWhtCkxs,5359
1127
1128
  localstack/services/stepfunctions/backend/test_state/execution_worker.py,sha256=aVUEriNB9GwU4nG5VE2PsSBbxQfMFq_4Xu4ZfkvaT0Y,2222
1128
1129
  localstack/services/stepfunctions/mocking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1129
- localstack/services/stepfunctions/mocking/mock_config.py,sha256=I0ApAIzGlIrv8tStbPodeFo1Jy7UMpnOc0zoqLuQK2A,2374
1130
+ localstack/services/stepfunctions/mocking/mock_config.py,sha256=c4SenwX-IOGGLaENM8vUbHub229WdzkNzkosTE5Mnmw,8497
1131
+ localstack/services/stepfunctions/mocking/mock_config_file.py,sha256=vz2kx1ucfDWjaXKyAqmTH0dwrKlZeiKqI7-V6q07Aoc,4669
1130
1132
  localstack/services/stepfunctions/resource_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1131
1133
  localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity.py,sha256=L25dn8_OwbwJ6zl_ILU52mmZYzZBhBnxJ1x9pxrfzKc,3106
1132
1134
  localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity.schema.json,sha256=WDwzo5Nduv6UxSPqG-bL26lgXH-qSNYuSQcVpop20ls,1864
@@ -1178,7 +1180,7 @@ localstack/testing/pytest/cloudformation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5
1178
1180
  localstack/testing/pytest/cloudformation/fixtures.py,sha256=0R7SFKkSrYvdjt5bC8VjutfJgXO1M9lALwPYdrrfP8U,6434
1179
1181
  localstack/testing/pytest/stepfunctions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1180
1182
  localstack/testing/pytest/stepfunctions/fixtures.py,sha256=m9gdU7opK1LoDKuUDTJKcuUfWi4LWHw0idL0_GNlkfo,32817
1181
- localstack/testing/pytest/stepfunctions/utils.py,sha256=xr7lccNtvgeJrn7K7seqAHNZpLiATcEpfslpAUGol-U,27362
1183
+ localstack/testing/pytest/stepfunctions/utils.py,sha256=aechTLBRPsek6VhnfC5j6IYDzz-9UcwZ5ojroYneP8Y,29281
1182
1184
  localstack/testing/scenario/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1183
1185
  localstack/testing/scenario/cdk_lambda_helper.py,sha256=FdFDOTykrtqfP_FRJftijkUjwMbIY-DL9ovAtQwPBb4,8609
1184
1186
  localstack/testing/scenario/provisioning.py,sha256=yo8E-fyspL6gG_46yZhmNce9nryf1oSZ4CiXteJMY14,18527
@@ -1277,13 +1279,13 @@ localstack/utils/server/tcp_proxy.py,sha256=rR6d5jR0ozDvIlpHiqW0cfyY9a2fRGdOzyA8
1277
1279
  localstack/utils/xray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1278
1280
  localstack/utils/xray/trace_header.py,sha256=ahXk9eonq7LpeENwlqUEPj3jDOCiVRixhntQuxNor-Q,6209
1279
1281
  localstack/utils/xray/traceid.py,sha256=SQSsMV2rhbTNK6ceIoozZYuGU7Fg687EXcgqxoDl1Fw,1106
1280
- localstack_core-4.3.1.dev63.data/scripts/localstack,sha256=WyL11vp5CkuP79iIR-L8XT7Cj8nvmxX7XRAgxhbmXNE,529
1281
- localstack_core-4.3.1.dev63.data/scripts/localstack-supervisor,sha256=nm1Il2d6ASyOB6Vo4CRHd90w7TK9FdRl9VPp0NN6hUk,6378
1282
- localstack_core-4.3.1.dev63.data/scripts/localstack.bat,sha256=tlzZTXtveHkMX_s_fa7VDfvdNdS8iVpEz2ER3uk9B_c,29
1283
- localstack_core-4.3.1.dev63.dist-info/licenses/LICENSE.txt,sha256=3PC-9Z69UsNARuQ980gNR_JsLx8uvMjdG6C7cc4LBYs,606
1284
- localstack_core-4.3.1.dev63.dist-info/METADATA,sha256=8WKJY4MYT0IAM-eyGnn21LKevbw3wZU_v3K1JTozB40,5499
1285
- localstack_core-4.3.1.dev63.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
1286
- localstack_core-4.3.1.dev63.dist-info/entry_points.txt,sha256=UqGFR0MPKa2sfresdqiCpqBZuWyRxCb3UG77oPVMzVA,20564
1287
- localstack_core-4.3.1.dev63.dist-info/plux.json,sha256=kg5VwQ7-3QdJFCsiotkQ08iTbPamCwEqg3E6QbB-18Q,20786
1288
- localstack_core-4.3.1.dev63.dist-info/top_level.txt,sha256=3sqmK2lGac8nCy8nwsbS5SpIY_izmtWtgaTFKHYVHbI,11
1289
- localstack_core-4.3.1.dev63.dist-info/RECORD,,
1282
+ localstack_core-4.3.1.dev64.data/scripts/localstack,sha256=WyL11vp5CkuP79iIR-L8XT7Cj8nvmxX7XRAgxhbmXNE,529
1283
+ localstack_core-4.3.1.dev64.data/scripts/localstack-supervisor,sha256=nm1Il2d6ASyOB6Vo4CRHd90w7TK9FdRl9VPp0NN6hUk,6378
1284
+ localstack_core-4.3.1.dev64.data/scripts/localstack.bat,sha256=tlzZTXtveHkMX_s_fa7VDfvdNdS8iVpEz2ER3uk9B_c,29
1285
+ localstack_core-4.3.1.dev64.dist-info/licenses/LICENSE.txt,sha256=3PC-9Z69UsNARuQ980gNR_JsLx8uvMjdG6C7cc4LBYs,606
1286
+ localstack_core-4.3.1.dev64.dist-info/METADATA,sha256=ZCowZF2Hm01sorcpWBD46mM2l6kOhmwx0c8JMVbPcZo,5499
1287
+ localstack_core-4.3.1.dev64.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
1288
+ localstack_core-4.3.1.dev64.dist-info/entry_points.txt,sha256=UqGFR0MPKa2sfresdqiCpqBZuWyRxCb3UG77oPVMzVA,20564
1289
+ localstack_core-4.3.1.dev64.dist-info/plux.json,sha256=j6D_smBuJw23QaL0IJI9mz-ZhLfPnjqJ4a9QGZ_3KbE,20786
1290
+ localstack_core-4.3.1.dev64.dist-info/top_level.txt,sha256=3sqmK2lGac8nCy8nwsbS5SpIY_izmtWtgaTFKHYVHbI,11
1291
+ localstack_core-4.3.1.dev64.dist-info/RECORD,,
@@ -0,0 +1 @@
1
+ {"localstack.cloudformation.resource_providers": ["AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "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::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "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::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "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::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "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::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin"], "localstack.hooks.on_infra_start": ["register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "_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", "setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration", "delete_cached_certificate=localstack.plugins:delete_cached_certificate", "deprecation_warnings=localstack.plugins:deprecation_warnings", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger"], "localstack.runtime.components": ["aws=localstack.aws.components:AwsComponents"], "localstack.hooks.on_infra_shutdown": ["stop_server=localstack.dns.plugins:stop_server", "remove_custom_endpoints=localstack.services.lambda_.plugins:remove_custom_endpoints", "_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", "aggregate_and_send=localstack.utils.analytics.usage:aggregate_and_send", "publish_metrics=localstack.utils.analytics.metrics:publish_metrics"], "localstack.packages": ["elasticsearch/community=localstack.services.es.plugins:elasticsearch_package", "ffmpeg/community=localstack.packages.plugins:ffmpeg_package", "java/community=localstack.packages.plugins:java_package", "terraform/community=localstack.packages.plugins:terraform_package", "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", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_package", "vosk/community=localstack.services.transcribe.plugins:vosk_package"], "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.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.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.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::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "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::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "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::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::Logs::SubscriptionFilter=localstack.services.logs.resource_providers.aws_logs_subscriptionfilter_plugin:LogsSubscriptionFilterProviderPlugin", "AWS::SES::EmailIdentity=localstack.services.ses.resource_providers.aws_ses_emailidentity_plugin:SESEmailIdentityProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "AWS::IAM::InstanceProfile=localstack.services.iam.resource_providers.aws_iam_instanceprofile_plugin:IAMInstanceProfileProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::Events::EventBusPolicy=localstack.services.events.resource_providers.aws_events_eventbuspolicy_plugin:EventsEventBusPolicyProviderPlugin", "AWS::CloudFormation::WaitCondition=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitcondition_plugin:CloudFormationWaitConditionProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::Lambda::Function=localstack.services.lambda_.resource_providers.aws_lambda_function_plugin:LambdaFunctionProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin"], "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.hooks.on_infra_start": ["_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", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "_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", "delete_cached_certificate=localstack.plugins:delete_cached_certificate", "deprecation_warnings=localstack.plugins:deprecation_warnings", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_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", "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", "vosk/community=localstack.services.transcribe.plugins:vosk_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", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package"], "localstack.hooks.on_infra_shutdown": ["remove_custom_endpoints=localstack.services.lambda_.plugins:remove_custom_endpoints", "_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", "stop_server=localstack.dns.plugins:stop_server", "aggregate_and_send=localstack.utils.analytics.usage:aggregate_and_send", "publish_metrics=localstack.utils.analytics.metrics:publish_metrics"], "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.openapi.spec": ["localstack=localstack.plugins:CoreOASPlugin"], "localstack.runtime.components": ["aws=localstack.aws.components:AwsComponents"], "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.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"]}