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
         
     |