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
localstack/dns/server.py
CHANGED
|
@@ -5,12 +5,13 @@ import os
|
|
|
5
5
|
import re
|
|
6
6
|
import textwrap
|
|
7
7
|
import threading
|
|
8
|
+
from collections.abc import Iterable
|
|
8
9
|
from datetime import datetime
|
|
9
10
|
from functools import cache
|
|
10
11
|
from ipaddress import IPv4Address, IPv4Interface
|
|
11
12
|
from pathlib import Path
|
|
12
13
|
from socket import AddressFamily
|
|
13
|
-
from typing import
|
|
14
|
+
from typing import Literal
|
|
14
15
|
|
|
15
16
|
import psutil
|
|
16
17
|
from cachetools import TTLCache, cached
|
|
@@ -90,7 +91,7 @@ THREAD_LOCAL = threading.local()
|
|
|
90
91
|
|
|
91
92
|
# Type of the value given by DNSHandler.client_address
|
|
92
93
|
# in the form (ip, port) e.g. ("127.0.0.1", 58291)
|
|
93
|
-
ClientAddress =
|
|
94
|
+
ClientAddress = tuple[str, int]
|
|
94
95
|
|
|
95
96
|
psutil_cache = TTLCache(maxsize=100, ttl=10)
|
|
96
97
|
|
|
@@ -253,7 +254,7 @@ class NonLoggingHandler(DNSHandler):
|
|
|
253
254
|
THREAD_LOCAL.client_address = self.client_address
|
|
254
255
|
THREAD_LOCAL.server = self.server
|
|
255
256
|
THREAD_LOCAL.request = self.request
|
|
256
|
-
return super(
|
|
257
|
+
return super().handle(*args, **kwargs)
|
|
257
258
|
except Exception:
|
|
258
259
|
pass
|
|
259
260
|
|
|
@@ -444,13 +445,22 @@ class Resolver(DnsServerProtocol):
|
|
|
444
445
|
return True
|
|
445
446
|
return False
|
|
446
447
|
|
|
448
|
+
def _find_matching_aliases(self, question: DNSQuestion) -> list[AliasTarget] | None:
|
|
449
|
+
"""
|
|
450
|
+
Find aliases matching the question, supporting wildcards.
|
|
451
|
+
"""
|
|
452
|
+
qlabel = DNSLabel(to_bytes(question.qname))
|
|
453
|
+
qtype = RecordType[QTYPE[question.qtype]]
|
|
454
|
+
for (label, rtype), targets in self.aliases.items():
|
|
455
|
+
if rtype == qtype and qlabel.matchWildcard(label):
|
|
456
|
+
return targets
|
|
457
|
+
return None
|
|
458
|
+
|
|
447
459
|
def _resolve_alias(
|
|
448
460
|
self, request: DNSRecord, reply: DNSRecord, client_address: ClientAddress
|
|
449
461
|
) -> bool:
|
|
450
462
|
if request.q.qtype in (QTYPE.A, QTYPE.AAAA, QTYPE.CNAME):
|
|
451
|
-
|
|
452
|
-
# check if we have aliases defined for our given qname/qtype pair
|
|
453
|
-
if aliases := self.aliases.get(key):
|
|
463
|
+
if aliases := self._find_matching_aliases(request.q):
|
|
454
464
|
for alias in aliases:
|
|
455
465
|
# if there is no health check, or the healthcheck is successful, we will consider this alias
|
|
456
466
|
# take the first alias passing this check
|
localstack/http/dispatcher.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from json import JSONEncoder
|
|
2
|
-
from typing import Type
|
|
3
2
|
|
|
4
3
|
from rolo.routing.handler import Handler, ResultValue
|
|
5
4
|
from rolo.routing.handler import handler_dispatcher as _handler_dispatcher
|
|
@@ -14,7 +13,7 @@ __all__ = [
|
|
|
14
13
|
]
|
|
15
14
|
|
|
16
15
|
|
|
17
|
-
def handler_dispatcher(json_encoder:
|
|
16
|
+
def handler_dispatcher(json_encoder: type[JSONEncoder] = None) -> Dispatcher[Handler]:
|
|
18
17
|
"""
|
|
19
18
|
Replacement for ``rolo.dispatcher.handler_dispatcher`` that uses by default LocalStack's CustomEncoder for
|
|
20
19
|
serializing JSON documents.
|
localstack/http/response.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from json import JSONEncoder
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
from rolo import Response as RoloResponse
|
|
5
5
|
|
|
@@ -11,7 +11,7 @@ class Response(RoloResponse):
|
|
|
11
11
|
An HTTP Response object, which simply extends werkzeug's Response object with a few convenience methods.
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
|
-
def set_json(self, doc: Any, cls:
|
|
14
|
+
def set_json(self, doc: Any, cls: type[JSONEncoder] = CustomEncoder):
|
|
15
15
|
"""
|
|
16
16
|
Serializes the given dictionary using localstack's ``CustomEncoder`` into a json response, and sets the
|
|
17
17
|
mimetype automatically to ``application/json``.
|
localstack/http/router.py
CHANGED
localstack/http/trace.py
CHANGED
|
@@ -2,7 +2,8 @@ import dataclasses
|
|
|
2
2
|
import inspect
|
|
3
3
|
import logging
|
|
4
4
|
import time
|
|
5
|
-
from
|
|
5
|
+
from collections.abc import Callable
|
|
6
|
+
from typing import Any
|
|
6
7
|
|
|
7
8
|
from rolo import Response
|
|
8
9
|
from rolo.gateway import ExceptionHandler, Handler, HandlerChain, RequestContext
|
localstack/logging/format.py
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import logging
|
|
4
4
|
import re
|
|
5
5
|
from functools import lru_cache
|
|
6
|
-
from typing import Any
|
|
6
|
+
from typing import Any
|
|
7
7
|
|
|
8
8
|
from localstack.utils.numbers import format_bytes
|
|
9
9
|
from localstack.utils.strings import to_bytes
|
|
@@ -32,7 +32,7 @@ class DefaultFormatter(logging.Formatter):
|
|
|
32
32
|
"""
|
|
33
33
|
|
|
34
34
|
def __init__(self, fmt=LOG_FORMAT, datefmt=LOG_DATE_FORMAT):
|
|
35
|
-
super(
|
|
35
|
+
super().__init__(fmt=fmt, datefmt=datefmt)
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
class AddFormattedAttributes(logging.Filter):
|
|
@@ -48,7 +48,7 @@ class AddFormattedAttributes(logging.Filter):
|
|
|
48
48
|
max_thread_len: int
|
|
49
49
|
|
|
50
50
|
def __init__(self, max_name_len: int = None, max_thread_len: int = None):
|
|
51
|
-
super(
|
|
51
|
+
super().__init__()
|
|
52
52
|
self.max_name_len = max_name_len if max_name_len else MAX_NAME_LEN
|
|
53
53
|
self.max_thread_len = max_thread_len if max_thread_len else MAX_THREAD_NAME_LEN
|
|
54
54
|
|
|
@@ -75,7 +75,7 @@ class MaskSensitiveInputFilter(logging.Filter):
|
|
|
75
75
|
patterns: list[tuple[re.Pattern[bytes], bytes]]
|
|
76
76
|
|
|
77
77
|
def __init__(self, sensitive_keys: list[str]):
|
|
78
|
-
super(
|
|
78
|
+
super().__init__()
|
|
79
79
|
|
|
80
80
|
self.patterns = [
|
|
81
81
|
(re.compile(to_bytes(rf'"{key}":\s*"[^"]+"')), to_bytes(f'"{key}": "******"'))
|
|
@@ -173,8 +173,8 @@ class AwsTraceLoggingFormatter(TraceLoggingFormatter):
|
|
|
173
173
|
def __init__(self):
|
|
174
174
|
super().__init__()
|
|
175
175
|
|
|
176
|
-
def _copy_service_dict(self, service_dict:
|
|
177
|
-
if not isinstance(service_dict,
|
|
176
|
+
def _copy_service_dict(self, service_dict: dict) -> dict:
|
|
177
|
+
if not isinstance(service_dict, dict):
|
|
178
178
|
return service_dict
|
|
179
179
|
result = {}
|
|
180
180
|
for key, value in service_dict.items():
|
localstack/packages/api.py
CHANGED
|
@@ -3,10 +3,11 @@ import functools
|
|
|
3
3
|
import logging
|
|
4
4
|
import os
|
|
5
5
|
from collections import defaultdict
|
|
6
|
+
from collections.abc import Callable
|
|
6
7
|
from enum import Enum
|
|
7
8
|
from inspect import getmodule
|
|
8
|
-
from threading import RLock
|
|
9
|
-
from typing import Any,
|
|
9
|
+
from threading import Lock, RLock
|
|
10
|
+
from typing import Any, Generic, ParamSpec, TypeVar
|
|
10
11
|
|
|
11
12
|
from plux import Plugin, PluginManager, PluginSpec # type: ignore
|
|
12
13
|
|
|
@@ -56,7 +57,7 @@ class PackageInstaller(abc.ABC):
|
|
|
56
57
|
multiple versions).
|
|
57
58
|
"""
|
|
58
59
|
|
|
59
|
-
def __init__(self, name: str, version: str, install_lock:
|
|
60
|
+
def __init__(self, name: str, version: str, install_lock: Lock | None = None):
|
|
60
61
|
"""
|
|
61
62
|
:param name: technical package name, f.e. "opensearch"
|
|
62
63
|
:param version: version of the package to install
|
|
@@ -70,7 +71,7 @@ class PackageInstaller(abc.ABC):
|
|
|
70
71
|
self.install_lock = install_lock or RLock()
|
|
71
72
|
self._setup_for_target: dict[InstallTarget, bool] = defaultdict(lambda: False)
|
|
72
73
|
|
|
73
|
-
def install(self, target:
|
|
74
|
+
def install(self, target: InstallTarget | None = None) -> None:
|
|
74
75
|
"""
|
|
75
76
|
Performs the package installation.
|
|
76
77
|
|
|
@@ -210,7 +211,7 @@ class Package(abc.ABC, Generic[T]):
|
|
|
210
211
|
"""
|
|
211
212
|
return self.get_installer(version).get_installed_dir()
|
|
212
213
|
|
|
213
|
-
def install(self, version: str | None = None, target:
|
|
214
|
+
def install(self, version: str | None = None, target: InstallTarget | None = None) -> None:
|
|
214
215
|
"""
|
|
215
216
|
Installs the package in the given version in the preferred target location.
|
|
216
217
|
:param version: version of the package to install. If None, the default version of the package will be used.
|
|
@@ -219,7 +220,7 @@ class Package(abc.ABC, Generic[T]):
|
|
|
219
220
|
"""
|
|
220
221
|
self.get_installer(version).install(target)
|
|
221
222
|
|
|
222
|
-
@functools.lru_cache
|
|
223
|
+
@functools.lru_cache
|
|
223
224
|
def get_installer(self, version: str | None = None) -> T:
|
|
224
225
|
"""
|
|
225
226
|
Returns the installer instance for a specific version of the package.
|
|
@@ -237,7 +238,7 @@ class Package(abc.ABC, Generic[T]):
|
|
|
237
238
|
raise NoSuchVersionException(package=self.name, version=version)
|
|
238
239
|
return self._get_installer(version)
|
|
239
240
|
|
|
240
|
-
def get_versions(self) ->
|
|
241
|
+
def get_versions(self) -> list[str]:
|
|
241
242
|
"""
|
|
242
243
|
:return: List of all versions available for this package.
|
|
243
244
|
"""
|
|
@@ -262,7 +263,7 @@ class MultiPackageInstaller(PackageInstaller):
|
|
|
262
263
|
PackageInstaller implementation which composes of multiple package installers.
|
|
263
264
|
"""
|
|
264
265
|
|
|
265
|
-
def __init__(self, name: str, version: str, package_installer:
|
|
266
|
+
def __init__(self, name: str, version: str, package_installer: list[PackageInstaller]):
|
|
266
267
|
"""
|
|
267
268
|
:param name: of the (multi-)package installer
|
|
268
269
|
:param version: of this (multi-)package installer
|
|
@@ -274,7 +275,7 @@ class MultiPackageInstaller(PackageInstaller):
|
|
|
274
275
|
assert len(package_installer) > 0
|
|
275
276
|
self.package_installer = package_installer
|
|
276
277
|
|
|
277
|
-
def install(self, target:
|
|
278
|
+
def install(self, target: InstallTarget | None = None) -> None:
|
|
278
279
|
"""
|
|
279
280
|
Installs the different packages this installer is composed of.
|
|
280
281
|
|
|
@@ -317,7 +318,7 @@ class PackagesPlugin(Plugin): # type: ignore[misc]
|
|
|
317
318
|
self,
|
|
318
319
|
name: str,
|
|
319
320
|
scope: str,
|
|
320
|
-
get_package: Callable[[], Package[PackageInstaller] |
|
|
321
|
+
get_package: Callable[[], Package[PackageInstaller] | list[Package[PackageInstaller]]],
|
|
321
322
|
should_load: Callable[[], bool] | None = None,
|
|
322
323
|
) -> None:
|
|
323
324
|
super().__init__()
|
|
@@ -356,7 +357,7 @@ class PackagesPluginManager(PluginManager[PackagesPlugin]): # type: ignore[misc
|
|
|
356
357
|
)
|
|
357
358
|
|
|
358
359
|
def get_packages(
|
|
359
|
-
self, package_names: list[str], version:
|
|
360
|
+
self, package_names: list[str], version: str | None = None
|
|
360
361
|
) -> list[Package[PackageInstaller]]:
|
|
361
362
|
# Plugin names are unique, but there could be multiple packages with the same name in different scopes
|
|
362
363
|
plugin_specs_per_name = defaultdict(list)
|
|
@@ -390,7 +391,7 @@ T2 = TypeVar("T2")
|
|
|
390
391
|
def package(
|
|
391
392
|
name: str | None = None,
|
|
392
393
|
scope: str = "community",
|
|
393
|
-
should_load:
|
|
394
|
+
should_load: Callable[[], bool] | None = None,
|
|
394
395
|
) -> Callable[[Callable[[], Package[Any] | list[Package[Any]]]], PluginSpec]:
|
|
395
396
|
"""
|
|
396
397
|
Decorator for marking methods that create Package instances as a PackagePlugin.
|
localstack/packages/core.py
CHANGED
|
@@ -4,7 +4,7 @@ import re
|
|
|
4
4
|
from abc import ABC
|
|
5
5
|
from functools import lru_cache
|
|
6
6
|
from sys import version_info
|
|
7
|
-
from typing import Any
|
|
7
|
+
from typing import Any
|
|
8
8
|
|
|
9
9
|
import requests
|
|
10
10
|
|
|
@@ -190,7 +190,7 @@ class GitHubReleaseInstaller(PermissionDownloadInstaller):
|
|
|
190
190
|
f"https://api.github.com/repos/{github_slug}/releases/tags/{self.version}"
|
|
191
191
|
)
|
|
192
192
|
|
|
193
|
-
@lru_cache
|
|
193
|
+
@lru_cache
|
|
194
194
|
def _get_download_url(self) -> str:
|
|
195
195
|
asset_name = self._get_github_asset_name()
|
|
196
196
|
# try to use a token when calling the GH API for increased API rate limits
|
|
@@ -238,7 +238,7 @@ class NodePackageInstaller(ExecutableInstaller):
|
|
|
238
238
|
self,
|
|
239
239
|
package_name: str,
|
|
240
240
|
version: str,
|
|
241
|
-
package_spec:
|
|
241
|
+
package_spec: str | None = None,
|
|
242
242
|
main_module: str = "main.js",
|
|
243
243
|
):
|
|
244
244
|
"""
|
|
@@ -404,7 +404,7 @@ class MavenPackageInstaller(MavenDownloadInstaller):
|
|
|
404
404
|
super()._install(target)
|
|
405
405
|
|
|
406
406
|
|
|
407
|
-
def parse_maven_package_url(package_url: str) ->
|
|
407
|
+
def parse_maven_package_url(package_url: str) -> tuple[str, str, str]:
|
|
408
408
|
"""Example: parse_maven_package_url("pkg:maven/software.amazon.event.ruler/event-ruler@1.7.3")
|
|
409
409
|
-> software.amazon.event.ruler, event-ruler, 1.7.3
|
|
410
410
|
"""
|
localstack/packages/debugpy.py
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
3
1
|
from localstack.packages import InstallTarget, Package, PackageInstaller
|
|
4
2
|
from localstack.utils.run import run
|
|
5
3
|
|
|
@@ -8,7 +6,7 @@ class DebugPyPackage(Package["DebugPyPackageInstaller"]):
|
|
|
8
6
|
def __init__(self) -> None:
|
|
9
7
|
super().__init__("DebugPy", "latest")
|
|
10
8
|
|
|
11
|
-
def get_versions(self) ->
|
|
9
|
+
def get_versions(self) -> list[str]:
|
|
12
10
|
return ["latest"]
|
|
13
11
|
|
|
14
12
|
def _get_installer(self, version: str) -> "DebugPyPackageInstaller":
|
localstack/packages/ffmpeg.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import os
|
|
2
|
-
from typing import List
|
|
3
2
|
|
|
4
3
|
from localstack.packages import Package
|
|
5
4
|
from localstack.packages.core import ArchiveDownloadAndExtractInstaller
|
|
@@ -21,7 +20,7 @@ class FfmpegPackage(Package["FfmpegPackageInstaller"]):
|
|
|
21
20
|
def _get_installer(self, version: str) -> "FfmpegPackageInstaller":
|
|
22
21
|
return FfmpegPackageInstaller(version)
|
|
23
22
|
|
|
24
|
-
def get_versions(self) ->
|
|
23
|
+
def get_versions(self) -> list[str]:
|
|
25
24
|
return ["7.1"]
|
|
26
25
|
|
|
27
26
|
|
localstack/packages/java.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import os
|
|
3
|
-
from typing import List
|
|
4
3
|
|
|
5
4
|
import requests
|
|
6
5
|
|
|
@@ -23,6 +22,7 @@ JAVA_VERSIONS = {
|
|
|
23
22
|
"11": "11.0.25+9",
|
|
24
23
|
"17": "17.0.13+11",
|
|
25
24
|
"21": "21.0.5+11",
|
|
25
|
+
"24": "24.0.1+9",
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
|
|
@@ -115,23 +115,49 @@ class JavaPackageInstaller(ArchiveDownloadAndExtractInstaller):
|
|
|
115
115
|
|
|
116
116
|
# Build a custom JRE with only the necessary bits to minimise disk footprint
|
|
117
117
|
LOG.debug("Optimising JRE installation")
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
|
|
119
|
+
base_modules = [
|
|
120
120
|
# Required modules
|
|
121
|
-
"java.base,
|
|
122
|
-
"java.
|
|
121
|
+
"java.base",
|
|
122
|
+
"java.desktop",
|
|
123
|
+
"java.instrument",
|
|
124
|
+
"java.management",
|
|
125
|
+
"java.naming",
|
|
126
|
+
"java.scripting",
|
|
127
|
+
"java.sql",
|
|
128
|
+
"java.xml",
|
|
129
|
+
"jdk.compiler",
|
|
123
130
|
# jdk.unsupported contains sun.misc.Unsafe which is required by some dependencies
|
|
124
|
-
"jdk.unsupported,
|
|
131
|
+
"jdk.unsupported",
|
|
125
132
|
# Additional cipher suites
|
|
126
|
-
"jdk.crypto.cryptoki,
|
|
133
|
+
"jdk.crypto.cryptoki",
|
|
127
134
|
# Archive support
|
|
128
|
-
"jdk.zipfs,
|
|
135
|
+
"jdk.zipfs",
|
|
129
136
|
# Required by MQ broker
|
|
130
|
-
"jdk.httpserver,
|
|
137
|
+
"jdk.httpserver",
|
|
138
|
+
"jdk.management",
|
|
139
|
+
"jdk.management.agent",
|
|
131
140
|
# Required by Spark and Hadoop
|
|
132
|
-
"java.security.jgss,
|
|
141
|
+
"java.security.jgss",
|
|
142
|
+
"jdk.security.auth",
|
|
143
|
+
# Include required locales
|
|
144
|
+
"jdk.localedata",
|
|
145
|
+
]
|
|
146
|
+
|
|
147
|
+
# Add version-specific modules, not all versions require/support the same set
|
|
148
|
+
version_specific_modules = {
|
|
149
|
+
"24": ["jdk.incubator.vector"], # Required for Trino latest version
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
modules = base_modules + version_specific_modules.get(self.version, [])
|
|
153
|
+
modules_str = ",".join(modules)
|
|
154
|
+
|
|
155
|
+
cmd = (
|
|
156
|
+
"bin/jlink "
|
|
157
|
+
# Add modules
|
|
158
|
+
f"--add-modules {modules_str} "
|
|
133
159
|
# Include required locales
|
|
134
|
-
"
|
|
160
|
+
"--include-locales en "
|
|
135
161
|
# Supplementary args
|
|
136
162
|
"--compress 2 --strip-debug --no-header-files --no-man-pages "
|
|
137
163
|
# Output directory
|
|
@@ -198,7 +224,7 @@ class JavaPackage(Package[JavaPackageInstaller]):
|
|
|
198
224
|
def __init__(self, default_version: str = DEFAULT_JAVA_VERSION):
|
|
199
225
|
super().__init__(name="Java", default_version=default_version)
|
|
200
226
|
|
|
201
|
-
def get_versions(self) ->
|
|
227
|
+
def get_versions(self) -> list[str]:
|
|
202
228
|
return list(JAVA_VERSIONS.keys())
|
|
203
229
|
|
|
204
230
|
def _get_installer(self, version: str) -> JavaPackageInstaller:
|
localstack/packages/plugins.py
CHANGED
|
@@ -5,14 +5,6 @@ from localstack.packages.api import Package, package
|
|
|
5
5
|
if TYPE_CHECKING:
|
|
6
6
|
from localstack.packages.ffmpeg import FfmpegPackageInstaller
|
|
7
7
|
from localstack.packages.java import JavaPackageInstaller
|
|
8
|
-
from localstack.packages.terraform import TerraformPackageInstaller
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
@package(name="terraform")
|
|
12
|
-
def terraform_package() -> Package["TerraformPackageInstaller"]:
|
|
13
|
-
from .terraform import terraform_package
|
|
14
|
-
|
|
15
|
-
return terraform_package
|
|
16
8
|
|
|
17
9
|
|
|
18
10
|
@package(name="ffmpeg")
|
localstack/runtime/analytics.py
CHANGED
|
@@ -11,6 +11,7 @@ TRACKED_ENV_VAR = [
|
|
|
11
11
|
"ACTIVATE_PRO",
|
|
12
12
|
"ALLOW_NONSTANDARD_REGIONS",
|
|
13
13
|
"BEDROCK_PREWARM",
|
|
14
|
+
"CFN_IGNORE_UNSUPPORTED_RESOURCE_TYPES",
|
|
14
15
|
"CLOUDFRONT_LAMBDA_EDGE",
|
|
15
16
|
"CONTAINER_RUNTIME",
|
|
16
17
|
"DEBUG",
|
|
@@ -53,6 +54,7 @@ TRACKED_ENV_VAR = [
|
|
|
53
54
|
"LAMBDA_RUNTIME_ENVIRONMENT_TIMEOUT",
|
|
54
55
|
"LEGACY_EDGE_PROXY", # Not functional; deprecated in 1.0.0, removed in 2.0.0
|
|
55
56
|
"LS_LOG",
|
|
57
|
+
"LOCALSTACK_K8S_DEPLOYMENT_METHOD",
|
|
56
58
|
"MOCK_UNIMPLEMENTED", # Not functional; deprecated in 1.3.0, removed in 3.0.0
|
|
57
59
|
"OPENSEARCH_ENDPOINT_STRATEGY",
|
|
58
60
|
"PERSISTENCE",
|
|
@@ -78,6 +80,7 @@ PRESENCE_ENV_VAR = [
|
|
|
78
80
|
"HOSTNAME_FROM_LAMBDA",
|
|
79
81
|
"HOST_TMP_FOLDER", # Not functional; deprecated in 1.0.0, removed in 2.0.0
|
|
80
82
|
"INIT_SCRIPTS_PATH", # Not functional; deprecated in 1.1.0, removed in 2.0.0
|
|
83
|
+
"KUBERNETES_SERVICE_HOST",
|
|
81
84
|
"LAMBDA_DEBUG_MODE_CONFIG_PATH",
|
|
82
85
|
"LEGACY_DIRECTORIES", # Not functional; deprecated in 1.1.0, removed in 2.0.0
|
|
83
86
|
"LEGACY_INIT_DIR", # Not functional; deprecated in 1.1.0, removed in 2.0.0
|
localstack/runtime/hooks.py
CHANGED
localstack/runtime/init.py
CHANGED
|
@@ -7,7 +7,6 @@ import subprocess
|
|
|
7
7
|
import time
|
|
8
8
|
from enum import Enum
|
|
9
9
|
from functools import cached_property
|
|
10
|
-
from typing import Dict, List, Optional
|
|
11
10
|
|
|
12
11
|
from plux import Plugin, PluginManager
|
|
13
12
|
|
|
@@ -90,9 +89,9 @@ class ShellScriptRunner(ScriptRunner):
|
|
|
90
89
|
suffixes = [".sh"]
|
|
91
90
|
|
|
92
91
|
def run(self, path: str) -> None:
|
|
93
|
-
exit_code = subprocess.call(args=[]
|
|
92
|
+
exit_code = subprocess.call(args=[path])
|
|
94
93
|
if exit_code != 0:
|
|
95
|
-
raise OSError("Script
|
|
94
|
+
raise OSError(f"Script {path} returned a non-zero exit code {exit_code}")
|
|
96
95
|
|
|
97
96
|
|
|
98
97
|
class PythonScriptRunner(ScriptRunner):
|
|
@@ -109,7 +108,7 @@ class PythonScriptRunner(ScriptRunner):
|
|
|
109
108
|
|
|
110
109
|
|
|
111
110
|
class InitScriptManager:
|
|
112
|
-
_stage_directories:
|
|
111
|
+
_stage_directories: dict[Stage, str] = {
|
|
113
112
|
Stage.BOOT: "boot.d",
|
|
114
113
|
Stage.START: "start.d",
|
|
115
114
|
Stage.READY: "ready.d",
|
|
@@ -117,7 +116,7 @@ class InitScriptManager:
|
|
|
117
116
|
}
|
|
118
117
|
|
|
119
118
|
script_root: str
|
|
120
|
-
stage_completed:
|
|
119
|
+
stage_completed: dict[Stage, bool]
|
|
121
120
|
|
|
122
121
|
def __init__(self, script_root: str):
|
|
123
122
|
self.script_root = script_root
|
|
@@ -125,10 +124,10 @@ class InitScriptManager:
|
|
|
125
124
|
self.runner_manager: PluginManager[ScriptRunner] = PluginManager(ScriptRunner.namespace)
|
|
126
125
|
|
|
127
126
|
@cached_property
|
|
128
|
-
def scripts(self) ->
|
|
127
|
+
def scripts(self) -> dict[Stage, list[Script]]:
|
|
129
128
|
return self._find_scripts()
|
|
130
129
|
|
|
131
|
-
def get_script_runner(self, script_file: str) ->
|
|
130
|
+
def get_script_runner(self, script_file: str) -> ScriptRunner | None:
|
|
132
131
|
runners = self.runner_manager.load_all()
|
|
133
132
|
for runner in runners:
|
|
134
133
|
if runner.should_run(script_file):
|
|
@@ -138,7 +137,7 @@ class InitScriptManager:
|
|
|
138
137
|
def has_script_runner(self, script_file: str) -> bool:
|
|
139
138
|
return self.get_script_runner(script_file) is not None
|
|
140
139
|
|
|
141
|
-
def run_stage(self, stage: Stage) ->
|
|
140
|
+
def run_stage(self, stage: Stage) -> list[Script]:
|
|
142
141
|
"""
|
|
143
142
|
Runs all scripts in the given stage.
|
|
144
143
|
|
|
@@ -188,7 +187,7 @@ class InitScriptManager:
|
|
|
188
187
|
|
|
189
188
|
return scripts
|
|
190
189
|
|
|
191
|
-
def _find_scripts(self) ->
|
|
190
|
+
def _find_scripts(self) -> dict[Stage, list[Script]]:
|
|
192
191
|
scripts = {}
|
|
193
192
|
|
|
194
193
|
if self.script_root is None:
|
localstack/runtime/main.py
CHANGED
|
@@ -20,13 +20,13 @@ def print_runtime_information(in_docker: bool = False):
|
|
|
20
20
|
if in_docker:
|
|
21
21
|
try:
|
|
22
22
|
container_name = get_main_container_name()
|
|
23
|
-
print("LocalStack Docker container name:
|
|
23
|
+
print(f"LocalStack Docker container name: {container_name}")
|
|
24
24
|
inspect_result = DOCKER_CLIENT.inspect_container(container_name)
|
|
25
25
|
container_id = inspect_result["Id"]
|
|
26
|
-
print("LocalStack Docker container id:
|
|
26
|
+
print(f"LocalStack Docker container id: {container_id[:12]}")
|
|
27
27
|
image_details = DOCKER_CLIENT.inspect_image(inspect_result["Image"])
|
|
28
28
|
digests = image_details.get("RepoDigests") or ["Unavailable"]
|
|
29
|
-
print("LocalStack Docker image sha:
|
|
29
|
+
print(f"LocalStack Docker image sha: {digests[0]}")
|
|
30
30
|
except ContainerException:
|
|
31
31
|
print(
|
|
32
32
|
"LocalStack Docker container info: Failed to inspect the LocalStack docker container. "
|
|
@@ -44,10 +44,10 @@ def print_runtime_information(in_docker: bool = False):
|
|
|
44
44
|
)
|
|
45
45
|
|
|
46
46
|
if config.LOCALSTACK_BUILD_DATE:
|
|
47
|
-
print("LocalStack build date:
|
|
47
|
+
print(f"LocalStack build date: {config.LOCALSTACK_BUILD_DATE}")
|
|
48
48
|
|
|
49
49
|
if config.LOCALSTACK_BUILD_GIT_HASH:
|
|
50
|
-
print("LocalStack build git hash:
|
|
50
|
+
print(f"LocalStack build git hash: {config.LOCALSTACK_BUILD_GIT_HASH}")
|
|
51
51
|
|
|
52
52
|
print()
|
|
53
53
|
|
localstack/runtime/patches.py
CHANGED
|
@@ -38,14 +38,14 @@ def patch_urllib3_connection_pool(**constructor_kwargs):
|
|
|
38
38
|
class MyHTTPSConnectionPool(connectionpool.HTTPSConnectionPool):
|
|
39
39
|
def __init__(self, *args, **kwargs):
|
|
40
40
|
kwargs.update(constructor_kwargs)
|
|
41
|
-
super(
|
|
41
|
+
super().__init__(*args, **kwargs)
|
|
42
42
|
|
|
43
43
|
poolmanager.pool_classes_by_scheme["https"] = MyHTTPSConnectionPool
|
|
44
44
|
|
|
45
45
|
class MyHTTPConnectionPool(connectionpool.HTTPConnectionPool):
|
|
46
46
|
def __init__(self, *args, **kwargs):
|
|
47
47
|
kwargs.update(constructor_kwargs)
|
|
48
|
-
super(
|
|
48
|
+
super().__init__(*args, **kwargs)
|
|
49
49
|
|
|
50
50
|
poolmanager.pool_classes_by_scheme["http"] = MyHTTPConnectionPool
|
|
51
51
|
except Exception:
|
localstack/runtime/shutdown.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import abc
|
|
2
2
|
import json
|
|
3
|
-
from typing import Type
|
|
4
3
|
|
|
5
4
|
from apispec import APISpec
|
|
6
5
|
|
|
@@ -320,7 +319,7 @@ class _OpenApiOAS30Exporter(_BaseOpenApiExporter):
|
|
|
320
319
|
|
|
321
320
|
|
|
322
321
|
class OpenApiExporter:
|
|
323
|
-
exporters: dict[str,
|
|
322
|
+
exporters: dict[str, type[_BaseOpenApiExporter]]
|
|
324
323
|
|
|
325
324
|
def __init__(self):
|
|
326
325
|
self.exporters = {"swagger": _OpenApiSwaggerExporter, "oas30": _OpenApiOAS30Exporter}
|
|
@@ -3,7 +3,7 @@ import copy
|
|
|
3
3
|
import hashlib
|
|
4
4
|
import json
|
|
5
5
|
import logging
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import TypedDict
|
|
7
7
|
from urllib import parse as urlparse
|
|
8
8
|
|
|
9
9
|
from jsonpatch import apply_patch
|
|
@@ -93,7 +93,7 @@ class OpenAPIExt:
|
|
|
93
93
|
|
|
94
94
|
class AuthorizerConfig(TypedDict):
|
|
95
95
|
authorizer: Authorizer
|
|
96
|
-
authorization_scopes:
|
|
96
|
+
authorization_scopes: list[str] | None
|
|
97
97
|
|
|
98
98
|
|
|
99
99
|
# TODO: make the CRUD operations in this file generic for the different model types (authorizes, validators, ...)
|
|
@@ -198,11 +198,11 @@ class OpenAPISpecificationResolver:
|
|
|
198
198
|
|
|
199
199
|
return cur
|
|
200
200
|
|
|
201
|
-
def _namespaced_resolution(self, namespace: str, data:
|
|
201
|
+
def _namespaced_resolution(self, namespace: str, data: dict | list) -> dict | list:
|
|
202
202
|
with self._pathctx(namespace):
|
|
203
203
|
return self._resolve_references(data)
|
|
204
204
|
|
|
205
|
-
def _resolve_references(self, data) ->
|
|
205
|
+
def _resolve_references(self, data) -> dict | list:
|
|
206
206
|
if self._is_ref(data):
|
|
207
207
|
return self._resolve_refpath(data["$ref"])
|
|
208
208
|
|
|
@@ -367,10 +367,7 @@ def resolve_references(data: dict, rest_api_id, allow_recursive=True) -> dict:
|
|
|
367
367
|
|
|
368
368
|
def path_based_url(api_id: str, stage_name: str, path: str) -> str:
|
|
369
369
|
"""Return URL for inbound API gateway for given API ID, stage name, and path"""
|
|
370
|
-
pattern = "
|
|
371
|
-
config.external_service_url(),
|
|
372
|
-
PATH_USER_REQUEST,
|
|
373
|
-
)
|
|
370
|
+
pattern = f"{config.external_service_url()}/restapis/{{api_id}}/{{stage_name}}/{PATH_USER_REQUEST}{{path}}"
|
|
374
371
|
return pattern.format(api_id=api_id, stage_name=stage_name, path=path)
|
|
375
372
|
|
|
376
373
|
|
|
@@ -578,7 +575,7 @@ def import_api_from_openapi_spec(
|
|
|
578
575
|
|
|
579
576
|
authorizers[security_scheme_name] = authorizer
|
|
580
577
|
|
|
581
|
-
def get_authorizer(path_payload: dict) ->
|
|
578
|
+
def get_authorizer(path_payload: dict) -> AuthorizerConfig | None:
|
|
582
579
|
if not (security_schemes := path_payload.get("security")):
|
|
583
580
|
return None
|
|
584
581
|
|
|
@@ -605,7 +602,7 @@ def import_api_from_openapi_spec(
|
|
|
605
602
|
rel_path = abs_path.removeprefix(base_path)
|
|
606
603
|
return add_path_methods(rel_path, parts, parent_id=parent_id)
|
|
607
604
|
|
|
608
|
-
def add_path_methods(rel_path: str, parts:
|
|
605
|
+
def add_path_methods(rel_path: str, parts: list[str], parent_id=""):
|
|
609
606
|
rel_path = rel_path or "/"
|
|
610
607
|
child_id = ApigwResourceIdentifier(account_id, region_name, parent_id, rel_path).generate()
|
|
611
608
|
|