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,6 +1,7 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import logging
|
|
3
|
-
from
|
|
3
|
+
from collections.abc import Callable
|
|
4
|
+
from typing import Final
|
|
4
5
|
|
|
5
6
|
from botocore.exceptions import ClientError
|
|
6
7
|
from jsonpath_ng.ext import parse
|
|
@@ -189,7 +190,7 @@ def await_state_machine_version_listed(
|
|
|
189
190
|
def await_on_execution_events(
|
|
190
191
|
stepfunctions_client, execution_arn: str, check_func: Callable[[HistoryEventList], bool]
|
|
191
192
|
) -> HistoryEventList:
|
|
192
|
-
events: HistoryEventList =
|
|
193
|
+
events: HistoryEventList = []
|
|
193
194
|
|
|
194
195
|
def _run_check():
|
|
195
196
|
nonlocal events
|
|
@@ -342,7 +343,7 @@ def is_execution_logs_list_complete(
|
|
|
342
343
|
|
|
343
344
|
def _await_on_execution_log_stream_created(target_aws_client, log_group_name: str) -> str:
|
|
344
345
|
logs_client = target_aws_client.logs
|
|
345
|
-
log_stream_name =
|
|
346
|
+
log_stream_name = ""
|
|
346
347
|
|
|
347
348
|
def _run_check():
|
|
348
349
|
nonlocal log_stream_name
|
|
@@ -376,7 +377,7 @@ def await_on_execution_logs(
|
|
|
376
377
|
log_stream_name = _await_on_execution_log_stream_created(target_aws_client, log_group_name)
|
|
377
378
|
|
|
378
379
|
logs_client = target_aws_client.logs
|
|
379
|
-
events: HistoryEventList =
|
|
380
|
+
events: HistoryEventList = []
|
|
380
381
|
|
|
381
382
|
def _run_check():
|
|
382
383
|
nonlocal events
|
|
@@ -402,8 +403,8 @@ def create_state_machine_with_iam_role(
|
|
|
402
403
|
create_state_machine,
|
|
403
404
|
snapshot,
|
|
404
405
|
definition: Definition,
|
|
405
|
-
logging_configuration:
|
|
406
|
-
state_machine_name:
|
|
406
|
+
logging_configuration: LoggingConfiguration | None = None,
|
|
407
|
+
state_machine_name: str | None = None,
|
|
407
408
|
state_machine_type: StateMachineType = StateMachineType.STANDARD,
|
|
408
409
|
):
|
|
409
410
|
snf_role_arn = create_state_machine_iam_role(target_aws_client=target_aws_client)
|
|
@@ -889,7 +890,7 @@ def create_and_record_events(
|
|
|
889
890
|
stepfunctions_client=target_aws_client.stepfunctions, execution_arn=execution_arn
|
|
890
891
|
)
|
|
891
892
|
|
|
892
|
-
stepfunctions_events =
|
|
893
|
+
stepfunctions_events = []
|
|
893
894
|
|
|
894
895
|
def _get_events():
|
|
895
896
|
received = target_aws_client.sqs.receive_message(QueueUrl=queue_url)
|
|
@@ -905,7 +906,7 @@ def create_and_record_events(
|
|
|
905
906
|
|
|
906
907
|
|
|
907
908
|
def record_sqs_events(target_aws_client, queue_url, sfn_snapshot, num_events):
|
|
908
|
-
stepfunctions_events =
|
|
909
|
+
stepfunctions_events = []
|
|
909
910
|
|
|
910
911
|
def _get_events():
|
|
911
912
|
received = target_aws_client.sqs.receive_message(QueueUrl=queue_url)
|
|
@@ -916,7 +917,7 @@ def record_sqs_events(target_aws_client, queue_url, sfn_snapshot, num_events):
|
|
|
916
917
|
return len(stepfunctions_events) == num_events
|
|
917
918
|
|
|
918
919
|
poll_condition(_get_events, timeout=60)
|
|
919
|
-
stepfunctions_events.sort(key=lambda e: json.dumps(e.get("detail",
|
|
920
|
+
stepfunctions_events.sort(key=lambda e: json.dumps(e.get("detail", {})))
|
|
920
921
|
sfn_snapshot.match("stepfunctions_events", stepfunctions_events)
|
|
921
922
|
|
|
922
923
|
|
|
@@ -931,7 +932,7 @@ class SfnNoneRecursiveParallelTransformer:
|
|
|
931
932
|
@staticmethod
|
|
932
933
|
def _normalise_events(events: list[dict]) -> None:
|
|
933
934
|
start_idx = None
|
|
934
|
-
sublist =
|
|
935
|
+
sublist = []
|
|
935
936
|
in_sublist = False
|
|
936
937
|
for i, event in enumerate(events):
|
|
937
938
|
event_type = event.get("type")
|
|
@@ -9,7 +9,6 @@ import datetime
|
|
|
9
9
|
import json
|
|
10
10
|
import os
|
|
11
11
|
from pathlib import Path
|
|
12
|
-
from typing import Dict, Optional
|
|
13
12
|
|
|
14
13
|
import pytest
|
|
15
14
|
from pluggy import Result
|
|
@@ -17,7 +16,7 @@ from pytest import StashKey, TestReport
|
|
|
17
16
|
|
|
18
17
|
from localstack.testing.aws.util import is_aws_cloud
|
|
19
18
|
|
|
20
|
-
durations_key = StashKey[
|
|
19
|
+
durations_key = StashKey[dict[str, float]]()
|
|
21
20
|
"""
|
|
22
21
|
Stores phase durations on the test node between execution phases.
|
|
23
22
|
See https://docs.pytest.org/en/latest/reference/reference.html#pytest.Stash
|
|
@@ -28,14 +27,14 @@ Stores information from call execution phase about whether the test failed.
|
|
|
28
27
|
"""
|
|
29
28
|
|
|
30
29
|
|
|
31
|
-
def find_validation_data_for_item(item: pytest.Item) ->
|
|
30
|
+
def find_validation_data_for_item(item: pytest.Item) -> dict | None:
|
|
32
31
|
base_path = os.path.join(item.fspath.dirname, item.fspath.purebasename)
|
|
33
32
|
snapshot_path = f"{base_path}.validation.json"
|
|
34
33
|
|
|
35
34
|
if not os.path.exists(snapshot_path):
|
|
36
35
|
return None
|
|
37
36
|
|
|
38
|
-
with open(snapshot_path
|
|
37
|
+
with open(snapshot_path) as fd:
|
|
39
38
|
file_content = json.load(fd)
|
|
40
39
|
return file_content.get(item.nodeid)
|
|
41
40
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import logging
|
|
3
3
|
import warnings
|
|
4
|
-
from
|
|
4
|
+
from collections.abc import Callable
|
|
5
|
+
from contextlib import AbstractContextManager, contextmanager
|
|
5
6
|
from pathlib import Path
|
|
6
|
-
from typing import TYPE_CHECKING
|
|
7
|
+
from typing import TYPE_CHECKING
|
|
7
8
|
|
|
8
9
|
import aws_cdk as cdk
|
|
9
10
|
from botocore.exceptions import ClientError, WaiterError
|
|
@@ -77,9 +78,9 @@ class InfraProvisioner:
|
|
|
77
78
|
self,
|
|
78
79
|
aws_client: ServiceLevelClientFactory,
|
|
79
80
|
namespace: str,
|
|
80
|
-
base_path:
|
|
81
|
-
force_synth:
|
|
82
|
-
persist_output:
|
|
81
|
+
base_path: str | None = None,
|
|
82
|
+
force_synth: bool | None = False,
|
|
83
|
+
persist_output: bool | None = False,
|
|
83
84
|
):
|
|
84
85
|
"""
|
|
85
86
|
:param namespace: repo-unique identifier for this CDK app.
|
|
@@ -108,8 +109,8 @@ class InfraProvisioner:
|
|
|
108
109
|
|
|
109
110
|
@contextmanager
|
|
110
111
|
def provisioner(
|
|
111
|
-
self, skip_deployment:
|
|
112
|
-
) ->
|
|
112
|
+
self, skip_deployment: bool | None = False, skip_teardown: bool | None = False
|
|
113
|
+
) -> AbstractContextManager["InfraProvisioner"]:
|
|
113
114
|
"""
|
|
114
115
|
:param skip_deployment: Set to True to skip stack creation and re-use existing stack without modifications.
|
|
115
116
|
Also skips custom setup steps.
|
|
@@ -136,7 +137,7 @@ class InfraProvisioner:
|
|
|
136
137
|
else:
|
|
137
138
|
LOG.debug("Skipping teardown. Resources and stacks are not deleted.")
|
|
138
139
|
|
|
139
|
-
def provision(self, skip_deployment:
|
|
140
|
+
def provision(self, skip_deployment: bool | None = False):
|
|
140
141
|
"""
|
|
141
142
|
Execute all previously added custom provisioning steps and deploy added CDK stacks via CloudFormation.
|
|
142
143
|
|
|
@@ -299,7 +300,7 @@ class InfraProvisioner:
|
|
|
299
300
|
def add_cdk_stack(
|
|
300
301
|
self,
|
|
301
302
|
cdk_stack: cdk.Stack,
|
|
302
|
-
autoclean_buckets:
|
|
303
|
+
autoclean_buckets: bool | None = True,
|
|
303
304
|
):
|
|
304
305
|
"""
|
|
305
306
|
Register a CDK stack to be deployed in a later `InfraProvisioner.provision` call.
|
|
@@ -318,7 +319,7 @@ class InfraProvisioner:
|
|
|
318
319
|
is_env_true("TEST_CDK_FORCE_SYNTH") or self.force_synth
|
|
319
320
|
) # EXPERIMENTAL / API subject to change
|
|
320
321
|
if not template_path.exists() or should_update_template:
|
|
321
|
-
with open(template_path, "
|
|
322
|
+
with open(template_path, "w") as fd:
|
|
322
323
|
template_json = cdk.assertions.Template.from_stack(cdk_stack).to_json()
|
|
323
324
|
json.dump(template_json, fd, indent=2)
|
|
324
325
|
# add trailing newline for linter and Git compliance
|
|
@@ -3,7 +3,7 @@ import logging
|
|
|
3
3
|
import re
|
|
4
4
|
from datetime import datetime
|
|
5
5
|
from json import JSONDecodeError
|
|
6
|
-
from
|
|
6
|
+
from re import Pattern
|
|
7
7
|
|
|
8
8
|
from localstack_snapshot.snapshots.transformer import (
|
|
9
9
|
PATTERN_ISO8601,
|
|
@@ -45,12 +45,16 @@ PATTERN_KEY_ARN = re.compile(
|
|
|
45
45
|
r"arn:(aws[a-zA-Z-]*)?:([a-zA-Z0-9-_.]+)?:([^:]+)?:(\d{12})?:key/[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"
|
|
46
46
|
)
|
|
47
47
|
|
|
48
|
+
PATTERN_MRK_KEY_ARN = re.compile(
|
|
49
|
+
r"arn:(aws[a-zA-Z-]*)?:([a-zA-Z0-9-_.]+)?:([^:]+)?:(\d{12})?:key/mrk-[a-fA-F0-9]{32}"
|
|
50
|
+
)
|
|
51
|
+
|
|
48
52
|
|
|
49
53
|
# TODO: split into generic/aws and put into lib
|
|
50
54
|
class TransformerUtility:
|
|
51
55
|
@staticmethod
|
|
52
56
|
def key_value(
|
|
53
|
-
key: str, value_replacement:
|
|
57
|
+
key: str, value_replacement: str | None = None, reference_replacement: bool = True
|
|
54
58
|
):
|
|
55
59
|
"""Creates a new KeyValueBasedTransformer. If the key matches, the value will be replaced.
|
|
56
60
|
|
|
@@ -500,7 +504,7 @@ class TransformerUtility:
|
|
|
500
504
|
replacement="<stream-name>",
|
|
501
505
|
),
|
|
502
506
|
TransformerUtility.key_value(
|
|
503
|
-
"ContinuationSequenceNumber", "
|
|
507
|
+
"ContinuationSequenceNumber", "continuation_sequence_number"
|
|
504
508
|
),
|
|
505
509
|
]
|
|
506
510
|
|
|
@@ -573,6 +577,7 @@ class TransformerUtility:
|
|
|
573
577
|
TransformerUtility.key_value("CiphertextBlob", reference_replacement=False),
|
|
574
578
|
TransformerUtility.key_value("Plaintext", reference_replacement=False),
|
|
575
579
|
RegexTransformer(PATTERN_KEY_ARN, replacement="<key-arn>"),
|
|
580
|
+
RegexTransformer(PATTERN_MRK_KEY_ARN, replacement="<mrk-key-arn>"),
|
|
576
581
|
]
|
|
577
582
|
|
|
578
583
|
@staticmethod
|
|
@@ -2,7 +2,7 @@ import fnmatch
|
|
|
2
2
|
import pathlib
|
|
3
3
|
import re
|
|
4
4
|
from collections import defaultdict
|
|
5
|
-
from
|
|
5
|
+
from collections.abc import Callable, Iterable
|
|
6
6
|
|
|
7
7
|
from localstack.aws.scaffold import is_keyword
|
|
8
8
|
|
|
@@ -117,7 +117,7 @@ class Matchers:
|
|
|
117
117
|
|
|
118
118
|
def generic_service_test_matching_rule(
|
|
119
119
|
changed_file_path: str,
|
|
120
|
-
api_dependencies:
|
|
120
|
+
api_dependencies: dict[str, Iterable[str]] | None = None,
|
|
121
121
|
search_patterns: Iterable[str] = DEFAULT_SEARCH_PATTERNS,
|
|
122
122
|
test_dirs: Iterable[str] = ("tests/aws/services",),
|
|
123
123
|
) -> set[str]:
|
|
@@ -24,7 +24,7 @@ def main():
|
|
|
24
24
|
sys.exit(1)
|
|
25
25
|
|
|
26
26
|
testselection_file_path = sys.argv[1]
|
|
27
|
-
with open(testselection_file_path
|
|
27
|
+
with open(testselection_file_path) as file:
|
|
28
28
|
selected_tests = [line.strip() for line in file.readlines() if line.strip()]
|
|
29
29
|
test_files = [line.strip() for line in sys.stdin]
|
|
30
30
|
filter_test_files(test_files, selected_tests)
|
|
@@ -10,8 +10,8 @@ Optionally set the GITHUB_API_TOKEN environment variable to use the GitHub API.
|
|
|
10
10
|
import argparse
|
|
11
11
|
import os
|
|
12
12
|
import sys
|
|
13
|
+
from collections.abc import Iterable
|
|
13
14
|
from pathlib import Path
|
|
14
|
-
from typing import Iterable
|
|
15
15
|
|
|
16
16
|
from localstack.testing.testselection.git import (
|
|
17
17
|
find_merge_base,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
from
|
|
1
|
+
from collections.abc import Iterable
|
|
2
2
|
|
|
3
3
|
from localstack.testing.testselection.matching import MATCHING_RULES, MatchingRule
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
def get_affected_tests_from_changes(
|
|
7
|
-
changed_files: Iterable[str], matching_rules:
|
|
7
|
+
changed_files: Iterable[str], matching_rules: list[MatchingRule] | None = None
|
|
8
8
|
) -> list[str]:
|
|
9
9
|
"""
|
|
10
10
|
Generate test selectors based on the changed files and matching rules to apply to.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import datetime
|
|
2
2
|
import functools
|
|
3
3
|
from multiprocessing import Process
|
|
4
|
-
from typing import List
|
|
5
4
|
|
|
6
5
|
import click
|
|
7
6
|
|
|
@@ -15,7 +14,7 @@ from .publisher import AnalyticsClientPublisher
|
|
|
15
14
|
ANALYTICS_API_RESPONSE_TIMEOUT_SECS = 0.5
|
|
16
15
|
|
|
17
16
|
|
|
18
|
-
def _publish_cmd_as_analytics_event(command_name: str, params:
|
|
17
|
+
def _publish_cmd_as_analytics_event(command_name: str, params: list[str]):
|
|
19
18
|
event = Event(
|
|
20
19
|
name="cli_cmd",
|
|
21
20
|
payload={"cmd": command_name, "params": params},
|
|
@@ -28,7 +27,7 @@ def _publish_cmd_as_analytics_event(command_name: str, params: List[str]):
|
|
|
28
27
|
publisher.publish([event])
|
|
29
28
|
|
|
30
29
|
|
|
31
|
-
def _get_parent_commands(ctx: click.Context) ->
|
|
30
|
+
def _get_parent_commands(ctx: click.Context) -> list[str]:
|
|
32
31
|
parent_commands = []
|
|
33
32
|
parent = ctx.parent
|
|
34
33
|
while parent is not None:
|
|
@@ -3,7 +3,7 @@ Client for the analytics backend.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import logging
|
|
6
|
-
from typing import Any
|
|
6
|
+
from typing import Any
|
|
7
7
|
|
|
8
8
|
import requests
|
|
9
9
|
|
|
@@ -18,10 +18,10 @@ LOG = logging.getLogger(__name__)
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class SessionResponse:
|
|
21
|
-
response:
|
|
21
|
+
response: dict[str, Any]
|
|
22
22
|
status: int
|
|
23
23
|
|
|
24
|
-
def __init__(self, response:
|
|
24
|
+
def __init__(self, response: dict[str, Any], status: int = 200):
|
|
25
25
|
self.response = response
|
|
26
26
|
self.status = status
|
|
27
27
|
|
|
@@ -70,7 +70,7 @@ class AnalyticsClient:
|
|
|
70
70
|
)
|
|
71
71
|
|
|
72
72
|
# TODO: naming seems confusing since this doesn't actually append, but directly sends all passed events via HTTP
|
|
73
|
-
def append_events(self, events:
|
|
73
|
+
def append_events(self, events: list[Event]):
|
|
74
74
|
# TODO: add compression to append_events
|
|
75
75
|
# it would maybe be useful to compress analytics data, but it's unclear how that will
|
|
76
76
|
# affect performance and what the benefit is. need to measure first.
|
|
@@ -104,7 +104,7 @@ class AnalyticsClient:
|
|
|
104
104
|
# TODO: Add response type to analytics client
|
|
105
105
|
return response
|
|
106
106
|
|
|
107
|
-
def _create_headers(self) ->
|
|
107
|
+
def _create_headers(self) -> dict[str, str]:
|
|
108
108
|
return {
|
|
109
109
|
"User-Agent": "localstack/" + constants.VERSION,
|
|
110
110
|
"Localstack-Session-ID": self.localstack_session_id,
|
|
@@ -2,7 +2,6 @@ import dataclasses
|
|
|
2
2
|
import logging
|
|
3
3
|
import os
|
|
4
4
|
import platform
|
|
5
|
-
from typing import Optional
|
|
6
5
|
|
|
7
6
|
from localstack import config
|
|
8
7
|
from localstack.constants import VERSION
|
|
@@ -41,7 +40,7 @@ class ClientMetadata:
|
|
|
41
40
|
k = "*" * len(k)
|
|
42
41
|
d["api_key"] = k
|
|
43
42
|
|
|
44
|
-
return "ClientMetadata(
|
|
43
|
+
return f"ClientMetadata({d})"
|
|
45
44
|
|
|
46
45
|
|
|
47
46
|
def get_version_string() -> str:
|
|
@@ -148,7 +147,10 @@ def is_license_activated() -> bool:
|
|
|
148
147
|
|
|
149
148
|
return licensingv2.get_licensed_environment().activated
|
|
150
149
|
except Exception:
|
|
151
|
-
LOG.
|
|
150
|
+
LOG.error(
|
|
151
|
+
"Could not determine license activation status",
|
|
152
|
+
exc_info=LOG.isEnabledFor(logging.DEBUG),
|
|
153
|
+
)
|
|
152
154
|
return False
|
|
153
155
|
|
|
154
156
|
|
|
@@ -198,7 +200,7 @@ def _generate_machine_id() -> str:
|
|
|
198
200
|
return f"gen_{long_uid()[:12]}"
|
|
199
201
|
|
|
200
202
|
|
|
201
|
-
def get_api_key_or_auth_token() ->
|
|
203
|
+
def get_api_key_or_auth_token() -> str | None:
|
|
202
204
|
# TODO: this is duplicated code from ext, but should probably migrate that to localstack
|
|
203
205
|
auth_token = os.environ.get("LOCALSTACK_AUTH_TOKEN", "").strip("'\" ")
|
|
204
206
|
if auth_token:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import threading
|
|
2
2
|
from collections import defaultdict
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Any
|
|
4
|
+
from typing import Any
|
|
5
5
|
|
|
6
6
|
from localstack import config
|
|
7
7
|
|
|
@@ -38,7 +38,7 @@ class LabeledCounterPayload:
|
|
|
38
38
|
value: int
|
|
39
39
|
type: str
|
|
40
40
|
schema_version: int
|
|
41
|
-
labels: dict[str,
|
|
41
|
+
labels: dict[str, str | float]
|
|
42
42
|
|
|
43
43
|
def as_dict(self) -> dict[str, Any]:
|
|
44
44
|
payload_dict = {
|
|
@@ -66,7 +66,7 @@ class ThreadSafeCounter:
|
|
|
66
66
|
_count: int
|
|
67
67
|
|
|
68
68
|
def __init__(self):
|
|
69
|
-
super(
|
|
69
|
+
super().__init__()
|
|
70
70
|
self._mutex = threading.Lock()
|
|
71
71
|
self._count = 0
|
|
72
72
|
|
|
@@ -113,11 +113,11 @@ class Counter(Metric, ThreadSafeCounter):
|
|
|
113
113
|
def collect(self) -> list[CounterPayload]:
|
|
114
114
|
"""Collects the metric unless events are disabled."""
|
|
115
115
|
if config.DISABLE_EVENTS:
|
|
116
|
-
return
|
|
116
|
+
return []
|
|
117
117
|
|
|
118
118
|
if self._count == 0:
|
|
119
119
|
# Return an empty list if the count is 0, as there are no metrics to send to the analytics backend.
|
|
120
|
-
return
|
|
120
|
+
return []
|
|
121
121
|
|
|
122
122
|
return [
|
|
123
123
|
CounterPayload(
|
|
@@ -140,15 +140,11 @@ class LabeledCounter(Metric):
|
|
|
140
140
|
|
|
141
141
|
_type: str
|
|
142
142
|
_labels: list[str]
|
|
143
|
-
_label_values: tuple[
|
|
144
|
-
_counters_by_label_values: defaultdict[
|
|
145
|
-
tuple[Optional[Union[str, float]], ...], ThreadSafeCounter
|
|
146
|
-
]
|
|
143
|
+
_label_values: tuple[str | float | None, ...]
|
|
144
|
+
_counters_by_label_values: defaultdict[tuple[str | float | None, ...], ThreadSafeCounter]
|
|
147
145
|
|
|
148
146
|
def __init__(self, namespace: str, name: str, labels: list[str], schema_version: int = 1):
|
|
149
|
-
super(
|
|
150
|
-
namespace=namespace, name=name, schema_version=schema_version
|
|
151
|
-
)
|
|
147
|
+
super().__init__(namespace=namespace, name=name, schema_version=schema_version)
|
|
152
148
|
|
|
153
149
|
if not labels:
|
|
154
150
|
raise ValueError("At least one label is required; the labels list cannot be empty.")
|
|
@@ -164,7 +160,7 @@ class LabeledCounter(Metric):
|
|
|
164
160
|
self._counters_by_label_values = defaultdict(ThreadSafeCounter)
|
|
165
161
|
MetricRegistry().register(self)
|
|
166
162
|
|
|
167
|
-
def labels(self, **kwargs:
|
|
163
|
+
def labels(self, **kwargs: str | float | None) -> ThreadSafeCounter:
|
|
168
164
|
"""
|
|
169
165
|
Create a scoped counter instance with specific label values.
|
|
170
166
|
|
|
@@ -184,7 +180,7 @@ class LabeledCounter(Metric):
|
|
|
184
180
|
|
|
185
181
|
def collect(self) -> list[LabeledCounterPayload]:
|
|
186
182
|
if config.DISABLE_EVENTS:
|
|
187
|
-
return
|
|
183
|
+
return []
|
|
188
184
|
|
|
189
185
|
payload = []
|
|
190
186
|
num_labels = len(self._labels)
|
|
@@ -200,10 +196,7 @@ class LabeledCounter(Metric):
|
|
|
200
196
|
)
|
|
201
197
|
|
|
202
198
|
# Create labels dictionary
|
|
203
|
-
labels_dict =
|
|
204
|
-
label_name: label_value
|
|
205
|
-
for label_name, label_value in zip(self._labels, label_values)
|
|
206
|
-
}
|
|
199
|
+
labels_dict = dict(zip(self._labels, label_values, strict=False))
|
|
207
200
|
|
|
208
201
|
payload.append(
|
|
209
202
|
LabeledCounterPayload(
|
|
@@ -43,7 +43,7 @@ class MetricRegistry:
|
|
|
43
43
|
Provides methods for retrieving and collecting metrics.
|
|
44
44
|
"""
|
|
45
45
|
|
|
46
|
-
_instance:
|
|
46
|
+
_instance: MetricRegistry = None
|
|
47
47
|
_mutex: threading.Lock = threading.Lock()
|
|
48
48
|
|
|
49
49
|
def __new__(cls):
|
|
@@ -57,7 +57,7 @@ class MetricRegistry:
|
|
|
57
57
|
|
|
58
58
|
def __init__(self):
|
|
59
59
|
if not hasattr(self, "_registry"):
|
|
60
|
-
self._registry =
|
|
60
|
+
self._registry = {}
|
|
61
61
|
|
|
62
62
|
@property
|
|
63
63
|
def registry(self) -> dict[MetricRegistryKey, Metric]:
|
|
@@ -4,7 +4,6 @@ import logging
|
|
|
4
4
|
import threading
|
|
5
5
|
import time
|
|
6
6
|
from queue import Full, Queue
|
|
7
|
-
from typing import List, Optional
|
|
8
7
|
|
|
9
8
|
from localstack import config
|
|
10
9
|
from localstack.utils.threads import start_thread, start_worker_thread
|
|
@@ -21,7 +20,7 @@ class Publisher(abc.ABC):
|
|
|
21
20
|
A publisher takes a batch of events and publishes them to a destination.
|
|
22
21
|
"""
|
|
23
22
|
|
|
24
|
-
def publish(self, events:
|
|
23
|
+
def publish(self, events: list[Event]):
|
|
25
24
|
raise NotImplementedError
|
|
26
25
|
|
|
27
26
|
def close(self):
|
|
@@ -35,7 +34,7 @@ class AnalyticsClientPublisher(Publisher):
|
|
|
35
34
|
super().__init__()
|
|
36
35
|
self.client = client or AnalyticsClient()
|
|
37
36
|
|
|
38
|
-
def publish(self, events:
|
|
37
|
+
def publish(self, events: list[Event]):
|
|
39
38
|
self.client.append_events(events)
|
|
40
39
|
|
|
41
40
|
def close(self):
|
|
@@ -47,7 +46,7 @@ class Printer(Publisher):
|
|
|
47
46
|
Publisher that prints serialized events to stdout.
|
|
48
47
|
"""
|
|
49
48
|
|
|
50
|
-
def publish(self, events:
|
|
49
|
+
def publish(self, events: list[Event]):
|
|
51
50
|
for event in events:
|
|
52
51
|
print(event.asdict())
|
|
53
52
|
|
|
@@ -93,7 +92,7 @@ class PublisherBuffer(EventHandler):
|
|
|
93
92
|
self._stopping.set()
|
|
94
93
|
self._command_queue.put(self._cmd_stop)
|
|
95
94
|
|
|
96
|
-
def close_sync(self, timeout:
|
|
95
|
+
def close_sync(self, timeout: float | None = None):
|
|
97
96
|
self.close()
|
|
98
97
|
return self._stopped.wait(timeout)
|
|
99
98
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from localstack.runtime import hooks
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
@hooks.on_runtime_ready()
|
|
5
|
+
def publish_provider_assignment():
|
|
6
|
+
"""
|
|
7
|
+
Publishes the service provider assignment to the analytics service.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from localstack.config import SERVICE_PROVIDER_CONFIG
|
|
11
|
+
from localstack.services.plugins import SERVICE_PLUGINS
|
|
12
|
+
from localstack.utils.analytics import log
|
|
13
|
+
|
|
14
|
+
provider_assignment = {
|
|
15
|
+
service: f"localstack.aws.provider/{service}:{SERVICE_PROVIDER_CONFIG[service]}"
|
|
16
|
+
for service in SERVICE_PLUGINS.list_available()
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
log.event("ls_service_provider_assignment", provider_assignment)
|
|
@@ -2,7 +2,7 @@ import datetime
|
|
|
2
2
|
import logging
|
|
3
3
|
import threading
|
|
4
4
|
from collections import Counter
|
|
5
|
-
from typing import
|
|
5
|
+
from typing import NamedTuple
|
|
6
6
|
|
|
7
7
|
from localstack import config
|
|
8
8
|
from localstack.runtime.shutdown import SHUTDOWN_HANDLERS
|
|
@@ -20,7 +20,7 @@ class ServiceRequestInfo(NamedTuple):
|
|
|
20
20
|
service: str
|
|
21
21
|
operation: str
|
|
22
22
|
status_code: int
|
|
23
|
-
err_type:
|
|
23
|
+
err_type: str | None = None
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class ServiceRequestAggregator:
|
|
@@ -110,7 +110,7 @@ class ServiceRequestAggregator:
|
|
|
110
110
|
"api_calls": self._aggregate_api_calls(self.counter),
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
def _aggregate_api_calls(self, counter) ->
|
|
113
|
+
def _aggregate_api_calls(self, counter) -> list:
|
|
114
114
|
aggregations = []
|
|
115
115
|
for api_call_info, count in counter.items():
|
|
116
116
|
doc = api_call_info._asdict()
|
|
@@ -121,5 +121,5 @@ class ServiceRequestAggregator:
|
|
|
121
121
|
aggregations.append(doc)
|
|
122
122
|
return aggregations
|
|
123
123
|
|
|
124
|
-
def _emit_payload(self, analytics_payload:
|
|
124
|
+
def _emit_payload(self, analytics_payload: dict):
|
|
125
125
|
analytics.log.event(EVENT_NAME, analytics_payload)
|