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.
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/mock_eval_utils.py +45 -0
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py +14 -6
- localstack/services/stepfunctions/asl/eval/environment.py +28 -0
- localstack/services/stepfunctions/backend/execution.py +6 -0
- localstack/services/stepfunctions/backend/execution_worker.py +5 -0
- localstack/services/stepfunctions/mocking/mock_config.py +208 -63
- localstack/services/stepfunctions/mocking/mock_config_file.py +150 -0
- localstack/services/stepfunctions/provider.py +24 -1
- localstack/testing/pytest/stepfunctions/utils.py +61 -1
- localstack/version.py +2 -2
- {localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/METADATA +1 -1
- {localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/RECORD +20 -18
- localstack_core-4.3.1.dev64.dist-info/plux.json +1 -0
- localstack_core-4.3.1.dev63.dist-info/plux.json +0 -1
- {localstack_core-4.3.1.dev63.data → localstack_core-4.3.1.dev64.data}/scripts/localstack +0 -0
- {localstack_core-4.3.1.dev63.data → localstack_core-4.3.1.dev64.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.3.1.dev63.data → localstack_core-4.3.1.dev64.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/WHEEL +0 -0
- {localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/top_level.txt +0 -0
localstack/services/stepfunctions/asl/component/state/state_execution/state_task/mock_eval_utils.py
ADDED
|
@@ -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
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
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
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
from
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
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
|
-
|
|
69
|
-
|
|
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.
|
|
21
|
-
__version_tuple__ = version_tuple = (4, 3, 1, '
|
|
20
|
+
__version__ = version = '4.3.1.dev64'
|
|
21
|
+
__version_tuple__ = version_tuple = (4, 3, 1, 'dev64')
|
|
@@ -4,7 +4,7 @@ localstack/deprecations.py,sha256=mNXTebZ8kSbQjFKz0LbT-g1Kdr0CE8bhEgZfHV3IX0s,15
|
|
|
4
4
|
localstack/openapi.yaml,sha256=B803NmpwsxG8PHpHrdZYBrUYjnrRh7B_JX0XuNynuFs,30237
|
|
5
5
|
localstack/plugins.py,sha256=BIJC9dlo0WbP7lLKkCiGtd_2q5oeqiHZohvoRTcejXM,2457
|
|
6
6
|
localstack/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
localstack/version.py,sha256=
|
|
7
|
+
localstack/version.py,sha256=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=
|
|
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=
|
|
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=
|
|
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=
|
|
1121
|
-
localstack/services/stepfunctions/backend/execution_worker.py,sha256=
|
|
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=
|
|
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=
|
|
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.
|
|
1281
|
-
localstack_core-4.3.1.
|
|
1282
|
-
localstack_core-4.3.1.
|
|
1283
|
-
localstack_core-4.3.1.
|
|
1284
|
-
localstack_core-4.3.1.
|
|
1285
|
-
localstack_core-4.3.1.
|
|
1286
|
-
localstack_core-4.3.1.
|
|
1287
|
-
localstack_core-4.3.1.
|
|
1288
|
-
localstack_core-4.3.1.
|
|
1289
|
-
localstack_core-4.3.1.
|
|
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"]}
|
|
File without changes
|
{localstack_core-4.3.1.dev63.data → localstack_core-4.3.1.dev64.data}/scripts/localstack-supervisor
RENAMED
|
File without changes
|
{localstack_core-4.3.1.dev63.data → localstack_core-4.3.1.dev64.data}/scripts/localstack.bat
RENAMED
|
File without changes
|
|
File without changes
|
{localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/licenses/LICENSE.txt
RENAMED
|
File without changes
|
{localstack_core-4.3.1.dev63.dist-info → localstack_core-4.3.1.dev64.dist-info}/top_level.txt
RENAMED
|
File without changes
|