localstack-core 4.6.1.dev60__py3-none-any.whl → 4.10.1.dev12__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/aws/api/apigateway/__init__.py +87 -110
- localstack/aws/api/cloudformation/__init__.py +18 -4
- localstack/aws/api/cloudwatch/__init__.py +41 -1
- localstack/aws/api/config/__init__.py +4 -0
- localstack/aws/api/core.py +8 -5
- localstack/aws/api/dynamodb/__init__.py +30 -0
- localstack/aws/api/ec2/__init__.py +1545 -66
- localstack/aws/api/events/__init__.py +12 -16
- localstack/aws/api/iam/__init__.py +7 -0
- localstack/aws/api/kinesis/__init__.py +19 -0
- localstack/aws/api/kms/__init__.py +6 -0
- localstack/aws/api/lambda_/__init__.py +36 -23
- localstack/aws/api/logs/__init__.py +20 -8
- localstack/aws/api/opensearch/__init__.py +16 -0
- localstack/aws/api/pipes/__init__.py +24 -32
- localstack/aws/api/redshift/__init__.py +9 -3
- localstack/aws/api/route53/__init__.py +5 -0
- localstack/aws/api/s3/__init__.py +12 -0
- localstack/aws/api/s3control/__init__.py +56 -0
- localstack/aws/api/scheduler/__init__.py +14 -16
- localstack/aws/api/ssm/__init__.py +2 -0
- localstack/aws/api/stepfunctions/__init__.py +88 -114
- localstack/aws/api/support/__init__.py +8 -9
- localstack/aws/api/transcribe/__init__.py +17 -0
- localstack/aws/chain.py +2 -2
- localstack/aws/client.py +14 -11
- localstack/aws/connect.py +42 -41
- localstack/aws/forwarder.py +57 -9
- localstack/aws/gateway.py +1 -3
- localstack/aws/handlers/analytics.py +2 -3
- localstack/aws/handlers/cors.py +4 -5
- localstack/aws/handlers/internal_requests.py +6 -1
- localstack/aws/handlers/logging.py +13 -4
- localstack/aws/handlers/metric_handler.py +44 -5
- localstack/aws/handlers/service.py +48 -28
- localstack/aws/mocking.py +18 -27
- localstack/aws/patches.py +2 -2
- localstack/aws/protocol/op_router.py +11 -10
- localstack/aws/protocol/parser.py +475 -49
- localstack/aws/protocol/serializer.py +723 -106
- localstack/aws/protocol/service_router.py +133 -33
- localstack/aws/protocol/validate.py +6 -6
- localstack/aws/scaffold.py +9 -10
- localstack/aws/serving/edge.py +5 -6
- localstack/aws/serving/hypercorn.py +2 -2
- localstack/aws/serving/twisted.py +1 -2
- localstack/aws/serving/werkzeug.py +2 -2
- localstack/aws/skeleton.py +12 -11
- localstack/aws/spec-patches.json +58 -0
- localstack/aws/spec.py +66 -46
- localstack/cli/exceptions.py +1 -1
- localstack/cli/localstack.py +11 -11
- localstack/cli/lpm.py +4 -5
- localstack/cli/plugins.py +1 -1
- localstack/cli/profiles.py +1 -2
- localstack/config.py +44 -30
- localstack/constants.py +4 -29
- localstack/deprecations.py +5 -5
- localstack/dev/kubernetes/__main__.py +130 -7
- localstack/dev/run/__main__.py +5 -5
- localstack/dev/run/configurators.py +1 -4
- localstack/dev/run/paths.py +6 -6
- localstack/dns/models.py +2 -1
- localstack/dns/plugins.py +5 -1
- localstack/dns/server.py +16 -6
- localstack/http/dispatcher.py +1 -2
- localstack/http/response.py +2 -2
- localstack/http/router.py +1 -1
- localstack/http/trace.py +2 -1
- localstack/logging/format.py +6 -6
- localstack/packages/api.py +13 -12
- localstack/packages/core.py +4 -4
- localstack/packages/debugpy.py +1 -3
- localstack/packages/ffmpeg.py +1 -2
- localstack/packages/java.py +38 -12
- localstack/packages/plugins.py +0 -8
- localstack/runtime/analytics.py +3 -0
- localstack/runtime/hooks.py +1 -1
- localstack/runtime/init.py +8 -9
- localstack/runtime/main.py +5 -5
- localstack/runtime/patches.py +2 -2
- localstack/runtime/shutdown.py +2 -1
- localstack/services/apigateway/exporter.py +1 -2
- localstack/services/apigateway/helpers.py +7 -10
- localstack/services/apigateway/legacy/context.py +21 -21
- localstack/services/apigateway/legacy/helpers.py +27 -28
- localstack/services/apigateway/legacy/integration.py +11 -10
- localstack/services/apigateway/legacy/invocations.py +6 -5
- localstack/services/apigateway/legacy/provider.py +148 -68
- localstack/services/apigateway/legacy/router_asf.py +2 -2
- localstack/services/apigateway/legacy/templates.py +6 -6
- localstack/services/apigateway/models.py +16 -16
- localstack/services/apigateway/next_gen/execute_api/api.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/context.py +25 -25
- localstack/services/apigateway/next_gen/execute_api/handlers/api_key_validation.py +2 -5
- localstack/services/apigateway/next_gen/execute_api/handlers/method_request.py +7 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/parse.py +1 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +2 -3
- localstack/services/apigateway/next_gen/execute_api/header_utils.py +1 -1
- localstack/services/apigateway/next_gen/execute_api/helpers.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/integrations/aws.py +9 -6
- localstack/services/apigateway/next_gen/execute_api/integrations/http.py +12 -12
- localstack/services/apigateway/next_gen/execute_api/router.py +31 -0
- localstack/services/apigateway/next_gen/execute_api/template_mapping.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/test_invoke.py +114 -9
- localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
- localstack/services/apigateway/next_gen/provider.py +5 -0
- localstack/services/apigateway/resource_providers/aws_apigateway_account.py +3 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_account_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_apikey.py +14 -14
- localstack/services/apigateway/resource_providers/aws_apigateway_apikey_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_deployment.py +46 -46
- localstack/services/apigateway/resource_providers/aws_apigateway_deployment_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_domainname.py +18 -18
- localstack/services/apigateway/resource_providers/aws_apigateway_domainname_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse.py +7 -7
- localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_method.py +36 -36
- localstack/services/apigateway/resource_providers/aws_apigateway_method_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_model.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_model_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_resource.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_resource_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_restapi.py +26 -26
- localstack/services/apigateway/resource_providers/aws_apigateway_restapi_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_stage.py +33 -33
- localstack/services/apigateway/resource_providers/aws_apigateway_stage_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplan.py +18 -18
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplan_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey_plugin.py +1 -3
- localstack/services/cdk/resource_providers/cdk_metadata.py +4 -3
- localstack/services/cdk/resource_providers/cdk_metadata_plugin.py +1 -3
- localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate.py +14 -14
- localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate_plugin.py +1 -3
- localstack/services/cloudformation/api_utils.py +4 -8
- localstack/services/cloudformation/cfn_utils.py +2 -2
- localstack/services/cloudformation/deployment_utils.py +14 -12
- localstack/services/cloudformation/engine/changes.py +3 -3
- localstack/services/cloudformation/engine/entities.py +27 -17
- localstack/services/cloudformation/engine/parameters.py +4 -4
- localstack/services/cloudformation/engine/template_deployer.py +15 -14
- localstack/services/cloudformation/engine/template_utils.py +34 -12
- localstack/services/cloudformation/engine/transformers.py +11 -8
- localstack/services/cloudformation/engine/types.py +5 -4
- localstack/services/cloudformation/engine/v2/change_set_model.py +336 -39
- localstack/services/cloudformation/engine/v2/change_set_model_describer.py +96 -17
- localstack/services/cloudformation/engine/v2/change_set_model_executor.py +289 -136
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +315 -146
- localstack/services/cloudformation/engine/v2/change_set_model_transform.py +380 -105
- localstack/services/cloudformation/engine/v2/change_set_model_validator.py +183 -0
- localstack/services/cloudformation/engine/v2/change_set_model_visitor.py +6 -0
- localstack/services/cloudformation/engine/v2/resolving.py +102 -0
- localstack/services/cloudformation/engine/yaml_parser.py +9 -2
- localstack/services/cloudformation/provider.py +11 -6
- localstack/services/cloudformation/provider_utils.py +34 -4
- localstack/services/cloudformation/resource_provider.py +31 -21
- localstack/services/cloudformation/resource_providers/aws_cloudformation_macro.py +7 -7
- localstack/services/cloudformation/resource_providers/aws_cloudformation_macro_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_stack.py +9 -9
- localstack/services/cloudformation/resource_providers/aws_cloudformation_stack_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition.py +6 -6
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle.py +2 -2
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle_plugin.py +1 -3
- localstack/services/cloudformation/resources.py +24149 -0
- localstack/services/cloudformation/scaffolding/__main__.py +13 -12
- localstack/services/cloudformation/scaffolding/propgen.py +2 -2
- localstack/services/cloudformation/service_models.py +2 -2
- localstack/services/cloudformation/stores.py +33 -22
- localstack/services/cloudformation/v2/entities.py +103 -88
- localstack/services/cloudformation/v2/provider.py +872 -131
- localstack/services/cloudformation/v2/types.py +38 -0
- localstack/services/cloudformation/v2/utils.py +4 -1
- localstack/services/cloudwatch/alarm_scheduler.py +11 -8
- localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
- localstack/services/cloudwatch/models.py +5 -7
- localstack/services/cloudwatch/provider.py +30 -25
- localstack/services/cloudwatch/provider_v2.py +27 -32
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm.py +40 -40
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm_plugin.py +1 -3
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm.py +12 -12
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm_plugin.py +1 -3
- localstack/services/dynamodb/packages.py +3 -3
- localstack/services/dynamodb/provider.py +159 -18
- localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable.py +63 -63
- localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable_plugin.py +1 -3
- localstack/services/dynamodb/resource_providers/aws_dynamodb_table.py +57 -57
- localstack/services/dynamodb/resource_providers/aws_dynamodb_table_plugin.py +1 -3
- localstack/services/dynamodb/server.py +2 -2
- localstack/services/dynamodb/utils.py +13 -14
- localstack/services/dynamodb/v2/provider.py +157 -18
- localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
- localstack/services/dynamodbstreams/models.py +1 -3
- localstack/services/ec2/patches.py +26 -5
- localstack/services/ec2/provider.py +3 -3
- localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions.py +10 -10
- localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_instance.py +96 -96
- localstack/services/ec2/resource_providers/aws_ec2_instance_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_internetgateway.py +5 -5
- localstack/services/ec2/resource_providers/aws_ec2_internetgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_keypair.py +10 -10
- localstack/services/ec2/resource_providers/aws_ec2_keypair_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_natgateway.py +13 -13
- localstack/services/ec2/resource_providers/aws_ec2_natgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_networkacl.py +6 -6
- localstack/services/ec2/resource_providers/aws_ec2_networkacl_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_prefixlist.py +14 -14
- localstack/services/ec2/resource_providers/aws_ec2_prefixlist_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_route.py +15 -15
- localstack/services/ec2/resource_providers/aws_ec2_route_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_routetable.py +6 -6
- localstack/services/ec2/resource_providers/aws_ec2_routetable_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_securitygroup.py +29 -29
- localstack/services/ec2/resource_providers/aws_ec2_securitygroup_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_subnet.py +19 -19
- localstack/services/ec2/resource_providers/aws_ec2_subnet_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation.py +4 -4
- localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_transitgateway.py +16 -16
- localstack/services/ec2/resource_providers/aws_ec2_transitgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment.py +9 -9
- localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpc.py +15 -15
- localstack/services/ec2/resource_providers/aws_ec2_vpc_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint.py +29 -22
- localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment.py +5 -5
- localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment_plugin.py +1 -3
- localstack/services/ecr/resource_providers/aws_ecr_repository.py +22 -19
- localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
- localstack/services/edge.py +6 -6
- localstack/services/es/provider.py +21 -21
- localstack/services/events/archive.py +2 -2
- localstack/services/events/connection.py +5 -5
- localstack/services/events/event_bus.py +9 -9
- localstack/services/events/event_rule_engine.py +31 -13
- localstack/services/events/models.py +29 -30
- localstack/services/events/provider.py +29 -26
- localstack/services/events/replay.py +3 -3
- localstack/services/events/resource_providers/aws_events_apidestination.py +8 -8
- localstack/services/events/resource_providers/aws_events_apidestination_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_connection.py +27 -27
- localstack/services/events/resource_providers/aws_events_connection_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_eventbus.py +9 -9
- localstack/services/events/resource_providers/aws_events_eventbus_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_eventbuspolicy.py +11 -11
- localstack/services/events/resource_providers/aws_events_eventbuspolicy_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_rule.py +82 -82
- localstack/services/events/resource_providers/aws_events_rule_plugin.py +1 -3
- localstack/services/events/rule.py +15 -15
- localstack/services/events/target.py +21 -13
- localstack/services/events/utils.py +7 -7
- localstack/services/events/v1/models.py +1 -3
- localstack/services/events/v1/provider.py +15 -15
- localstack/services/firehose/models.py +1 -3
- localstack/services/firehose/provider.py +25 -16
- localstack/services/iam/iam_patches.py +5 -6
- localstack/services/iam/provider.py +14 -119
- localstack/services/iam/resource_providers/aws_iam_accesskey.py +6 -6
- localstack/services/iam/resource_providers/aws_iam_accesskey_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_group.py +9 -9
- localstack/services/iam/resource_providers/aws_iam_group_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_instanceprofile.py +5 -5
- localstack/services/iam/resource_providers/aws_iam_instanceprofile_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_managedpolicy.py +9 -9
- localstack/services/iam/resource_providers/aws_iam_managedpolicy_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_policy.py +7 -7
- localstack/services/iam/resource_providers/aws_iam_policy_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_role.py +16 -16
- localstack/services/iam/resource_providers/aws_iam_role_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_servercertificate.py +10 -10
- localstack/services/iam/resource_providers/aws_iam_servercertificate_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_servicelinkedrole.py +5 -5
- localstack/services/iam/resource_providers/aws_iam_servicelinkedrole_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_user.py +17 -17
- localstack/services/iam/resource_providers/aws_iam_user_plugin.py +1 -3
- localstack/services/iam/resources/policy_simulator.py +133 -0
- localstack/services/kinesis/kinesis_mock_server.py +7 -8
- localstack/services/kinesis/models.py +17 -5
- localstack/services/kinesis/packages.py +3 -3
- localstack/services/kinesis/provider.py +86 -3
- localstack/services/kinesis/resource_providers/aws_kinesis_stream.py +13 -13
- localstack/services/kinesis/resource_providers/aws_kinesis_stream_plugin.py +1 -3
- localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer.py +7 -7
- localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer_plugin.py +1 -3
- localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream.py +191 -191
- localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream_plugin.py +1 -3
- localstack/services/kms/models.py +21 -18
- localstack/services/kms/provider.py +62 -26
- localstack/services/kms/resource_providers/aws_kms_alias.py +3 -3
- localstack/services/kms/resource_providers/aws_kms_alias_plugin.py +1 -3
- localstack/services/kms/resource_providers/aws_kms_key.py +14 -14
- localstack/services/kms/resource_providers/aws_kms_key_plugin.py +1 -3
- localstack/services/kms/utils.py +4 -3
- localstack/services/lambda_/api_utils.py +19 -16
- localstack/services/lambda_/custom_endpoints.py +2 -2
- localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +4 -7
- localstack/services/lambda_/event_source_mapping/pipe_utils.py +2 -2
- localstack/services/lambda_/event_source_mapping/pollers/stream_poller.py +1 -1
- localstack/services/lambda_/event_source_mapping/senders/sender_utils.py +2 -1
- localstack/services/lambda_/hooks.py +6 -1
- localstack/services/lambda_/invocation/assignment.py +1 -2
- localstack/services/lambda_/invocation/docker_runtime_executor.py +7 -11
- localstack/services/lambda_/invocation/event_manager.py +1 -1
- localstack/services/lambda_/invocation/execution_environment.py +4 -4
- localstack/services/lambda_/invocation/executor_endpoint.py +8 -11
- localstack/services/lambda_/invocation/internal_sqs_queue.py +6 -10
- localstack/services/lambda_/invocation/lambda_models.py +33 -30
- localstack/services/lambda_/invocation/lambda_service.py +12 -5
- localstack/services/lambda_/invocation/logs.py +2 -3
- localstack/services/lambda_/invocation/runtime_executor.py +3 -3
- localstack/services/lambda_/invocation/version_manager.py +31 -8
- localstack/services/lambda_/ldm.py +14 -0
- localstack/services/lambda_/packages.py +3 -4
- localstack/services/lambda_/provider.py +9 -26
- localstack/services/lambda_/provider_utils.py +1 -1
- localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig.py +8 -8
- localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig.py +11 -11
- localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping.py +39 -39
- localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_function.py +54 -54
- localstack/services/lambda_/resource_providers/aws_lambda_function_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_layerversion.py +11 -11
- localstack/services/lambda_/resource_providers/aws_lambda_layerversion_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission.py +6 -6
- localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_permission.py +10 -10
- localstack/services/lambda_/resource_providers/aws_lambda_permission_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_url.py +15 -15
- localstack/services/lambda_/resource_providers/aws_lambda_url_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_version.py +8 -8
- localstack/services/lambda_/resource_providers/aws_lambda_version_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/lambda_alias.py +12 -12
- localstack/services/lambda_/resource_providers/lambda_alias_plugin.py +1 -3
- localstack/services/lambda_/runtimes.py +1 -3
- localstack/services/lambda_/urlrouter.py +14 -1
- localstack/services/logs/models.py +1 -3
- localstack/services/logs/provider.py +39 -22
- localstack/services/logs/resource_providers/aws_logs_loggroup.py +9 -9
- localstack/services/logs/resource_providers/aws_logs_loggroup_plugin.py +1 -3
- localstack/services/logs/resource_providers/aws_logs_logstream.py +4 -4
- localstack/services/logs/resource_providers/aws_logs_logstream_plugin.py +1 -3
- localstack/services/logs/resource_providers/aws_logs_subscriptionfilter.py +7 -7
- localstack/services/logs/resource_providers/aws_logs_subscriptionfilter_plugin.py +1 -3
- localstack/services/moto.py +5 -4
- localstack/services/opensearch/cluster.py +28 -20
- localstack/services/opensearch/cluster_manager.py +13 -14
- localstack/services/opensearch/models.py +1 -3
- localstack/services/opensearch/packages.py +27 -9
- localstack/services/opensearch/provider.py +15 -10
- localstack/services/opensearch/resource_providers/aws_elasticsearch_domain.py +61 -61
- localstack/services/opensearch/resource_providers/aws_elasticsearch_domain_plugin.py +1 -3
- localstack/services/opensearch/resource_providers/aws_opensearchservice_domain.py +89 -89
- localstack/services/opensearch/resource_providers/aws_opensearchservice_domain_plugin.py +1 -3
- localstack/services/opensearch/versions.py +57 -10
- localstack/services/plugins.py +37 -32
- localstack/services/providers.py +10 -2
- localstack/services/redshift/provider.py +0 -21
- localstack/services/redshift/resource_providers/aws_redshift_cluster.py +57 -57
- localstack/services/redshift/resource_providers/aws_redshift_cluster_plugin.py +1 -3
- localstack/services/resource_groups/resource_providers/aws_resourcegroups_group.py +21 -21
- localstack/services/resource_groups/resource_providers/aws_resourcegroups_group_plugin.py +1 -3
- localstack/services/route53/models.py +1 -3
- localstack/services/route53/provider.py +1 -2
- localstack/services/route53/resource_providers/aws_route53_healthcheck.py +6 -6
- localstack/services/route53/resource_providers/aws_route53_healthcheck_plugin.py +1 -3
- localstack/services/route53/resource_providers/aws_route53_recordset.py +27 -27
- localstack/services/route53/resource_providers/aws_route53_recordset_plugin.py +1 -3
- localstack/services/route53resolver/models.py +8 -10
- localstack/services/route53resolver/provider.py +12 -12
- localstack/services/s3/codec.py +2 -2
- localstack/services/s3/constants.py +5 -2
- localstack/services/s3/cors.py +8 -8
- localstack/services/s3/models.py +73 -73
- localstack/services/s3/notifications.py +74 -58
- localstack/services/s3/presigned_url.py +41 -59
- localstack/services/s3/provider.py +86 -29
- localstack/services/s3/resource_providers/aws_s3_bucket.py +180 -180
- localstack/services/s3/resource_providers/aws_s3_bucket_plugin.py +1 -3
- localstack/services/s3/resource_providers/aws_s3_bucketpolicy.py +4 -4
- localstack/services/s3/resource_providers/aws_s3_bucketpolicy_plugin.py +1 -3
- localstack/services/s3/storage/core.py +4 -3
- localstack/services/s3/storage/ephemeral.py +7 -6
- localstack/services/s3/utils.py +51 -31
- localstack/services/s3/validation.py +47 -33
- localstack/services/s3/website_hosting.py +9 -7
- localstack/services/scheduler/resource_providers/aws_scheduler_schedule.py +60 -60
- localstack/services/scheduler/resource_providers/aws_scheduler_schedule_plugin.py +1 -3
- localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup.py +9 -9
- localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup_plugin.py +1 -3
- localstack/services/secretsmanager/provider.py +10 -12
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy.py +5 -5
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule.py +21 -21
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret.py +23 -23
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment.py +5 -5
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment_plugin.py +1 -3
- localstack/services/ses/models.py +8 -1
- localstack/services/ses/provider.py +128 -55
- localstack/services/ses/resource_providers/aws_ses_emailidentity.py +21 -21
- localstack/services/ses/resource_providers/aws_ses_emailidentity_plugin.py +1 -3
- localstack/services/sns/constants.py +7 -1
- localstack/services/sns/executor.py +9 -2
- localstack/services/sns/models.py +25 -25
- localstack/services/sns/provider.py +9 -7
- localstack/services/sns/publisher.py +37 -23
- localstack/services/sns/resource_providers/aws_sns_subscription.py +13 -13
- localstack/services/sns/resource_providers/aws_sns_subscription_plugin.py +1 -3
- localstack/services/sns/resource_providers/aws_sns_topic.py +16 -16
- localstack/services/sns/resource_providers/aws_sns_topic_plugin.py +1 -3
- localstack/services/sns/resource_providers/aws_sns_topicpolicy.py +4 -4
- localstack/services/sns/resource_providers/aws_sns_topicpolicy_plugin.py +1 -3
- localstack/services/sns/v2/models.py +167 -0
- localstack/services/sns/v2/provider.py +867 -0
- localstack/services/sns/v2/utils.py +130 -0
- localstack/services/sqs/constants.py +2 -2
- localstack/services/sqs/developer_api.py +205 -0
- localstack/services/sqs/models.py +71 -36
- localstack/services/sqs/provider.py +56 -332
- localstack/services/sqs/query_api.py +8 -5
- localstack/services/sqs/resource_providers/aws_sqs_queue.py +21 -21
- localstack/services/sqs/resource_providers/aws_sqs_queue_plugin.py +1 -3
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy.py +7 -5
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy_plugin.py +1 -3
- localstack/services/sqs/utils.py +123 -4
- localstack/services/ssm/provider.py +3 -4
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow.py +15 -15
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget.py +10 -10
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask.py +48 -48
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_parameter.py +10 -10
- localstack/services/ssm/resource_providers/aws_ssm_parameter_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_patchbaseline.py +29 -29
- localstack/services/ssm/resource_providers/aws_ssm_patchbaseline_plugin.py +1 -3
- localstack/services/stepfunctions/asl/antlt4utils/antlr4utils.py +3 -4
- localstack/services/stepfunctions/asl/component/common/assign/assign_decl.py +1 -1
- localstack/services/stepfunctions/asl/component/common/assign/assign_decl_binding.py +1 -1
- localstack/services/stepfunctions/asl/component/common/assign/assign_template_value_array.py +1 -1
- localstack/services/stepfunctions/asl/component/common/assign/assign_template_value_object.py +1 -1
- localstack/services/stepfunctions/asl/component/common/catch/catcher_decl.py +9 -9
- localstack/services/stepfunctions/asl/component/common/error_name/custom_error_name.py +2 -2
- localstack/services/stepfunctions/asl/component/common/error_name/error_name.py +4 -4
- localstack/services/stepfunctions/asl/component/common/error_name/failure_event.py +8 -8
- localstack/services/stepfunctions/asl/component/common/error_name/states_error_name_type.py +1 -1
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_binding.py +2 -2
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_value_array.py +1 -1
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_value_object.py +1 -1
- localstack/services/stepfunctions/asl/component/common/path/input_path.py +4 -4
- localstack/services/stepfunctions/asl/component/common/path/output_path.py +4 -4
- localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadarr/payload_arr.py +1 -1
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadtmpl/payload_tmpl.py +1 -1
- localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
- localstack/services/stepfunctions/asl/component/common/string/string_expression.py +3 -3
- localstack/services/stepfunctions/asl/component/common/timeouts/timeout.py +3 -3
- localstack/services/stepfunctions/asl/component/eval_component.py +2 -3
- localstack/services/stepfunctions/asl/component/intrinsic/argument/argument.py +4 -4
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/array/array_partition.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/generic/string_format.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/states_function_array.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/states_function_format.py +1 -1
- localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +3 -3
- localstack/services/stepfunctions/asl/component/intrinsic/member.py +1 -1
- localstack/services/stepfunctions/asl/component/program/program.py +9 -9
- localstack/services/stepfunctions/asl/component/program/states.py +1 -1
- localstack/services/stepfunctions/asl/component/state/state.py +10 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/choice_rule.py +11 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/comparison/comparison.py +5 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/comparison/operator/implementations/is_operator.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +9 -9
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/reader_config/reader_config_decl.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_eval_s3.py +2 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_output_transformer/resource_output_transformer_csv.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/distributed_iteration_component.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/inline_iteration_component.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/distributed_item_processor_worker.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/inline_item_processor_worker.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/map_run_record.py +10 -10
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_component.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_declaration.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_worker.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/distributed_iterator_worker.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator.py +1 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator_worker.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/job.py +9 -9
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/result_writer/resource_eval/resource_eval_s3.py +2 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/state_map.py +12 -13
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branch_worker.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branches_decl.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +2 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/resource.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py +10 -10
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_api_gateway.py +18 -18
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_aws_sdk.py +1 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +8 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_callback.py +18 -17
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_dynamodb.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_ecs.py +5 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_events.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_glue.py +7 -6
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_lambda.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sfn.py +9 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sns.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sqs.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task_lambda.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_fail/state_fail.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +5 -7
- localstack/services/stepfunctions/asl/component/state/state_succeed/state_succeed.py +1 -1
- localstack/services/stepfunctions/asl/component/state/state_wait/state_wait.py +1 -1
- localstack/services/stepfunctions/asl/component/state/state_wait/wait_function/timestamp.py +2 -2
- localstack/services/stepfunctions/asl/eval/callback/callback.py +18 -18
- localstack/services/stepfunctions/asl/eval/environment.py +22 -24
- localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
- localstack/services/stepfunctions/asl/eval/event/event_manager.py +10 -10
- localstack/services/stepfunctions/asl/eval/event/logging.py +3 -3
- localstack/services/stepfunctions/asl/eval/program_state.py +8 -8
- localstack/services/stepfunctions/asl/eval/states.py +12 -12
- localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
- localstack/services/stepfunctions/asl/eval/variable_store.py +6 -6
- localstack/services/stepfunctions/asl/jsonata/jsonata.py +7 -6
- localstack/services/stepfunctions/asl/parse/asl_parser.py +1 -1
- localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +2 -3
- localstack/services/stepfunctions/asl/parse/preprocessor.py +44 -44
- localstack/services/stepfunctions/asl/parse/typed_props.py +2 -2
- localstack/services/stepfunctions/asl/static_analyser/intrinsic/variable_names_intrinsic_static_analyser.py +1 -1
- localstack/services/stepfunctions/asl/static_analyser/variable_references_static_analyser.py +2 -2
- localstack/services/stepfunctions/asl/utils/encoding.py +2 -2
- localstack/services/stepfunctions/asl/utils/json_path.py +2 -2
- localstack/services/stepfunctions/backend/activity.py +4 -4
- localstack/services/stepfunctions/backend/alias.py +8 -8
- localstack/services/stepfunctions/backend/execution.py +29 -30
- localstack/services/stepfunctions/backend/execution_worker.py +7 -7
- localstack/services/stepfunctions/backend/state_machine.py +28 -28
- localstack/services/stepfunctions/backend/test_state/execution.py +3 -4
- localstack/services/stepfunctions/backend/test_state/execution_worker.py +1 -3
- localstack/services/stepfunctions/mocking/mock_config.py +9 -9
- localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
- localstack/services/stepfunctions/packages.py +14 -5
- localstack/services/stepfunctions/provider.py +34 -44
- localstack/services/stepfunctions/quotas.py +2 -3
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity.py +6 -6
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity_plugin.py +1 -3
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine.py +25 -25
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine_plugin.py +1 -3
- localstack/services/stepfunctions/stepfunctions_utils.py +1 -2
- localstack/services/stores.py +8 -8
- localstack/services/transcribe/packages.py +1 -3
- localstack/services/transcribe/provider.py +8 -3
- localstack/state/codecs.py +61 -0
- localstack/state/core.py +11 -5
- localstack/state/inspect.py +4 -4
- localstack/state/pickle.py +36 -23
- localstack/testing/aws/asf_utils.py +3 -2
- localstack/testing/aws/cloudformation_utils.py +1 -1
- localstack/testing/aws/lambda_utils.py +15 -14
- localstack/testing/aws/util.py +3 -2
- localstack/testing/pytest/cloudformation/fixtures.py +68 -18
- localstack/testing/pytest/container.py +5 -5
- localstack/testing/pytest/filters.py +1 -3
- localstack/testing/pytest/fixtures.py +188 -49
- localstack/testing/pytest/in_memory_localstack.py +1 -3
- localstack/testing/pytest/marking.py +42 -15
- localstack/testing/pytest/path_filter.py +1 -1
- localstack/testing/pytest/stepfunctions/fixtures.py +4 -4
- localstack/testing/pytest/stepfunctions/utils.py +11 -10
- localstack/testing/pytest/util.py +1 -1
- localstack/testing/pytest/validation_tracking.py +3 -4
- localstack/testing/scenario/provisioning.py +11 -10
- localstack/testing/snapshots/transformer_utility.py +8 -3
- localstack/testing/testselection/matching.py +2 -2
- localstack/testing/testselection/opt_out.py +1 -1
- localstack/testing/testselection/scripts/filter_by_test_selection.py +1 -1
- localstack/testing/testselection/scripts/generate_test_selection.py +1 -1
- localstack/testing/testselection/testselection.py +2 -2
- localstack/utils/analytics/cli.py +2 -3
- localstack/utils/analytics/client.py +5 -5
- localstack/utils/analytics/events.py +2 -2
- localstack/utils/analytics/metadata.py +6 -4
- localstack/utils/analytics/metrics/counter.py +11 -18
- localstack/utils/analytics/metrics/registry.py +2 -2
- localstack/utils/analytics/publisher.py +4 -5
- localstack/utils/analytics/service_providers.py +19 -0
- localstack/utils/analytics/service_request_aggregator.py +4 -4
- localstack/utils/archives.py +12 -12
- localstack/utils/asyncio.py +2 -2
- localstack/utils/aws/arns.py +26 -31
- localstack/utils/aws/aws_responses.py +21 -28
- localstack/utils/aws/aws_stack.py +7 -12
- localstack/utils/aws/dead_letter_queue.py +4 -9
- localstack/utils/aws/message_forwarding.py +8 -11
- localstack/utils/aws/request_context.py +5 -6
- localstack/utils/aws/resources.py +1 -1
- localstack/utils/aws/templating.py +4 -4
- localstack/utils/batch_policy.py +4 -4
- localstack/utils/bootstrap.py +37 -30
- localstack/utils/catalog/catalog.py +139 -0
- localstack/utils/catalog/catalog_loader.py +119 -0
- localstack/utils/catalog/common.py +58 -0
- localstack/utils/catalog/plugins.py +28 -0
- localstack/utils/cloudwatch/cloudwatch_util.py +5 -5
- localstack/utils/collections.py +33 -27
- localstack/utils/config_listener.py +2 -2
- localstack/utils/container_networking.py +5 -6
- localstack/utils/container_utils/container_client.py +156 -160
- localstack/utils/container_utils/docker_cmd_client.py +97 -81
- localstack/utils/container_utils/docker_sdk_client.py +75 -72
- localstack/utils/crypto.py +12 -13
- localstack/utils/diagnose.py +11 -12
- localstack/utils/docker_utils.py +11 -7
- localstack/utils/files.py +34 -15
- localstack/utils/functions.py +5 -4
- localstack/utils/http.py +14 -14
- localstack/utils/iputils.py +2 -1
- localstack/utils/json.py +21 -7
- localstack/utils/kinesis/kinesis_connector.py +2 -1
- localstack/utils/net.py +25 -17
- localstack/utils/no_exit_argument_parser.py +2 -2
- localstack/utils/numbers.py +9 -2
- localstack/utils/objects.py +15 -14
- localstack/utils/patch.py +14 -7
- localstack/utils/platform.py +2 -2
- localstack/utils/run.py +15 -14
- localstack/utils/scheduler.py +13 -12
- localstack/utils/server/tcp_proxy.py +2 -2
- localstack/utils/serving.py +3 -4
- localstack/utils/strings.py +15 -16
- localstack/utils/sync.py +126 -1
- localstack/utils/tagging.py +10 -8
- localstack/utils/testutil.py +17 -17
- localstack/utils/threads.py +3 -3
- localstack/utils/time.py +12 -4
- localstack/utils/urls.py +1 -3
- localstack/utils/xml.py +1 -1
- localstack/utils/xray/traceid.py +1 -1
- localstack/version.py +16 -3
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/METADATA +18 -13
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/RECORD +663 -655
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/entry_points.txt +8 -4
- localstack_core-4.10.1.dev12.dist-info/plux.json +1 -0
- localstack/packages/terraform.py +0 -47
- localstack/services/cloudformation/deploy.html +0 -144
- localstack/services/cloudformation/deploy_ui.py +0 -47
- localstack/services/cloudformation/plugins.py +0 -12
- localstack/services/lambda_/lambda_debug_mode/ldm.py +0 -375
- localstack/services/lambda_/lambda_debug_mode/ldm_config_file.py +0 -178
- localstack/services/lambda_/lambda_debug_mode/ldm_types.py +0 -11
- localstack/services/lambda_/lambda_debug_mode/ldm_utils.py +0 -43
- localstack_core-4.6.1.dev60.dist-info/plux.json +0 -1
- /localstack/{services/lambda_/lambda_debug_mode/__init__.py → testing/pytest/cloudformation/transformers.py} +0 -0
- {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack +0 -0
- {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/WHEEL +0 -0
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/top_level.txt +0 -0
|
@@ -1,375 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import logging
|
|
4
|
-
import os
|
|
5
|
-
import threading
|
|
6
|
-
import time
|
|
7
|
-
from threading import Event, RLock, Thread
|
|
8
|
-
from typing import Callable, Dict, Final, Optional
|
|
9
|
-
|
|
10
|
-
from localstack.aws.api.lambda_ import (
|
|
11
|
-
Arn,
|
|
12
|
-
FunctionVersion,
|
|
13
|
-
ResourceNotFoundException,
|
|
14
|
-
TooManyRequestsException,
|
|
15
|
-
)
|
|
16
|
-
from localstack.config import LAMBDA_DEBUG_MODE, LAMBDA_DEBUG_MODE_CONFIG_PATH
|
|
17
|
-
from localstack.services.lambda_.invocation.execution_environment import (
|
|
18
|
-
ExecutionEnvironment,
|
|
19
|
-
InvalidStatusException,
|
|
20
|
-
RuntimeStatus,
|
|
21
|
-
)
|
|
22
|
-
from localstack.services.lambda_.lambda_debug_mode.ldm_config_file import parse_ldm_config
|
|
23
|
-
from localstack.services.lambda_.provider_utils import get_function_version
|
|
24
|
-
from localstack.utils.aws.arns import parse_arn
|
|
25
|
-
from localstack.utils.objects import singleton_factory
|
|
26
|
-
from localstack.utils.strings import long_uid
|
|
27
|
-
|
|
28
|
-
LOG = logging.getLogger(__name__)
|
|
29
|
-
|
|
30
|
-
# Specifies the default timeout value in seconds to be used by time restricted workflows
|
|
31
|
-
# when Debug Mode is enabled. The value is set to one hour to ensure eventual termination
|
|
32
|
-
# of long-running processes.
|
|
33
|
-
DEFAULT_LAMBDA_DEBUG_MODE_TIMEOUT_SECONDS: int = 3_600
|
|
34
|
-
LDM_ENV_VAR_DEBUG_PORT: str = "LDM_DEBUG_PORT"
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
class LambdaFunctionDebugConfig:
|
|
38
|
-
qualified_lambda_arn: Final[Arn]
|
|
39
|
-
port: Final[int]
|
|
40
|
-
enforce_timeouts: Final[bool]
|
|
41
|
-
user_agent: Final[Optional[str]]
|
|
42
|
-
|
|
43
|
-
def __init__(
|
|
44
|
-
self,
|
|
45
|
-
qualified_lambda_arn: Arn,
|
|
46
|
-
port: int,
|
|
47
|
-
enforce_timeouts: bool = False,
|
|
48
|
-
user_agent: Optional[str] = None,
|
|
49
|
-
):
|
|
50
|
-
self.qualified_lambda_arn = qualified_lambda_arn
|
|
51
|
-
self.port = port
|
|
52
|
-
self.enforce_timeouts = enforce_timeouts
|
|
53
|
-
self.user_agent = user_agent
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
class DebugEnabledExecutionEnvironment(ExecutionEnvironment):
|
|
57
|
-
_lambda_function_debug_config: Final[LambdaFunctionDebugConfig]
|
|
58
|
-
|
|
59
|
-
def __init__(
|
|
60
|
-
self,
|
|
61
|
-
function_version: FunctionVersion,
|
|
62
|
-
lambda_function_debug_config: LambdaFunctionDebugConfig,
|
|
63
|
-
on_timeout: Callable[[str, str], None],
|
|
64
|
-
):
|
|
65
|
-
super().__init__(
|
|
66
|
-
function_version=function_version,
|
|
67
|
-
version_manager_id=f"debug-enable-{long_uid()}",
|
|
68
|
-
initialization_type="provisioned-concurrency",
|
|
69
|
-
on_timeout=on_timeout,
|
|
70
|
-
)
|
|
71
|
-
self._lambda_function_debug_config = lambda_function_debug_config
|
|
72
|
-
|
|
73
|
-
def get_environment_variables(self) -> Dict[str, str]:
|
|
74
|
-
environment_variables = super().get_environment_variables()
|
|
75
|
-
environment_variables[LDM_ENV_VAR_DEBUG_PORT] = str(self._lambda_function_debug_config.port)
|
|
76
|
-
if not self._lambda_function_debug_config.enforce_timeouts:
|
|
77
|
-
environment_variables["AWS_LAMBDA_FUNCTION_TIMEOUT"] = str(
|
|
78
|
-
DEFAULT_LAMBDA_DEBUG_MODE_TIMEOUT_SECONDS
|
|
79
|
-
)
|
|
80
|
-
return environment_variables
|
|
81
|
-
|
|
82
|
-
def _get_startup_timeout_seconds(self) -> int:
|
|
83
|
-
return DEFAULT_LAMBDA_DEBUG_MODE_TIMEOUT_SECONDS
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
class LambdaDebugTarget:
|
|
87
|
-
_mutex: Final[RLock]
|
|
88
|
-
_lambda_qualified_arn: Final[str]
|
|
89
|
-
lambda_function_debug_config: Final[LambdaFunctionDebugConfig]
|
|
90
|
-
_debug_execution_environment: Optional[DebugEnabledExecutionEnvironment]
|
|
91
|
-
|
|
92
|
-
def __init__(self, lambda_function_debug_config: LambdaFunctionDebugConfig):
|
|
93
|
-
self._mutex = RLock()
|
|
94
|
-
self._lambda_qualified_arn = lambda_function_debug_config.qualified_lambda_arn
|
|
95
|
-
self.lambda_function_debug_config = lambda_function_debug_config
|
|
96
|
-
self._debug_execution_environment = None
|
|
97
|
-
|
|
98
|
-
def start_debug_enabled_execution_environment(self):
|
|
99
|
-
# Attempt to create the debug environment now if the function exists.
|
|
100
|
-
with self._mutex:
|
|
101
|
-
if self._debug_execution_environment is not None:
|
|
102
|
-
return
|
|
103
|
-
self.stop_debug_enabled_execution_environment()
|
|
104
|
-
|
|
105
|
-
try:
|
|
106
|
-
lambda_parsed_arn = parse_arn(self._lambda_qualified_arn)
|
|
107
|
-
lambda_account_id = lambda_parsed_arn["account"]
|
|
108
|
-
lambda_region_name = lambda_parsed_arn["region"]
|
|
109
|
-
_, lambda_function_name, lambda_function_qualifier = lambda_parsed_arn[
|
|
110
|
-
"resource"
|
|
111
|
-
].split(":")
|
|
112
|
-
function_version = get_function_version(
|
|
113
|
-
function_name=lambda_function_name,
|
|
114
|
-
qualifier=lambda_function_qualifier,
|
|
115
|
-
account_id=lambda_account_id,
|
|
116
|
-
region=lambda_region_name,
|
|
117
|
-
)
|
|
118
|
-
except ResourceNotFoundException:
|
|
119
|
-
# The lambda function has not being created yet.
|
|
120
|
-
return
|
|
121
|
-
|
|
122
|
-
self._debug_execution_environment = DebugEnabledExecutionEnvironment(
|
|
123
|
-
function_version=function_version,
|
|
124
|
-
lambda_function_debug_config=self.lambda_function_debug_config,
|
|
125
|
-
on_timeout=self._on_execution_environment_timeout,
|
|
126
|
-
)
|
|
127
|
-
# FIXME: this log should take place after RuntimeStatus.READY, however the debug-enabled
|
|
128
|
-
# docker container will not notify LS about it starting up until the user has
|
|
129
|
-
# connected a debug client. Future work should resolve this notification issue.
|
|
130
|
-
LOG.info(
|
|
131
|
-
"LDM is ready for debugger connections for '%s' on port %i.",
|
|
132
|
-
self.lambda_function_debug_config.qualified_lambda_arn,
|
|
133
|
-
self.lambda_function_debug_config.port,
|
|
134
|
-
)
|
|
135
|
-
self._debug_execution_environment.start()
|
|
136
|
-
if self._debug_execution_environment.status != RuntimeStatus.READY:
|
|
137
|
-
LOG.error(
|
|
138
|
-
"LDM could not create a debug environment for '%s'", self._lambda_qualified_arn
|
|
139
|
-
)
|
|
140
|
-
self._debug_execution_environment = None
|
|
141
|
-
|
|
142
|
-
def stop_debug_enabled_execution_environment(self):
|
|
143
|
-
with self._mutex:
|
|
144
|
-
if environment := self._debug_execution_environment:
|
|
145
|
-
environment.stop()
|
|
146
|
-
self._debug_execution_environment = None
|
|
147
|
-
|
|
148
|
-
def get_execution_environment(self) -> DebugEnabledExecutionEnvironment:
|
|
149
|
-
# TODO: add support for concurrent invokes, such as invoke object queuing, new container spinup
|
|
150
|
-
with self._mutex:
|
|
151
|
-
# TODO: move this start-up logic to lambda function creation.
|
|
152
|
-
self.start_debug_enabled_execution_environment()
|
|
153
|
-
try:
|
|
154
|
-
self._debug_execution_environment.reserve()
|
|
155
|
-
return self._debug_execution_environment
|
|
156
|
-
except InvalidStatusException:
|
|
157
|
-
LOG.warning(
|
|
158
|
-
"Concurrent lambda invocations disabled for '%s' by Lambda Debug Mode",
|
|
159
|
-
self._lambda_qualified_arn,
|
|
160
|
-
)
|
|
161
|
-
raise TooManyRequestsException(
|
|
162
|
-
"Rate Exceeded.",
|
|
163
|
-
Reason="SingleLeaseEnforcement",
|
|
164
|
-
Type="User",
|
|
165
|
-
)
|
|
166
|
-
|
|
167
|
-
def _on_execution_environment_timeout(
|
|
168
|
-
self, version_manager_id: str, environment_id: str
|
|
169
|
-
) -> None:
|
|
170
|
-
# This function is run by the ExecutionEnvironment when the
|
|
171
|
-
# release of on-demand container times-out whilst waiting for
|
|
172
|
-
# invokes. However, DebugEnabledExecutionEnvironment are
|
|
173
|
-
# provisioned-concurrency ExecutionEnvironments.
|
|
174
|
-
LOG.warning(
|
|
175
|
-
"Lambda Debug Mode function '%s' timed out ('%s', '%s')",
|
|
176
|
-
self._lambda_qualified_arn,
|
|
177
|
-
version_manager_id,
|
|
178
|
-
environment_id,
|
|
179
|
-
)
|
|
180
|
-
self.stop_debug_enabled_execution_environment()
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
class LDMConfigFileWatch:
|
|
184
|
-
_mutex: Final[RLock]
|
|
185
|
-
_stop_event: Final[Event]
|
|
186
|
-
_watch_thread: Final[Thread]
|
|
187
|
-
|
|
188
|
-
def __init__(self):
|
|
189
|
-
self._mutex = RLock()
|
|
190
|
-
self._stop_event = Event()
|
|
191
|
-
self._watch_thread = Thread(
|
|
192
|
-
target=self._watch_logic, args=(), daemon=True, name="LDMConfigFileWatch"
|
|
193
|
-
)
|
|
194
|
-
|
|
195
|
-
def start(self):
|
|
196
|
-
with self._mutex:
|
|
197
|
-
self._stop_event.clear()
|
|
198
|
-
if not self._watch_thread.is_alive():
|
|
199
|
-
self._watch_thread.start()
|
|
200
|
-
|
|
201
|
-
def stop(self):
|
|
202
|
-
with self._mutex:
|
|
203
|
-
self._stop_event.set()
|
|
204
|
-
|
|
205
|
-
def _watch_logic(self) -> None:
|
|
206
|
-
if not LAMBDA_DEBUG_MODE_CONFIG_PATH:
|
|
207
|
-
LOG.info("LDM: no definitions for LAMBDA_DEBUG_MODE_CONFIG_PATH")
|
|
208
|
-
return
|
|
209
|
-
|
|
210
|
-
# TODO: consider relying on system calls (watchdog lib for cross-platform support)
|
|
211
|
-
# instead of monitoring last modified dates.
|
|
212
|
-
# Run the first load and signal as initialised.
|
|
213
|
-
epoch_last_loaded: int = self._config_file_epoch_last_modified_or_now()
|
|
214
|
-
self._update_ldm_from_ldm_config_file()
|
|
215
|
-
|
|
216
|
-
# Monitor for file changes whilst the application is running.
|
|
217
|
-
while not self._stop_event.is_set():
|
|
218
|
-
time.sleep(1)
|
|
219
|
-
epoch_last_modified = self._config_file_epoch_last_modified_or_now()
|
|
220
|
-
if epoch_last_modified > epoch_last_loaded:
|
|
221
|
-
epoch_last_loaded = epoch_last_modified
|
|
222
|
-
self._update_ldm_from_ldm_config_file()
|
|
223
|
-
|
|
224
|
-
@staticmethod
|
|
225
|
-
def _update_ldm_from_ldm_config_file() -> None:
|
|
226
|
-
yaml_configuration_string = None
|
|
227
|
-
try:
|
|
228
|
-
with open(LAMBDA_DEBUG_MODE_CONFIG_PATH, "r") as df:
|
|
229
|
-
yaml_configuration_string = df.read()
|
|
230
|
-
except FileNotFoundError:
|
|
231
|
-
LOG.error(
|
|
232
|
-
"LDM: The file lambda debug config file '%s' was not found.",
|
|
233
|
-
LAMBDA_DEBUG_MODE_CONFIG_PATH,
|
|
234
|
-
)
|
|
235
|
-
except IsADirectoryError:
|
|
236
|
-
LOG.error(
|
|
237
|
-
"LDM: Expected a lambda debug config file but found a directory at '%s'.",
|
|
238
|
-
LAMBDA_DEBUG_MODE_CONFIG_PATH,
|
|
239
|
-
)
|
|
240
|
-
except PermissionError:
|
|
241
|
-
LOG.error(
|
|
242
|
-
"LDM: Permission denied while trying to read the lambda debug config file '%s'.",
|
|
243
|
-
LAMBDA_DEBUG_MODE_CONFIG_PATH,
|
|
244
|
-
)
|
|
245
|
-
except Exception as ex:
|
|
246
|
-
LOG.error(
|
|
247
|
-
"LDM: An unexpected error occurred while reading lambda debug config '%s': '%s'",
|
|
248
|
-
LAMBDA_DEBUG_MODE_CONFIG_PATH,
|
|
249
|
-
ex,
|
|
250
|
-
)
|
|
251
|
-
|
|
252
|
-
if not yaml_configuration_string:
|
|
253
|
-
return
|
|
254
|
-
|
|
255
|
-
config = parse_ldm_config(yaml_configuration_string)
|
|
256
|
-
if config is not None:
|
|
257
|
-
LDM.remove_all_configurations()
|
|
258
|
-
for qualified_lambda_arn, ldm_config in config.functions.items():
|
|
259
|
-
LDM.add_configuration(
|
|
260
|
-
config=LambdaFunctionDebugConfig(
|
|
261
|
-
qualified_lambda_arn=qualified_lambda_arn,
|
|
262
|
-
port=ldm_config.debug_port,
|
|
263
|
-
enforce_timeouts=ldm_config.enforce_timeouts,
|
|
264
|
-
)
|
|
265
|
-
)
|
|
266
|
-
LDM.enable_configuration(qualified_lambda_arn=qualified_lambda_arn)
|
|
267
|
-
LOG.info(
|
|
268
|
-
"LDM is now enforcing the latest configuration from the LDM configuration file"
|
|
269
|
-
)
|
|
270
|
-
else:
|
|
271
|
-
LOG.warning(
|
|
272
|
-
"LDM could not load the latest Lambda debug mode configuration "
|
|
273
|
-
"due to an error; check logs for more details."
|
|
274
|
-
)
|
|
275
|
-
|
|
276
|
-
@staticmethod
|
|
277
|
-
def _config_file_epoch_last_modified_or_now() -> int:
|
|
278
|
-
try:
|
|
279
|
-
modified_time = os.path.getmtime(LAMBDA_DEBUG_MODE_CONFIG_PATH)
|
|
280
|
-
return int(modified_time)
|
|
281
|
-
except Exception as e:
|
|
282
|
-
LOG.warning("LDM could not access the configuration file: %s", e)
|
|
283
|
-
epoch_now = int(time.time())
|
|
284
|
-
return epoch_now
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
class LambdaDebugMode:
|
|
288
|
-
_mutex: Final[RLock]
|
|
289
|
-
_is_enabled: bool
|
|
290
|
-
_debug_targets: Final[dict[str, LambdaDebugTarget]]
|
|
291
|
-
_config_file_watch: Final[Optional[LDMConfigFileWatch]]
|
|
292
|
-
|
|
293
|
-
def __init__(self):
|
|
294
|
-
self._mutex = RLock()
|
|
295
|
-
self._is_enabled = bool(LAMBDA_DEBUG_MODE)
|
|
296
|
-
self._debug_targets = dict()
|
|
297
|
-
self._config_file_watch = LDMConfigFileWatch() if LAMBDA_DEBUG_MODE_CONFIG_PATH else None
|
|
298
|
-
if self._is_enabled:
|
|
299
|
-
self.start_debug_mode()
|
|
300
|
-
|
|
301
|
-
@staticmethod
|
|
302
|
-
@singleton_factory
|
|
303
|
-
def get() -> LambdaDebugMode:
|
|
304
|
-
"""Returns a singleton instance of the Lambda Debug Mode session."""
|
|
305
|
-
return LambdaDebugMode()
|
|
306
|
-
|
|
307
|
-
def start_debug_mode(self) -> None:
|
|
308
|
-
with self._mutex:
|
|
309
|
-
self._is_enabled = True
|
|
310
|
-
if self._config_file_watch:
|
|
311
|
-
self._config_file_watch.start()
|
|
312
|
-
|
|
313
|
-
def stop_debug_mode(self) -> None:
|
|
314
|
-
with self._mutex:
|
|
315
|
-
self._is_enabled = False
|
|
316
|
-
if self._config_file_watch:
|
|
317
|
-
self._config_file_watch.stop()
|
|
318
|
-
self.remove_all_configurations()
|
|
319
|
-
|
|
320
|
-
def is_enabled(self) -> bool:
|
|
321
|
-
return self._is_enabled
|
|
322
|
-
|
|
323
|
-
def add_configuration(self, config: LambdaFunctionDebugConfig) -> None:
|
|
324
|
-
with self._mutex:
|
|
325
|
-
if not self._is_enabled:
|
|
326
|
-
return
|
|
327
|
-
|
|
328
|
-
arn = config.qualified_lambda_arn
|
|
329
|
-
if existing_target := self._debug_targets.get(arn):
|
|
330
|
-
existing_target.stop_debug_enabled_execution_environment()
|
|
331
|
-
|
|
332
|
-
target = LambdaDebugTarget(lambda_function_debug_config=config)
|
|
333
|
-
self._debug_targets[arn] = target
|
|
334
|
-
|
|
335
|
-
def enable_configuration(self, qualified_lambda_arn: Arn) -> None:
|
|
336
|
-
with self._mutex:
|
|
337
|
-
if not self._is_enabled:
|
|
338
|
-
return
|
|
339
|
-
|
|
340
|
-
if target := self._debug_targets.get(qualified_lambda_arn):
|
|
341
|
-
threading.Thread(
|
|
342
|
-
target=target.start_debug_enabled_execution_environment,
|
|
343
|
-
args=(),
|
|
344
|
-
name=f"LambdaDebugTarget-start_debug_enabled_execution_environment-{qualified_lambda_arn}",
|
|
345
|
-
daemon=True,
|
|
346
|
-
).start()
|
|
347
|
-
|
|
348
|
-
def remove_configuration(self, qualified_lambda_arn: Arn) -> None:
|
|
349
|
-
with self._mutex:
|
|
350
|
-
if not self._is_enabled:
|
|
351
|
-
return
|
|
352
|
-
|
|
353
|
-
if target := self._debug_targets.pop(qualified_lambda_arn, None):
|
|
354
|
-
target.stop_debug_enabled_execution_environment()
|
|
355
|
-
|
|
356
|
-
def remove_all_configurations(self) -> None:
|
|
357
|
-
with self._mutex:
|
|
358
|
-
for target in self._debug_targets.values():
|
|
359
|
-
target.stop_debug_enabled_execution_environment()
|
|
360
|
-
self._debug_targets.clear()
|
|
361
|
-
|
|
362
|
-
def get_execution_environment(
|
|
363
|
-
self, qualified_lambda_arn: Arn, user_agent: Optional[str]
|
|
364
|
-
) -> Optional[DebugEnabledExecutionEnvironment]:
|
|
365
|
-
if not self._is_enabled:
|
|
366
|
-
return None
|
|
367
|
-
|
|
368
|
-
if target := self._debug_targets.get(qualified_lambda_arn):
|
|
369
|
-
target_user_agent = target.lambda_function_debug_config.user_agent
|
|
370
|
-
if target_user_agent is None or target_user_agent == user_agent:
|
|
371
|
-
return target.get_execution_environment()
|
|
372
|
-
return None
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
LDM: Final[LambdaDebugMode] = LambdaDebugMode.get()
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import logging
|
|
4
|
-
from typing import Optional
|
|
5
|
-
|
|
6
|
-
import yaml
|
|
7
|
-
from pydantic import BaseModel, Field, ValidationError
|
|
8
|
-
from yaml import Loader, MappingNode, MarkedYAMLError, SafeLoader
|
|
9
|
-
|
|
10
|
-
from localstack.aws.api.lambda_ import Arn
|
|
11
|
-
from localstack.services.lambda_.lambda_debug_mode.ldm_types import LDMException
|
|
12
|
-
from localstack.services.lambda_.lambda_debug_mode.ldm_utils import to_qualified_lambda_function_arn
|
|
13
|
-
|
|
14
|
-
LOG = logging.getLogger(__name__)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class PortAlreadyInUse(LDMException):
|
|
18
|
-
port_number: int
|
|
19
|
-
|
|
20
|
-
def __init__(self, port_number: int):
|
|
21
|
-
self.port_number = port_number
|
|
22
|
-
|
|
23
|
-
def __str__(self):
|
|
24
|
-
return f"PortAlreadyInUse: '{self.port_number}'"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class DuplicateLDMConfig(LDMException):
|
|
28
|
-
lambda_arn_debug_config_first: str
|
|
29
|
-
lambda_arn_debug_config_second: str
|
|
30
|
-
|
|
31
|
-
def __init__(self, lambda_arn_debug_config_first: str, lambda_arn_debug_config_second: str):
|
|
32
|
-
self.lambda_arn_debug_config_first = lambda_arn_debug_config_first
|
|
33
|
-
self.lambda_arn_debug_config_second = lambda_arn_debug_config_second
|
|
34
|
-
|
|
35
|
-
def __str__(self):
|
|
36
|
-
return (
|
|
37
|
-
f"DuplicateLDMConfig: Lambda debug configuration in '{self.lambda_arn_debug_config_first}' "
|
|
38
|
-
f"is redefined in '{self.lambda_arn_debug_config_second}'"
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
class LambdaFunctionConfig(BaseModel):
|
|
43
|
-
debug_port: Optional[int] = Field(None, alias="debug-port")
|
|
44
|
-
enforce_timeouts: bool = Field(False, alias="enforce-timeouts")
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
class LDMConfigFile(BaseModel):
|
|
48
|
-
# Bindings of Lambda function Arn and the respective debugging configuration.
|
|
49
|
-
functions: dict[Arn, LambdaFunctionConfig]
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
class _LDMConfigPostProcessingState:
|
|
53
|
-
ports_used: set[int]
|
|
54
|
-
|
|
55
|
-
def __init__(self):
|
|
56
|
-
self.ports_used = set()
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
class _SafeLoaderWithDuplicateCheck(SafeLoader):
|
|
60
|
-
def __init__(self, stream):
|
|
61
|
-
super().__init__(stream)
|
|
62
|
-
self.add_constructor(
|
|
63
|
-
yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
|
|
64
|
-
self._construct_mappings_with_duplicate_check,
|
|
65
|
-
)
|
|
66
|
-
|
|
67
|
-
@staticmethod
|
|
68
|
-
def _construct_mappings_with_duplicate_check(
|
|
69
|
-
loader: Loader, node: MappingNode, deep=False
|
|
70
|
-
) -> dict:
|
|
71
|
-
# Constructs yaml bindings, whilst checking for duplicate mapping key definitions, raising a
|
|
72
|
-
# MarkedYAMLError when one is found.
|
|
73
|
-
mapping = dict()
|
|
74
|
-
for key_node, value_node in node.value:
|
|
75
|
-
key = loader.construct_object(key_node, deep=deep)
|
|
76
|
-
if key in mapping:
|
|
77
|
-
# Create a MarkedYAMLError to indicate the duplicate key issue
|
|
78
|
-
raise MarkedYAMLError(
|
|
79
|
-
context="while constructing a mapping",
|
|
80
|
-
context_mark=node.start_mark,
|
|
81
|
-
problem=f"found duplicate key: {key}",
|
|
82
|
-
problem_mark=key_node.start_mark,
|
|
83
|
-
)
|
|
84
|
-
value = loader.construct_object(value_node, deep=deep)
|
|
85
|
-
mapping[key] = value
|
|
86
|
-
return mapping
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
def _from_yaml_string(yaml_string: str) -> Optional[LDMConfigFile]:
|
|
90
|
-
try:
|
|
91
|
-
data = yaml.load(yaml_string, _SafeLoaderWithDuplicateCheck)
|
|
92
|
-
except yaml.YAMLError as yaml_error:
|
|
93
|
-
LOG.error(
|
|
94
|
-
"Could not parse yaml LDM configuration file due to: %s",
|
|
95
|
-
yaml_error,
|
|
96
|
-
)
|
|
97
|
-
data = None
|
|
98
|
-
if not data:
|
|
99
|
-
return None
|
|
100
|
-
config = LDMConfigFile(**data)
|
|
101
|
-
return config
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
def _post_process_ldm_config_file(
|
|
105
|
-
ldm_config: LDMConfigFile,
|
|
106
|
-
post_processing_state: Optional[_LDMConfigPostProcessingState] = None,
|
|
107
|
-
) -> None:
|
|
108
|
-
post_processing_state = post_processing_state or _LDMConfigPostProcessingState()
|
|
109
|
-
lambda_function_configs = ldm_config.functions
|
|
110
|
-
lambda_arns = list(lambda_function_configs.keys())
|
|
111
|
-
for lambda_arn in lambda_arns:
|
|
112
|
-
qualified_lambda_arn = to_qualified_lambda_function_arn(lambda_arn)
|
|
113
|
-
if lambda_arn != qualified_lambda_arn:
|
|
114
|
-
if qualified_lambda_arn in lambda_function_configs:
|
|
115
|
-
raise DuplicateLDMConfig(
|
|
116
|
-
lambda_arn_debug_config_first=lambda_arn,
|
|
117
|
-
lambda_arn_debug_config_second=qualified_lambda_arn,
|
|
118
|
-
)
|
|
119
|
-
lambda_function_configs[qualified_lambda_arn] = lambda_function_configs.pop(lambda_arn)
|
|
120
|
-
|
|
121
|
-
for lambda_function_config in lambda_function_configs.values():
|
|
122
|
-
_post_process_lambda_function_config(
|
|
123
|
-
post_processing_state=post_processing_state,
|
|
124
|
-
lambda_function_config=lambda_function_config,
|
|
125
|
-
)
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
def _post_process_lambda_function_config(
|
|
129
|
-
post_processing_state: _LDMConfigPostProcessingState,
|
|
130
|
-
lambda_function_config: LambdaFunctionConfig,
|
|
131
|
-
) -> None:
|
|
132
|
-
debug_port: Optional[int] = lambda_function_config.debug_port
|
|
133
|
-
if debug_port is None:
|
|
134
|
-
return
|
|
135
|
-
if debug_port in post_processing_state.ports_used:
|
|
136
|
-
raise PortAlreadyInUse(port_number=debug_port)
|
|
137
|
-
post_processing_state.ports_used.add(debug_port)
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
def parse_ldm_config(yaml_string: str) -> Optional[LDMConfigFile]:
|
|
141
|
-
# Attempt to parse the yaml string.
|
|
142
|
-
try:
|
|
143
|
-
yaml_data = yaml.load(yaml_string, _SafeLoaderWithDuplicateCheck)
|
|
144
|
-
except yaml.YAMLError as yaml_error:
|
|
145
|
-
LOG.error(
|
|
146
|
-
"Could not parse yaml LDM configuration file due to: %s",
|
|
147
|
-
yaml_error,
|
|
148
|
-
)
|
|
149
|
-
yaml_data = None
|
|
150
|
-
if not yaml_data:
|
|
151
|
-
return None
|
|
152
|
-
|
|
153
|
-
# Attempt to build the LDMConfig object from the yaml object.
|
|
154
|
-
try:
|
|
155
|
-
config = LDMConfigFile(**yaml_data)
|
|
156
|
-
except ValidationError as validation_error:
|
|
157
|
-
validation_errors = validation_error.errors() or list()
|
|
158
|
-
error_messages = [
|
|
159
|
-
f"When parsing '{err.get('loc', '')}': {err.get('msg', str(err))}"
|
|
160
|
-
for err in validation_errors
|
|
161
|
-
]
|
|
162
|
-
LOG.error(
|
|
163
|
-
"Unable to parse LDM configuration file due to errors: %s",
|
|
164
|
-
error_messages,
|
|
165
|
-
)
|
|
166
|
-
return None
|
|
167
|
-
|
|
168
|
-
# Attempt to post_process the configuration.
|
|
169
|
-
try:
|
|
170
|
-
_post_process_ldm_config_file(config)
|
|
171
|
-
except LDMException as ldm_error:
|
|
172
|
-
LOG.error(
|
|
173
|
-
"Invalid LDM configuration due to: %s",
|
|
174
|
-
ldm_error,
|
|
175
|
-
)
|
|
176
|
-
config = None
|
|
177
|
-
|
|
178
|
-
return config
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
class LDMException(Exception): ...
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class UnknownLambdaArnFormat(LDMException):
|
|
5
|
-
unknown_lambda_arn: str
|
|
6
|
-
|
|
7
|
-
def __init__(self, unknown_lambda_arn: str):
|
|
8
|
-
self.unknown_lambda_arn = unknown_lambda_arn
|
|
9
|
-
|
|
10
|
-
def __str__(self):
|
|
11
|
-
return f"UnknownLambdaArnFormat: '{self.unknown_lambda_arn}'"
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
from localstack.aws.api.lambda_ import Arn
|
|
2
|
-
from localstack.services.lambda_.lambda_debug_mode.ldm_types import UnknownLambdaArnFormat
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
def to_qualified_lambda_function_arn(lambda_arn: Arn) -> Arn:
|
|
6
|
-
"""
|
|
7
|
-
Returns the $LATEST qualified version of a structurally unqualified version of a lambda Arn iff this
|
|
8
|
-
is detected to be structurally unqualified. Otherwise, it returns the given string.
|
|
9
|
-
Example:
|
|
10
|
-
- arn:aws:lambda:eu-central-1:000000000000:function:functionname:$LATEST ->
|
|
11
|
-
unchanged
|
|
12
|
-
|
|
13
|
-
- arn:aws:lambda:eu-central-1:000000000000:function:functionname ->
|
|
14
|
-
arn:aws:lambda:eu-central-1:000000000000:function:functionname:$LATEST
|
|
15
|
-
|
|
16
|
-
- arn:aws:lambda:eu-central-1:000000000000:function:functionname: ->
|
|
17
|
-
exception UnknownLambdaArnFormat
|
|
18
|
-
|
|
19
|
-
- arn:aws:lambda:eu-central-1:000000000000:function ->
|
|
20
|
-
exception UnknownLambdaArnFormat
|
|
21
|
-
"""
|
|
22
|
-
# TODO: consider adding arn syntax validation at this depth.
|
|
23
|
-
|
|
24
|
-
if not lambda_arn:
|
|
25
|
-
return lambda_arn
|
|
26
|
-
lambda_arn_parts = lambda_arn.split(":")
|
|
27
|
-
lambda_arn_parts_len = len(lambda_arn_parts)
|
|
28
|
-
|
|
29
|
-
# The arn is qualified and with a non-empy qualifier.
|
|
30
|
-
is_qualified = lambda_arn_parts_len == 8
|
|
31
|
-
if is_qualified and lambda_arn_parts[-1]:
|
|
32
|
-
return lambda_arn
|
|
33
|
-
|
|
34
|
-
# Unknown lambda arn format.
|
|
35
|
-
is_unqualified = lambda_arn_parts_len == 7
|
|
36
|
-
if not is_unqualified:
|
|
37
|
-
raise UnknownLambdaArnFormat(unknown_lambda_arn=lambda_arn)
|
|
38
|
-
|
|
39
|
-
# Structure-wise, the arn is missing the qualifier.
|
|
40
|
-
qualifier = "$LATEST"
|
|
41
|
-
arn_tail = f":{qualifier}" if is_unqualified else qualifier
|
|
42
|
-
qualified_lambda_arn = lambda_arn + arn_tail
|
|
43
|
-
return qualified_lambda_arn
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"localstack.cloudformation.resource_providers": ["AWS::CloudFormation::WaitConditionHandle=localstack.services.cloudformation.resource_providers.aws_cloudformation_waitconditionhandle_plugin:CloudFormationWaitConditionHandleProviderPlugin", "AWS::EC2::PrefixList=localstack.services.ec2.resource_providers.aws_ec2_prefixlist_plugin:EC2PrefixListProviderPlugin", "AWS::ResourceGroups::Group=localstack.services.resource_groups.resource_providers.aws_resourcegroups_group_plugin:ResourceGroupsGroupProviderPlugin", "AWS::EC2::Route=localstack.services.ec2.resource_providers.aws_ec2_route_plugin:EC2RouteProviderPlugin", "AWS::SSM::PatchBaseline=localstack.services.ssm.resource_providers.aws_ssm_patchbaseline_plugin:SSMPatchBaselineProviderPlugin", "AWS::Route53::HealthCheck=localstack.services.route53.resource_providers.aws_route53_healthcheck_plugin:Route53HealthCheckProviderPlugin", "AWS::SQS::Queue=localstack.services.sqs.resource_providers.aws_sqs_queue_plugin:SQSQueueProviderPlugin", "AWS::Scheduler::ScheduleGroup=localstack.services.scheduler.resource_providers.aws_scheduler_schedulegroup_plugin:SchedulerScheduleGroupProviderPlugin", "AWS::ApiGateway::Model=localstack.services.apigateway.resource_providers.aws_apigateway_model_plugin:ApiGatewayModelProviderPlugin", "AWS::S3::Bucket=localstack.services.s3.resource_providers.aws_s3_bucket_plugin:S3BucketProviderPlugin", "AWS::Lambda::LayerVersionPermission=localstack.services.lambda_.resource_providers.aws_lambda_layerversionpermission_plugin:LambdaLayerVersionPermissionProviderPlugin", "AWS::ApiGateway::UsagePlan=localstack.services.apigateway.resource_providers.aws_apigateway_usageplan_plugin:ApiGatewayUsagePlanProviderPlugin", "AWS::ApiGateway::UsagePlanKey=localstack.services.apigateway.resource_providers.aws_apigateway_usageplankey_plugin:ApiGatewayUsagePlanKeyProviderPlugin", "AWS::StepFunctions::Activity=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity_plugin:StepFunctionsActivityProviderPlugin", "AWS::EC2::SubnetRouteTableAssociation=localstack.services.ec2.resource_providers.aws_ec2_subnetroutetableassociation_plugin:EC2SubnetRouteTableAssociationProviderPlugin", "AWS::CDK::Metadata=localstack.services.cdk.resource_providers.cdk_metadata_plugin:LambdaAliasProviderPlugin", "AWS::EC2::InternetGateway=localstack.services.ec2.resource_providers.aws_ec2_internetgateway_plugin:EC2InternetGatewayProviderPlugin", "AWS::Lambda::Permission=localstack.services.lambda_.resource_providers.aws_lambda_permission_plugin:LambdaPermissionProviderPlugin", "AWS::Lambda::CodeSigningConfig=localstack.services.lambda_.resource_providers.aws_lambda_codesigningconfig_plugin:LambdaCodeSigningConfigProviderPlugin", "AWS::SSM::MaintenanceWindow=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindow_plugin:SSMMaintenanceWindowProviderPlugin", "AWS::SNS::TopicPolicy=localstack.services.sns.resource_providers.aws_sns_topicpolicy_plugin:SNSTopicPolicyProviderPlugin", "AWS::IAM::AccessKey=localstack.services.iam.resource_providers.aws_iam_accesskey_plugin:IAMAccessKeyProviderPlugin", "AWS::EC2::VPCGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_vpcgatewayattachment_plugin:EC2VPCGatewayAttachmentProviderPlugin", "AWS::Events::EventBus=localstack.services.events.resource_providers.aws_events_eventbus_plugin:EventsEventBusProviderPlugin", "AWS::IAM::Role=localstack.services.iam.resource_providers.aws_iam_role_plugin:IAMRoleProviderPlugin", "AWS::CertificateManager::Certificate=localstack.services.certificatemanager.resource_providers.aws_certificatemanager_certificate_plugin:CertificateManagerCertificateProviderPlugin", "AWS::ApiGateway::Resource=localstack.services.apigateway.resource_providers.aws_apigateway_resource_plugin:ApiGatewayResourceProviderPlugin", "AWS::SNS::Topic=localstack.services.sns.resource_providers.aws_sns_topic_plugin:SNSTopicProviderPlugin", "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::ApiGateway::Stage=localstack.services.apigateway.resource_providers.aws_apigateway_stage_plugin:ApiGatewayStageProviderPlugin", "AWS::ApiGateway::Account=localstack.services.apigateway.resource_providers.aws_apigateway_account_plugin:ApiGatewayAccountProviderPlugin", "AWS::ApiGateway::RequestValidator=localstack.services.apigateway.resource_providers.aws_apigateway_requestvalidator_plugin:ApiGatewayRequestValidatorProviderPlugin", "AWS::ApiGateway::RestApi=localstack.services.apigateway.resource_providers.aws_apigateway_restapi_plugin:ApiGatewayRestApiProviderPlugin", "AWS::EC2::Instance=localstack.services.ec2.resource_providers.aws_ec2_instance_plugin:EC2InstanceProviderPlugin", "AWS::Lambda::Version=localstack.services.lambda_.resource_providers.aws_lambda_version_plugin:LambdaVersionProviderPlugin", "AWS::EC2::SecurityGroup=localstack.services.ec2.resource_providers.aws_ec2_securitygroup_plugin:EC2SecurityGroupProviderPlugin", "AWS::SSM::MaintenanceWindowTask=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtask_plugin:SSMMaintenanceWindowTaskProviderPlugin", "AWS::SecretsManager::Secret=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secret_plugin:SecretsManagerSecretProviderPlugin", "AWS::OpenSearchService::Domain=localstack.services.opensearch.resource_providers.aws_opensearchservice_domain_plugin:OpenSearchServiceDomainProviderPlugin", "AWS::ApiGateway::Method=localstack.services.apigateway.resource_providers.aws_apigateway_method_plugin:ApiGatewayMethodProviderPlugin", "AWS::Logs::LogStream=localstack.services.logs.resource_providers.aws_logs_logstream_plugin:LogsLogStreamProviderPlugin", "AWS::KMS::Alias=localstack.services.kms.resource_providers.aws_kms_alias_plugin:KMSAliasProviderPlugin", "AWS::EC2::VPCEndpoint=localstack.services.ec2.resource_providers.aws_ec2_vpcendpoint_plugin:EC2VPCEndpointProviderPlugin", "AWS::Elasticsearch::Domain=localstack.services.opensearch.resource_providers.aws_elasticsearch_domain_plugin:ElasticsearchDomainProviderPlugin", "AWS::IAM::Group=localstack.services.iam.resource_providers.aws_iam_group_plugin:IAMGroupProviderPlugin", "AWS::ApiGateway::Deployment=localstack.services.apigateway.resource_providers.aws_apigateway_deployment_plugin:ApiGatewayDeploymentProviderPlugin", "AWS::SNS::Subscription=localstack.services.sns.resource_providers.aws_sns_subscription_plugin:SNSSubscriptionProviderPlugin", "AWS::Kinesis::StreamConsumer=localstack.services.kinesis.resource_providers.aws_kinesis_streamconsumer_plugin:KinesisStreamConsumerProviderPlugin", "AWS::EC2::VPC=localstack.services.ec2.resource_providers.aws_ec2_vpc_plugin:EC2VPCProviderPlugin", "AWS::SSM::Parameter=localstack.services.ssm.resource_providers.aws_ssm_parameter_plugin:SSMParameterProviderPlugin", "AWS::SSM::MaintenanceWindowTarget=localstack.services.ssm.resource_providers.aws_ssm_maintenancewindowtarget_plugin:SSMMaintenanceWindowTargetProviderPlugin", "AWS::StepFunctions::StateMachine=localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine_plugin:StepFunctionsStateMachineProviderPlugin", "AWS::Redshift::Cluster=localstack.services.redshift.resource_providers.aws_redshift_cluster_plugin:RedshiftClusterProviderPlugin", "AWS::Events::ApiDestination=localstack.services.events.resource_providers.aws_events_apidestination_plugin:EventsApiDestinationProviderPlugin", "AWS::ApiGateway::BasePathMapping=localstack.services.apigateway.resource_providers.aws_apigateway_basepathmapping_plugin:ApiGatewayBasePathMappingProviderPlugin", "AWS::ApiGateway::GatewayResponse=localstack.services.apigateway.resource_providers.aws_apigateway_gatewayresponse_plugin:ApiGatewayGatewayResponseProviderPlugin", "AWS::EC2::NetworkAcl=localstack.services.ec2.resource_providers.aws_ec2_networkacl_plugin:EC2NetworkAclProviderPlugin", "AWS::EC2::KeyPair=localstack.services.ec2.resource_providers.aws_ec2_keypair_plugin:EC2KeyPairProviderPlugin", "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::Events::Connection=localstack.services.events.resource_providers.aws_events_connection_plugin:EventsConnectionProviderPlugin", "AWS::EC2::Subnet=localstack.services.ec2.resource_providers.aws_ec2_subnet_plugin:EC2SubnetProviderPlugin", "AWS::EC2::TransitGatewayAttachment=localstack.services.ec2.resource_providers.aws_ec2_transitgatewayattachment_plugin:EC2TransitGatewayAttachmentProviderPlugin", "AWS::SecretsManager::SecretTargetAttachment=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_secrettargetattachment_plugin:SecretsManagerSecretTargetAttachmentProviderPlugin", "AWS::Route53::RecordSet=localstack.services.route53.resource_providers.aws_route53_recordset_plugin:Route53RecordSetProviderPlugin", "AWS::IAM::Policy=localstack.services.iam.resource_providers.aws_iam_policy_plugin:IAMPolicyProviderPlugin", "AWS::DynamoDB::GlobalTable=localstack.services.dynamodb.resource_providers.aws_dynamodb_globaltable_plugin:DynamoDBGlobalTableProviderPlugin", "AWS::IAM::User=localstack.services.iam.resource_providers.aws_iam_user_plugin:IAMUserProviderPlugin", "AWS::Lambda::EventSourceMapping=localstack.services.lambda_.resource_providers.aws_lambda_eventsourcemapping_plugin:LambdaEventSourceMappingProviderPlugin", "AWS::KMS::Key=localstack.services.kms.resource_providers.aws_kms_key_plugin:KMSKeyProviderPlugin", "AWS::Lambda::Url=localstack.services.lambda_.resource_providers.aws_lambda_url_plugin:LambdaUrlProviderPlugin", "AWS::DynamoDB::Table=localstack.services.dynamodb.resource_providers.aws_dynamodb_table_plugin:DynamoDBTableProviderPlugin", "AWS::IAM::ServiceLinkedRole=localstack.services.iam.resource_providers.aws_iam_servicelinkedrole_plugin:IAMServiceLinkedRoleProviderPlugin", "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::SecretsManager::RotationSchedule=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_rotationschedule_plugin:SecretsManagerRotationScheduleProviderPlugin", "AWS::SQS::QueuePolicy=localstack.services.sqs.resource_providers.aws_sqs_queuepolicy_plugin:SQSQueuePolicyProviderPlugin", "AWS::ApiGateway::DomainName=localstack.services.apigateway.resource_providers.aws_apigateway_domainname_plugin:ApiGatewayDomainNameProviderPlugin", "AWS::IAM::ManagedPolicy=localstack.services.iam.resource_providers.aws_iam_managedpolicy_plugin:IAMManagedPolicyProviderPlugin", "AWS::CloudFormation::Stack=localstack.services.cloudformation.resource_providers.aws_cloudformation_stack_plugin:CloudFormationStackProviderPlugin", "AWS::KinesisFirehose::DeliveryStream=localstack.services.kinesisfirehose.resource_providers.aws_kinesisfirehose_deliverystream_plugin:KinesisFirehoseDeliveryStreamProviderPlugin", "AWS::CloudWatch::CompositeAlarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_compositealarm_plugin:CloudWatchCompositeAlarmProviderPlugin", "AWS::EC2::TransitGateway=localstack.services.ec2.resource_providers.aws_ec2_transitgateway_plugin:EC2TransitGatewayProviderPlugin", "AWS::Lambda::EventInvokeConfig=localstack.services.lambda_.resource_providers.aws_lambda_eventinvokeconfig_plugin:LambdaEventInvokeConfigProviderPlugin", "AWS::ECR::Repository=localstack.services.ecr.resource_providers.aws_ecr_repository_plugin:ECRRepositoryProviderPlugin", "AWS::Logs::LogGroup=localstack.services.logs.resource_providers.aws_logs_loggroup_plugin:LogsLogGroupProviderPlugin", "AWS::Kinesis::Stream=localstack.services.kinesis.resource_providers.aws_kinesis_stream_plugin:KinesisStreamProviderPlugin", "AWS::IAM::ServerCertificate=localstack.services.iam.resource_providers.aws_iam_servercertificate_plugin:IAMServerCertificateProviderPlugin", "AWS::EC2::NatGateway=localstack.services.ec2.resource_providers.aws_ec2_natgateway_plugin:EC2NatGatewayProviderPlugin", "AWS::S3::BucketPolicy=localstack.services.s3.resource_providers.aws_s3_bucketpolicy_plugin:S3BucketPolicyProviderPlugin", "AWS::ApiGateway::ApiKey=localstack.services.apigateway.resource_providers.aws_apigateway_apikey_plugin:ApiGatewayApiKeyProviderPlugin", "AWS::EC2::RouteTable=localstack.services.ec2.resource_providers.aws_ec2_routetable_plugin:EC2RouteTableProviderPlugin", "AWS::Lambda::Alias=localstack.services.lambda_.resource_providers.lambda_alias_plugin:LambdaAliasProviderPlugin", "AWS::Events::Rule=localstack.services.events.resource_providers.aws_events_rule_plugin:EventsRuleProviderPlugin", "AWS::SecretsManager::ResourcePolicy=localstack.services.secretsmanager.resource_providers.aws_secretsmanager_resourcepolicy_plugin:SecretsManagerResourcePolicyProviderPlugin", "AWS::CloudFormation::Macro=localstack.services.cloudformation.resource_providers.aws_cloudformation_macro_plugin:CloudFormationMacroProviderPlugin", "AWS::Lambda::LayerVersion=localstack.services.lambda_.resource_providers.aws_lambda_layerversion_plugin:LambdaLayerVersionProviderPlugin", "AWS::EC2::DHCPOptions=localstack.services.ec2.resource_providers.aws_ec2_dhcpoptions_plugin:EC2DHCPOptionsProviderPlugin", "AWS::Scheduler::Schedule=localstack.services.scheduler.resource_providers.aws_scheduler_schedule_plugin:SchedulerScheduleProviderPlugin", "AWS::CloudWatch::Alarm=localstack.services.cloudwatch.resource_providers.aws_cloudwatch_alarm_plugin:CloudWatchAlarmProviderPlugin"], "localstack.openapi.spec": ["localstack=localstack.plugins:CoreOASPlugin"], "localstack.hooks.on_infra_start": ["delete_cached_certificate=localstack.plugins:delete_cached_certificate", "deprecation_warnings=localstack.plugins:deprecation_warnings", "setup_dns_configuration_on_host=localstack.dns.plugins:setup_dns_configuration_on_host", "start_dns_server=localstack.dns.plugins:start_dns_server", "_patch_botocore_endpoint_in_memory=localstack.aws.client:_patch_botocore_endpoint_in_memory", "_patch_botocore_json_parser=localstack.aws.client:_patch_botocore_json_parser", "_patch_cbor2=localstack.aws.client:_patch_cbor2", "_publish_config_as_analytics_event=localstack.runtime.analytics:_publish_config_as_analytics_event", "_publish_container_info=localstack.runtime.analytics:_publish_container_info", "conditionally_enable_debugger=localstack.dev.debugger.plugins:conditionally_enable_debugger", "register_cloudformation_deploy_ui=localstack.services.cloudformation.plugins:register_cloudformation_deploy_ui", "apply_runtime_patches=localstack.runtime.patches:apply_runtime_patches", "init_response_mutation_handler=localstack.aws.handlers.response:init_response_mutation_handler", "_run_init_scripts_on_start=localstack.runtime.init:_run_init_scripts_on_start", "register_swagger_endpoints=localstack.http.resources.swagger.plugins:register_swagger_endpoints", "eager_load_services=localstack.services.plugins:eager_load_services", "apply_aws_runtime_patches=localstack.aws.patches:apply_aws_runtime_patches", "register_custom_endpoints=localstack.services.lambda_.plugins:register_custom_endpoints", "validate_configuration=localstack.services.lambda_.plugins:validate_configuration"], "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", "dynamodb-local/community=localstack.services.dynamodb.plugins:dynamodb_local_package", "jpype-jsonata/community=localstack.services.stepfunctions.plugins:jpype_jsonata_package", "vosk/community=localstack.services.transcribe.plugins:vosk_package", "kinesis-mock/community=localstack.services.kinesis.plugins:kinesismock_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"], "localstack.hooks.on_infra_shutdown": ["stop_server=localstack.dns.plugins:stop_server", "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", "publish_metrics=localstack.utils.analytics.metrics.publisher:publish_metrics", "_run_init_scripts_on_shutdown=localstack.runtime.init:_run_init_scripts_on_shutdown", "remove_custom_endpoints=localstack.services.lambda_.plugins:remove_custom_endpoints"], "localstack.aws.provider": ["acm:default=localstack.services.providers:acm", "apigateway:default=localstack.services.providers:apigateway", "apigateway:legacy=localstack.services.providers:apigateway_legacy", "apigateway:next_gen=localstack.services.providers:apigateway_next_gen", "config:default=localstack.services.providers:awsconfig", "cloudformation:default=localstack.services.providers:cloudformation", "cloudformation:engine-v2=localstack.services.providers:cloudformation_v2", "cloudwatch:default=localstack.services.providers:cloudwatch", "cloudwatch:v1=localstack.services.providers:cloudwatch_v1", "cloudwatch:v2=localstack.services.providers:cloudwatch_v2", "dynamodb:default=localstack.services.providers:dynamodb", "dynamodb:v2=localstack.services.providers:dynamodb_v2", "dynamodbstreams:default=localstack.services.providers:dynamodbstreams", "dynamodbstreams:v2=localstack.services.providers:dynamodbstreams_v2", "ec2:default=localstack.services.providers:ec2", "es:default=localstack.services.providers:es", "events:default=localstack.services.providers:events", "events:legacy=localstack.services.providers:events_legacy", "events:v1=localstack.services.providers:events_v1", "events:v2=localstack.services.providers:events_v2", "firehose:default=localstack.services.providers:firehose", "iam:default=localstack.services.providers:iam", "kinesis:default=localstack.services.providers:kinesis", "kms:default=localstack.services.providers:kms", "lambda:default=localstack.services.providers:lambda_", "lambda:asf=localstack.services.providers:lambda_asf", "lambda:v2=localstack.services.providers:lambda_v2", "logs:default=localstack.services.providers:logs", "opensearch:default=localstack.services.providers:opensearch", "redshift:default=localstack.services.providers:redshift", "resource-groups:default=localstack.services.providers:resource_groups", "resourcegroupstaggingapi:default=localstack.services.providers:resourcegroupstaggingapi", "route53:default=localstack.services.providers:route53", "route53resolver:default=localstack.services.providers:route53resolver", "s3:default=localstack.services.providers:s3", "s3control:default=localstack.services.providers:s3control", "scheduler:default=localstack.services.providers:scheduler", "secretsmanager:default=localstack.services.providers:secretsmanager", "ses:default=localstack.services.providers:ses", "sns:default=localstack.services.providers:sns", "sqs:default=localstack.services.providers:sqs", "ssm:default=localstack.services.providers:ssm", "stepfunctions:default=localstack.services.providers:stepfunctions", "stepfunctions:v2=localstack.services.providers:stepfunctions_v2", "sts:default=localstack.services.providers:sts", "support:default=localstack.services.providers:support", "swf:default=localstack.services.providers:swf", "transcribe:default=localstack.services.providers:transcribe"], "localstack.runtime.components": ["aws=localstack.aws.components:AwsComponents"], "localstack.hooks.configure_localstack_container": ["_mount_machine_file=localstack.utils.analytics.metadata:_mount_machine_file"], "localstack.hooks.prepare_host": ["prepare_host_machine_id=localstack.utils.analytics.metadata:prepare_host_machine_id"], "localstack.runtime.server": ["hypercorn=localstack.runtime.server.plugins:HypercornRuntimeServerPlugin", "twisted=localstack.runtime.server.plugins:TwistedRuntimeServerPlugin"], "localstack.lambda.runtime_executor": ["docker=localstack.services.lambda_.invocation.plugins:DockerRuntimeExecutorPlugin"], "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"]}
|
|
File without changes
|
|
File without changes
|
{localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack-supervisor
RENAMED
|
File without changes
|
{localstack_core-4.6.1.dev60.data → localstack_core-4.10.1.dev12.data}/scripts/localstack.bat
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{localstack_core-4.6.1.dev60.dist-info → localstack_core-4.10.1.dev12.dist-info}/top_level.txt
RENAMED
|
File without changes
|