localstack-core 4.7.1.dev22__py3-none-any.whl → 4.7.1.dev24__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/core.py +2 -3
- localstack/aws/api/events/__init__.py +12 -16
- localstack/aws/api/logs/__init__.py +5 -8
- localstack/aws/api/pipes/__init__.py +24 -32
- localstack/aws/api/scheduler/__init__.py +14 -16
- localstack/aws/api/stepfunctions/__init__.py +88 -114
- localstack/aws/api/support/__init__.py +8 -9
- localstack/aws/chain.py +2 -2
- localstack/aws/client.py +7 -9
- localstack/aws/connect.py +40 -39
- localstack/aws/forwarder.py +5 -4
- localstack/aws/gateway.py +1 -3
- localstack/aws/handlers/analytics.py +1 -2
- localstack/aws/handlers/cors.py +4 -5
- localstack/aws/handlers/logging.py +1 -2
- localstack/aws/handlers/metric_handler.py +3 -4
- localstack/aws/handlers/service.py +5 -5
- localstack/aws/mocking.py +15 -24
- localstack/aws/protocol/op_router.py +11 -10
- localstack/aws/protocol/parser.py +16 -17
- localstack/aws/protocol/serializer.py +37 -40
- localstack/aws/protocol/service_router.py +13 -13
- localstack/aws/protocol/validate.py +5 -5
- localstack/aws/scaffold.py +8 -9
- 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 +7 -8
- localstack/aws/spec.py +29 -30
- localstack/cli/localstack.py +6 -6
- localstack/cli/lpm.py +2 -2
- localstack/config.py +14 -15
- localstack/deprecations.py +5 -5
- localstack/dev/run/__main__.py +4 -4
- localstack/dev/run/paths.py +5 -5
- localstack/dns/models.py +2 -1
- localstack/dns/server.py +3 -2
- 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 +3 -3
- localstack/packages/api.py +5 -5
- localstack/packages/core.py +3 -3
- localstack/packages/debugpy.py +1 -3
- localstack/packages/ffmpeg.py +1 -2
- localstack/packages/java.py +1 -2
- localstack/packages/terraform.py +1 -2
- localstack/runtime/init.py +6 -7
- localstack/runtime/shutdown.py +2 -1
- localstack/services/apigateway/exporter.py +1 -2
- localstack/services/apigateway/helpers.py +6 -6
- localstack/services/apigateway/legacy/context.py +21 -21
- localstack/services/apigateway/legacy/helpers.py +20 -20
- localstack/services/apigateway/legacy/integration.py +7 -7
- localstack/services/apigateway/legacy/router_asf.py +2 -2
- localstack/services/apigateway/legacy/templates.py +5 -5
- 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/parse.py +1 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +1 -1
- 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 +6 -6
- localstack/services/apigateway/next_gen/execute_api/integrations/http.py +9 -9
- localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
- 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 +5 -5
- 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 +2 -2
- 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/cfn_utils.py +1 -1
- localstack/services/cloudformation/deployment_utils.py +2 -2
- localstack/services/cloudformation/engine/changes.py +3 -3
- localstack/services/cloudformation/engine/entities.py +12 -12
- localstack/services/cloudformation/engine/parameters.py +3 -3
- localstack/services/cloudformation/engine/template_deployer.py +9 -10
- localstack/services/cloudformation/engine/transformers.py +5 -4
- localstack/services/cloudformation/engine/types.py +5 -4
- localstack/services/cloudformation/engine/v2/change_set_model.py +31 -9
- localstack/services/cloudformation/engine/v2/change_set_model_describer.py +6 -6
- localstack/services/cloudformation/engine/v2/change_set_model_executor.py +62 -80
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +15 -14
- localstack/services/cloudformation/engine/v2/change_set_model_transform.py +5 -5
- localstack/services/cloudformation/provider_utils.py +2 -2
- localstack/services/cloudformation/resource_provider.py +10 -9
- 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/scaffolding/__main__.py +8 -7
- localstack/services/cloudformation/scaffolding/propgen.py +2 -2
- localstack/services/cloudformation/stores.py +2 -3
- localstack/services/cloudformation/v2/entities.py +57 -36
- localstack/services/cloudformation/v2/provider.py +155 -29
- localstack/services/cloudwatch/alarm_scheduler.py +7 -7
- localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
- localstack/services/cloudwatch/models.py +5 -7
- localstack/services/cloudwatch/provider.py +12 -12
- localstack/services/cloudwatch/provider_v2.py +2 -4
- 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 +1 -2
- localstack/services/dynamodb/provider.py +7 -8
- 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/utils.py +13 -14
- localstack/services/dynamodb/v2/provider.py +6 -7
- localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
- localstack/services/dynamodbstreams/models.py +1 -3
- localstack/services/ec2/patches.py +4 -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 +13 -13
- 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 +17 -17
- localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
- localstack/services/edge.py +5 -5
- localstack/services/es/provider.py +19 -19
- 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/models.py +25 -25
- localstack/services/events/provider.py +12 -12
- 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 +5 -5
- localstack/services/events/utils.py +7 -7
- localstack/services/events/v1/models.py +1 -3
- localstack/services/events/v1/provider.py +10 -10
- localstack/services/firehose/models.py +1 -3
- localstack/services/firehose/provider.py +11 -12
- localstack/services/iam/iam_patches.py +5 -6
- localstack/services/iam/provider.py +4 -4
- 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/kinesis/kinesis_mock_server.py +7 -8
- localstack/services/kinesis/models.py +2 -3
- localstack/services/kinesis/packages.py +3 -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 +14 -17
- localstack/services/kms/provider.py +2 -3
- 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 +3 -2
- localstack/services/lambda_/api_utils.py +12 -12
- localstack/services/lambda_/custom_endpoints.py +2 -2
- localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +1 -1
- 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_/invocation/assignment.py +1 -2
- localstack/services/lambda_/invocation/docker_runtime_executor.py +5 -4
- localstack/services/lambda_/invocation/execution_environment.py +4 -4
- localstack/services/lambda_/invocation/executor_endpoint.py +5 -5
- localstack/services/lambda_/invocation/internal_sqs_queue.py +1 -1
- localstack/services/lambda_/invocation/lambda_models.py +23 -23
- localstack/services/lambda_/invocation/lambda_service.py +4 -4
- localstack/services/lambda_/invocation/logs.py +2 -3
- localstack/services/lambda_/invocation/runtime_executor.py +3 -3
- localstack/services/lambda_/ldm.py +2 -3
- localstack/services/lambda_/packages.py +2 -3
- localstack/services/lambda_/provider.py +3 -3
- 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 +14 -14
- 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/logs/models.py +1 -3
- localstack/services/logs/provider.py +3 -3
- 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 +3 -3
- localstack/services/opensearch/cluster.py +13 -13
- localstack/services/opensearch/cluster_manager.py +13 -14
- localstack/services/opensearch/models.py +1 -3
- localstack/services/opensearch/packages.py +1 -2
- localstack/services/opensearch/provider.py +7 -8
- 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 +1 -3
- localstack/services/plugins.py +26 -25
- 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/cors.py +4 -4
- localstack/services/s3/models.py +72 -72
- localstack/services/s3/notifications.py +19 -19
- localstack/services/s3/presigned_url.py +6 -5
- localstack/services/s3/provider.py +13 -14
- 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 +11 -11
- localstack/services/s3/validation.py +1 -1
- localstack/services/s3/website_hosting.py +5 -5
- 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 +9 -11
- 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/provider.py +8 -8
- 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/models.py +25 -25
- localstack/services/sns/provider.py +1 -2
- localstack/services/sns/publisher.py +6 -7
- 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/sqs/models.py +21 -22
- localstack/services/sqs/provider.py +19 -18
- localstack/services/sqs/query_api.py +2 -3
- 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 +4 -4
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy_plugin.py +1 -3
- localstack/services/sqs/utils.py +3 -3
- localstack/services/ssm/provider.py +2 -3
- 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/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/jsonata/jsonata_template_binding.py +2 -2
- localstack/services/stepfunctions/asl/component/common/path/input_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/path/output_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
- localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
- localstack/services/stepfunctions/asl/component/common/string/string_expression.py +2 -2
- 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 +3 -3
- localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +2 -2
- localstack/services/stepfunctions/asl/component/program/program.py +8 -8
- 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/operator/implementations/is_operator.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +1 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +6 -6
- 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/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 +10 -11
- 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 +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +1 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +6 -6
- 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 +15 -15
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +5 -4
- 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 +2 -2
- 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 +2 -4
- localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +3 -5
- 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 +15 -17
- localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
- localstack/services/stepfunctions/asl/eval/event/event_manager.py +9 -9
- 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 +11 -11
- localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
- localstack/services/stepfunctions/asl/eval/variable_store.py +3 -3
- localstack/services/stepfunctions/asl/jsonata/jsonata.py +5 -4
- localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +1 -2
- localstack/services/stepfunctions/asl/parse/preprocessor.py +30 -30
- localstack/services/stepfunctions/asl/parse/typed_props.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 +6 -6
- localstack/services/stepfunctions/backend/execution.py +25 -27
- localstack/services/stepfunctions/backend/execution_worker.py +7 -7
- localstack/services/stepfunctions/backend/state_machine.py +26 -26
- 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 +5 -5
- localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
- localstack/services/stepfunctions/provider.py +27 -37
- 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 +7 -7
- localstack/services/transcribe/packages.py +1 -3
- localstack/services/transcribe/provider.py +2 -2
- localstack/state/inspect.py +4 -4
- localstack/state/pickle.py +16 -15
- localstack/testing/aws/asf_utils.py +3 -2
- localstack/testing/aws/lambda_utils.py +15 -14
- localstack/testing/aws/util.py +3 -2
- localstack/testing/pytest/cloudformation/fixtures.py +13 -3
- localstack/testing/pytest/container.py +5 -4
- localstack/testing/pytest/filters.py +1 -3
- localstack/testing/pytest/fixtures.py +11 -11
- localstack/testing/pytest/marking.py +6 -6
- localstack/testing/pytest/path_filter.py +1 -1
- localstack/testing/pytest/stepfunctions/utils.py +1 -1
- localstack/testing/pytest/validation_tracking.py +3 -3
- localstack/testing/scenario/provisioning.py +11 -10
- localstack/testing/snapshots/transformer_utility.py +2 -2
- 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/metrics/registry.py +1 -1
- localstack/utils/analytics/publisher.py +4 -4
- localstack/utils/analytics/service_request_aggregator.py +3 -3
- localstack/utils/aws/arns.py +2 -2
- localstack/utils/aws/aws_responses.py +14 -21
- localstack/utils/aws/aws_stack.py +7 -11
- localstack/utils/aws/dead_letter_queue.py +3 -4
- localstack/utils/aws/message_forwarding.py +9 -11
- localstack/utils/aws/request_context.py +4 -4
- localstack/utils/aws/templating.py +3 -3
- localstack/utils/batch_policy.py +2 -2
- localstack/utils/bootstrap.py +19 -20
- localstack/utils/collections.py +16 -23
- localstack/utils/config_listener.py +2 -2
- localstack/utils/container_networking.py +3 -3
- localstack/utils/container_utils/container_client.py +72 -75
- localstack/utils/container_utils/docker_cmd_client.py +33 -33
- localstack/utils/container_utils/docker_sdk_client.py +35 -35
- localstack/utils/crypto.py +2 -3
- localstack/utils/diagnose.py +11 -11
- localstack/utils/docker_utils.py +4 -4
- localstack/utils/files.py +1 -2
- localstack/utils/functions.py +2 -2
- localstack/utils/http.py +6 -6
- localstack/utils/iputils.py +2 -1
- localstack/utils/json.py +1 -1
- localstack/utils/net.py +10 -9
- localstack/utils/objects.py +10 -10
- localstack/utils/patch.py +5 -5
- localstack/utils/platform.py +2 -2
- localstack/utils/run.py +7 -7
- localstack/utils/scheduler.py +3 -2
- localstack/utils/strings.py +2 -2
- localstack/utils/tagging.py +3 -3
- localstack/utils/testutil.py +9 -9
- localstack/utils/threads.py +2 -2
- localstack/utils/xml.py +1 -1
- localstack/version.py +2 -2
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/METADATA +1 -1
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/RECORD +544 -544
- localstack_core-4.7.1.dev24.dist-info/plux.json +1 -0
- localstack_core-4.7.1.dev22.dist-info/plux.json +0 -1
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack +0 -0
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/WHEEL +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/top_level.txt +0 -0
localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine_plugin.py
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Optional, Type
|
|
2
|
-
|
|
3
1
|
from localstack.services.cloudformation.resource_provider import (
|
|
4
2
|
CloudFormationResourceProviderPlugin,
|
|
5
3
|
ResourceProvider,
|
|
@@ -10,7 +8,7 @@ class StepFunctionsStateMachineProviderPlugin(CloudFormationResourceProviderPlug
|
|
|
10
8
|
name = "AWS::StepFunctions::StateMachine"
|
|
11
9
|
|
|
12
10
|
def __init__(self):
|
|
13
|
-
self.factory:
|
|
11
|
+
self.factory: type[ResourceProvider] | None = None
|
|
14
12
|
|
|
15
13
|
def load(self):
|
|
16
14
|
from localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine import (
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import base64
|
|
2
2
|
import logging
|
|
3
|
-
from typing import Dict
|
|
4
3
|
|
|
5
4
|
from localstack.aws.api.stepfunctions import ValidationException
|
|
6
5
|
from localstack.aws.connect import connect_to
|
|
@@ -11,7 +10,7 @@ from localstack.utils.strings import to_bytes, to_str
|
|
|
11
10
|
LOG = logging.getLogger(__name__)
|
|
12
11
|
|
|
13
12
|
|
|
14
|
-
def await_sfn_execution_result(execution_arn: str, timeout_secs: int = 60) ->
|
|
13
|
+
def await_sfn_execution_result(execution_arn: str, timeout_secs: int = 60) -> dict:
|
|
15
14
|
"""Wait until the given SFN execution ARN is no longer in RUNNING status, then return execution result."""
|
|
16
15
|
|
|
17
16
|
arn_data = parse_arn(execution_arn)
|
localstack/services/stores.py
CHANGED
|
@@ -30,9 +30,9 @@ While not recommended, store classes may define member helper functions and prop
|
|
|
30
30
|
"""
|
|
31
31
|
|
|
32
32
|
import re
|
|
33
|
-
from collections.abc import Callable
|
|
33
|
+
from collections.abc import Callable, Iterator
|
|
34
34
|
from threading import RLock
|
|
35
|
-
from typing import Any, Generic,
|
|
35
|
+
from typing import Any, Generic, TypeVar
|
|
36
36
|
|
|
37
37
|
from localstack import config
|
|
38
38
|
from localstack.utils.aws.aws_stack import get_valid_regions_for_service
|
|
@@ -52,7 +52,7 @@ class LocalAttribute:
|
|
|
52
52
|
Descriptor protocol for marking store attributes as local to a region.
|
|
53
53
|
"""
|
|
54
54
|
|
|
55
|
-
def __init__(self, default:
|
|
55
|
+
def __init__(self, default: Callable | int | float | str | bool | None):
|
|
56
56
|
"""
|
|
57
57
|
:param default: Default value assigned to the local attribute. Must be a scalar
|
|
58
58
|
or a callable.
|
|
@@ -81,7 +81,7 @@ class CrossRegionAttribute:
|
|
|
81
81
|
Descriptor protocol for marking store attributes as shared across all regions.
|
|
82
82
|
"""
|
|
83
83
|
|
|
84
|
-
def __init__(self, default:
|
|
84
|
+
def __init__(self, default: Callable | int | float | str | bool | None):
|
|
85
85
|
"""
|
|
86
86
|
:param default: The default value assigned to the cross-region attribute.
|
|
87
87
|
This must be a scalar or a callable.
|
|
@@ -122,7 +122,7 @@ class CrossAccountAttribute:
|
|
|
122
122
|
This should be used for resources that are identified by ARNs.
|
|
123
123
|
"""
|
|
124
124
|
|
|
125
|
-
def __init__(self, default:
|
|
125
|
+
def __init__(self, default: Callable | int | float | str | bool | None):
|
|
126
126
|
"""
|
|
127
127
|
:param default: The default value assigned to the cross-account attribute.
|
|
128
128
|
This must be a scalar or a callable.
|
|
@@ -198,7 +198,7 @@ class RegionBundle(dict, Generic[BaseStoreType]):
|
|
|
198
198
|
def __init__(
|
|
199
199
|
self,
|
|
200
200
|
service_name: str,
|
|
201
|
-
store:
|
|
201
|
+
store: type[BaseStoreType],
|
|
202
202
|
account_id: str,
|
|
203
203
|
validate: bool = True,
|
|
204
204
|
lock: RLock = None,
|
|
@@ -286,7 +286,7 @@ class AccountRegionBundle(dict, Generic[BaseStoreType]):
|
|
|
286
286
|
Encapsulation for all stores for all AWS account IDs.
|
|
287
287
|
"""
|
|
288
288
|
|
|
289
|
-
def __init__(self, service_name: str, store:
|
|
289
|
+
def __init__(self, service_name: str, store: type[BaseStoreType], validate: bool = True):
|
|
290
290
|
"""
|
|
291
291
|
:param service_name: Name of the service. Must be a valid service defined in botocore.
|
|
292
292
|
:param store: Class definition of the Store
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
3
1
|
from localstack.packages import Package
|
|
4
2
|
from localstack.packages.core import PythonPackageInstaller
|
|
5
3
|
|
|
@@ -13,7 +11,7 @@ class VoskPackage(Package[PythonPackageInstaller]):
|
|
|
13
11
|
def _get_installer(self, version: str) -> PythonPackageInstaller:
|
|
14
12
|
return VoskPackageInstaller(version)
|
|
15
13
|
|
|
16
|
-
def get_versions(self) ->
|
|
14
|
+
def get_versions(self) -> list[str]:
|
|
17
15
|
return [_VOSK_DEFAULT_VERSION]
|
|
18
16
|
|
|
19
17
|
|
|
@@ -5,7 +5,7 @@ import threading
|
|
|
5
5
|
import wave
|
|
6
6
|
from functools import cache
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from typing import Any
|
|
8
|
+
from typing import Any
|
|
9
9
|
from zipfile import ZipFile
|
|
10
10
|
|
|
11
11
|
from localstack import config
|
|
@@ -277,7 +277,7 @@ class TranscribeProvider(TranscribeApi):
|
|
|
277
277
|
# Threads
|
|
278
278
|
#
|
|
279
279
|
|
|
280
|
-
def _run_transcription_job(self, args:
|
|
280
|
+
def _run_transcription_job(self, args: tuple[TranscribeStore, str]) -> None:
|
|
281
281
|
store, job_name = args
|
|
282
282
|
|
|
283
283
|
job = store.transcription_jobs[job_name]
|
localstack/state/inspect.py
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import importlib
|
|
4
4
|
import logging
|
|
5
5
|
from functools import singledispatchmethod
|
|
6
|
-
from typing import Any,
|
|
6
|
+
from typing import Any, TypedDict
|
|
7
7
|
|
|
8
8
|
from moto.core.base_backend import BackendDict
|
|
9
9
|
|
|
@@ -17,14 +17,14 @@ class ServiceBackend(TypedDict, total=False):
|
|
|
17
17
|
"""Wrapper of the possible type of backends that a service can use."""
|
|
18
18
|
|
|
19
19
|
localstack: AccountRegionBundle | None
|
|
20
|
-
moto: BackendDict |
|
|
20
|
+
moto: BackendDict | dict | None
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class ServiceBackendCollectorVisitor(StateVisitor):
|
|
24
24
|
"""Implementation of StateVisitor meant to collect the backends that a given service use to hold its state."""
|
|
25
25
|
|
|
26
26
|
store: AccountRegionBundle | None
|
|
27
|
-
backend_dict: BackendDict |
|
|
27
|
+
backend_dict: BackendDict | dict | None
|
|
28
28
|
|
|
29
29
|
def __init__(self) -> None:
|
|
30
30
|
self.store = None
|
|
@@ -60,7 +60,7 @@ class ReflectionStateLocator:
|
|
|
60
60
|
|
|
61
61
|
provider: Any
|
|
62
62
|
|
|
63
|
-
def __init__(self, provider:
|
|
63
|
+
def __init__(self, provider: Any | None = None, service: str | None = None):
|
|
64
64
|
self.provider = provider
|
|
65
65
|
self.service = service or provider.service
|
|
66
66
|
|
localstack/state/pickle.py
CHANGED
|
@@ -29,7 +29,8 @@ https://dill.readthedocs.io/en/latest/index.html?highlight=register#dill.Pickler
|
|
|
29
29
|
"""
|
|
30
30
|
|
|
31
31
|
import inspect
|
|
32
|
-
from
|
|
32
|
+
from collections.abc import Callable
|
|
33
|
+
from typing import IO, Any, BinaryIO, Generic, TypeVar
|
|
33
34
|
|
|
34
35
|
import dill
|
|
35
36
|
import jsonpickle
|
|
@@ -45,7 +46,7 @@ PythonPickler = Any
|
|
|
45
46
|
"""Type placeholder for pickle._Pickler (which has for instance the save_reduce method)"""
|
|
46
47
|
|
|
47
48
|
|
|
48
|
-
def register(cls:
|
|
49
|
+
def register(cls: type = None, subclasses: bool = False):
|
|
49
50
|
"""
|
|
50
51
|
Decorator to register a custom type or type tree into the dill pickling dispatcher table.
|
|
51
52
|
|
|
@@ -70,7 +71,7 @@ def register(cls: Type = None, subclasses: bool = False):
|
|
|
70
71
|
return _wrapper
|
|
71
72
|
|
|
72
73
|
|
|
73
|
-
def reducer(cls:
|
|
74
|
+
def reducer(cls: type, restore: Callable = None, subclasses: bool = False):
|
|
74
75
|
"""
|
|
75
76
|
Convenience decorator to simplify the following pattern::
|
|
76
77
|
|
|
@@ -118,14 +119,14 @@ def reducer(cls: Type, restore: Callable = None, subclasses: bool = False):
|
|
|
118
119
|
|
|
119
120
|
|
|
120
121
|
def add_dispatch_entry(
|
|
121
|
-
cls:
|
|
122
|
+
cls: type, fn: Callable[[PythonPickler, Any], None], subclasses: bool = False
|
|
122
123
|
):
|
|
123
124
|
Pickler.dispatch_overwrite[cls] = fn
|
|
124
125
|
if subclasses:
|
|
125
126
|
Pickler.match_subclasses_of.add(cls)
|
|
126
127
|
|
|
127
128
|
|
|
128
|
-
def remove_dispatch_entry(cls:
|
|
129
|
+
def remove_dispatch_entry(cls: type):
|
|
129
130
|
try:
|
|
130
131
|
del Pickler.dispatch_overwrite[cls]
|
|
131
132
|
except KeyError:
|
|
@@ -190,7 +191,7 @@ class _SuperclassMatchingTypeDict(MetaCatchingDict):
|
|
|
190
191
|
|
|
191
192
|
"""
|
|
192
193
|
|
|
193
|
-
def __init__(self, seq=None, match_subclasses_of: set[
|
|
194
|
+
def __init__(self, seq=None, match_subclasses_of: set[type] = None):
|
|
194
195
|
if seq is not None:
|
|
195
196
|
super().__init__(seq)
|
|
196
197
|
else:
|
|
@@ -215,8 +216,8 @@ class Pickler(dill.Pickler):
|
|
|
215
216
|
Custom dill pickler that considers dispatchers and subclass dispatchers registered via ``register``.
|
|
216
217
|
"""
|
|
217
218
|
|
|
218
|
-
match_subclasses_of: set[
|
|
219
|
-
dispatch_overwrite: dict[
|
|
219
|
+
match_subclasses_of: set[type] = set()
|
|
220
|
+
dispatch_overwrite: dict[type, Callable] = {}
|
|
220
221
|
|
|
221
222
|
def __init__(self, *args, **kwargs):
|
|
222
223
|
super().__init__(*args, **kwargs)
|
|
@@ -234,9 +235,9 @@ class PickleEncoder(Encoder):
|
|
|
234
235
|
extended with custom serializers.
|
|
235
236
|
"""
|
|
236
237
|
|
|
237
|
-
pickler_class:
|
|
238
|
+
pickler_class: type[dill.Pickler]
|
|
238
239
|
|
|
239
|
-
def __init__(self, pickler_class:
|
|
240
|
+
def __init__(self, pickler_class: type[dill.Pickler] = None):
|
|
240
241
|
self.pickler_class = pickler_class or Pickler
|
|
241
242
|
|
|
242
243
|
def encode(self, obj: Any, file: BinaryIO):
|
|
@@ -249,9 +250,9 @@ class PickleDecoder(Decoder):
|
|
|
249
250
|
extended with custom serializers.
|
|
250
251
|
"""
|
|
251
252
|
|
|
252
|
-
unpickler_class:
|
|
253
|
+
unpickler_class: type[dill.Unpickler]
|
|
253
254
|
|
|
254
|
-
def __init__(self, unpickler_class:
|
|
255
|
+
def __init__(self, unpickler_class: type[dill.Unpickler] = None):
|
|
255
256
|
self.unpickler_class = unpickler_class or dill.Unpickler
|
|
256
257
|
|
|
257
258
|
def decode(self, file: BinaryIO) -> Any:
|
|
@@ -263,7 +264,7 @@ class JsonEncoder(Encoder):
|
|
|
263
264
|
An Encoder that uses ``jsonpickle`` under the hood.
|
|
264
265
|
"""
|
|
265
266
|
|
|
266
|
-
def __init__(self, pickler_class:
|
|
267
|
+
def __init__(self, pickler_class: type[jsonpickle.Pickler] = None):
|
|
267
268
|
self.pickler_class = pickler_class or jsonpickle.Pickler()
|
|
268
269
|
|
|
269
270
|
def encode(self, obj: Any, file: IO[bytes]):
|
|
@@ -276,9 +277,9 @@ class JsonDecoder(Decoder):
|
|
|
276
277
|
A Decoder that uses ``jsonpickle`` under the hood.
|
|
277
278
|
"""
|
|
278
279
|
|
|
279
|
-
unpickler_class:
|
|
280
|
+
unpickler_class: type[jsonpickle.Unpickler]
|
|
280
281
|
|
|
281
|
-
def __init__(self, unpickler_class:
|
|
282
|
+
def __init__(self, unpickler_class: type[jsonpickle.Unpickler] = None):
|
|
282
283
|
self.unpickler_class = unpickler_class or jsonpickle.Unpickler()
|
|
283
284
|
|
|
284
285
|
def decode(self, file: IO[bytes]) -> Any:
|
|
@@ -3,12 +3,13 @@ import importlib.util
|
|
|
3
3
|
import inspect
|
|
4
4
|
import pkgutil
|
|
5
5
|
import re
|
|
6
|
+
from re import Pattern
|
|
6
7
|
from types import FunctionType, ModuleType, NoneType, UnionType
|
|
7
|
-
from typing import
|
|
8
|
+
from typing import Union, get_args, get_origin
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
def _import_submodules(
|
|
11
|
-
package_name: str, module_regex:
|
|
12
|
+
package_name: str, module_regex: Pattern | None = None, recursive: bool = True
|
|
12
13
|
) -> dict[str, ModuleType]:
|
|
13
14
|
"""
|
|
14
15
|
Imports all submodules of the given package with the defined (optional) module_suffix.
|
|
@@ -4,8 +4,9 @@ import logging
|
|
|
4
4
|
import os
|
|
5
5
|
import subprocess
|
|
6
6
|
import zipfile
|
|
7
|
+
from collections.abc import Mapping, Sequence
|
|
7
8
|
from pathlib import Path
|
|
8
|
-
from typing import TYPE_CHECKING, Literal,
|
|
9
|
+
from typing import TYPE_CHECKING, Literal, Optional, overload
|
|
9
10
|
|
|
10
11
|
from localstack import config
|
|
11
12
|
from localstack.services.lambda_.runtimes import RUNTIMES_AGGREGATED
|
|
@@ -176,27 +177,27 @@ class ParametrizedLambda:
|
|
|
176
177
|
def create_function(
|
|
177
178
|
self,
|
|
178
179
|
*,
|
|
179
|
-
FunctionName:
|
|
180
|
-
Role:
|
|
180
|
+
FunctionName: str | None = None,
|
|
181
|
+
Role: str | None = None,
|
|
181
182
|
Code: Optional["FunctionCodeTypeDef"] = None,
|
|
182
183
|
Runtime: Optional["RuntimeType"] = None,
|
|
183
|
-
Handler:
|
|
184
|
-
Description:
|
|
185
|
-
Timeout:
|
|
186
|
-
MemorySize:
|
|
187
|
-
Publish:
|
|
184
|
+
Handler: str | None = None,
|
|
185
|
+
Description: str | None = None,
|
|
186
|
+
Timeout: int | None = None,
|
|
187
|
+
MemorySize: int | None = None,
|
|
188
|
+
Publish: bool | None = None,
|
|
188
189
|
VpcConfig: Optional["VpcConfigTypeDef"] = None,
|
|
189
190
|
PackageType: Optional["PackageTypeType"] = None,
|
|
190
191
|
DeadLetterConfig: Optional["DeadLetterConfigTypeDef"] = None,
|
|
191
192
|
Environment: Optional["EnvironmentTypeDef"] = None,
|
|
192
|
-
KMSKeyArn:
|
|
193
|
+
KMSKeyArn: str | None = None,
|
|
193
194
|
TracingConfig: Optional["TracingConfigTypeDef"] = None,
|
|
194
|
-
Tags:
|
|
195
|
-
Layers:
|
|
196
|
-
FileSystemConfigs:
|
|
195
|
+
Tags: Mapping[str, str] | None = None,
|
|
196
|
+
Layers: Sequence[str] | None = None,
|
|
197
|
+
FileSystemConfigs: Sequence["FileSystemConfigTypeDef"] | None = None,
|
|
197
198
|
ImageConfig: Optional["ImageConfigTypeDef"] = None,
|
|
198
|
-
CodeSigningConfigArn:
|
|
199
|
-
Architectures:
|
|
199
|
+
CodeSigningConfigArn: str | None = None,
|
|
200
|
+
Architectures: Sequence["ArchitectureType"] | None = None,
|
|
200
201
|
EphemeralStorage: Optional["EphemeralStorageTypeDef"] = None,
|
|
201
202
|
) -> "FunctionConfigurationResponseMetadataTypeDef": ...
|
|
202
203
|
|
localstack/testing/aws/util.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import functools
|
|
2
2
|
import os
|
|
3
|
-
from
|
|
3
|
+
from collections.abc import Callable
|
|
4
|
+
from typing import TypeVar
|
|
4
5
|
|
|
5
6
|
import boto3
|
|
6
7
|
import botocore
|
|
@@ -80,7 +81,7 @@ def wait_for_user(keys, region_name: str):
|
|
|
80
81
|
|
|
81
82
|
def create_client_with_keys(
|
|
82
83
|
service: str,
|
|
83
|
-
keys:
|
|
84
|
+
keys: dict[str, str],
|
|
84
85
|
region_name: str,
|
|
85
86
|
client_config: Config = None,
|
|
86
87
|
):
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import json
|
|
2
2
|
from collections import defaultdict
|
|
3
|
-
from
|
|
3
|
+
from collections.abc import Generator
|
|
4
|
+
from typing import Callable, Optional, TypedDict
|
|
4
5
|
|
|
5
6
|
import pytest
|
|
6
7
|
from botocore.exceptions import WaiterError
|
|
@@ -111,7 +112,7 @@ def capture_per_resource_events(
|
|
|
111
112
|
|
|
112
113
|
def _normalise_describe_change_set_output(value: DescribeChangeSetOutput) -> None:
|
|
113
114
|
value.get("Changes", list()).sort(
|
|
114
|
-
key=lambda change: change.get("ResourceChange", dict()).get("LogicalResourceId",
|
|
115
|
+
key=lambda change: change.get("ResourceChange", dict()).get("LogicalResourceId", "")
|
|
115
116
|
)
|
|
116
117
|
|
|
117
118
|
|
|
@@ -126,7 +127,12 @@ def capture_update_process(aws_client_no_retry, cleanups, capture_per_resource_e
|
|
|
126
127
|
change_set_name = f"cs-{short_uid()}"
|
|
127
128
|
|
|
128
129
|
def inner(
|
|
129
|
-
snapshot,
|
|
130
|
+
snapshot,
|
|
131
|
+
t1: dict | str,
|
|
132
|
+
t2: dict | str,
|
|
133
|
+
p1: dict | None = None,
|
|
134
|
+
p2: dict | None = None,
|
|
135
|
+
custom_update_step: Callable[[], None] | None = None,
|
|
130
136
|
) -> str:
|
|
131
137
|
"""
|
|
132
138
|
:return: stack id
|
|
@@ -209,6 +215,10 @@ def capture_update_process(aws_client_no_retry, cleanups, capture_per_resource_e
|
|
|
209
215
|
]
|
|
210
216
|
snapshot.match("post-create-1-describe", describe)
|
|
211
217
|
|
|
218
|
+
# run any custom steps if present
|
|
219
|
+
if custom_update_step:
|
|
220
|
+
custom_update_step()
|
|
221
|
+
|
|
212
222
|
# update stack
|
|
213
223
|
change_set_details = aws_client_no_retry.cloudformation.create_change_set(
|
|
214
224
|
StackName=stack_name,
|
|
@@ -2,7 +2,8 @@ import logging
|
|
|
2
2
|
import os
|
|
3
3
|
import shlex
|
|
4
4
|
import threading
|
|
5
|
-
from
|
|
5
|
+
from collections.abc import Generator
|
|
6
|
+
from typing import Callable, Optional
|
|
6
7
|
|
|
7
8
|
import pytest
|
|
8
9
|
|
|
@@ -31,14 +32,14 @@ ENV_TEST_CONTAINER_MOUNT_DEPENDENCIES = "TEST_CONTAINER_MOUNT_DEPENDENCIES"
|
|
|
31
32
|
|
|
32
33
|
class ContainerFactory:
|
|
33
34
|
def __init__(self):
|
|
34
|
-
self._containers:
|
|
35
|
+
self._containers: list[Container] = []
|
|
35
36
|
|
|
36
37
|
def __call__(
|
|
37
38
|
self,
|
|
38
39
|
# convenience properties
|
|
39
40
|
pro: bool = False,
|
|
40
|
-
publish: Optional[
|
|
41
|
-
configurators: Optional[
|
|
41
|
+
publish: Optional[list[int]] = None,
|
|
42
|
+
configurators: Optional[list[ContainerConfigurator]] = None,
|
|
42
43
|
# ContainerConfig properties
|
|
43
44
|
**kwargs,
|
|
44
45
|
) -> Container:
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
3
1
|
import pytest
|
|
4
2
|
from _pytest.config import Config, PytestPluginManager
|
|
5
3
|
from _pytest.config.argparsing import Parser
|
|
@@ -13,7 +11,7 @@ def pytest_addoption(parser: Parser, pluginmanager: PytestPluginManager):
|
|
|
13
11
|
|
|
14
12
|
|
|
15
13
|
@pytest.hookimpl
|
|
16
|
-
def pytest_collection_modifyitems(session: Session, config: Config, items:
|
|
14
|
+
def pytest_collection_modifyitems(session: Session, config: Config, items: list[Item]):
|
|
17
15
|
filter_fixtures_option = config.getoption("--filter-fixtures")
|
|
18
16
|
if filter_fixtures_option:
|
|
19
17
|
# TODO: add more sophisticated combinations (=> like pytest -m and -k)
|
|
@@ -6,7 +6,7 @@ import os
|
|
|
6
6
|
import re
|
|
7
7
|
import textwrap
|
|
8
8
|
import time
|
|
9
|
-
from typing import TYPE_CHECKING, Any, Callable,
|
|
9
|
+
from typing import TYPE_CHECKING, Any, Callable, Optional, Unpack
|
|
10
10
|
|
|
11
11
|
import botocore.auth
|
|
12
12
|
import botocore.config
|
|
@@ -593,7 +593,7 @@ def sns_allow_topic_sqs_queue(aws_client):
|
|
|
593
593
|
def sns_create_sqs_subscription(sns_allow_topic_sqs_queue, sqs_get_queue_arn, aws_client):
|
|
594
594
|
subscriptions = []
|
|
595
595
|
|
|
596
|
-
def _factory(topic_arn: str, queue_url: str, **kwargs) ->
|
|
596
|
+
def _factory(topic_arn: str, queue_url: str, **kwargs) -> dict[str, str]:
|
|
597
597
|
queue_arn = sqs_get_queue_arn(queue_url)
|
|
598
598
|
|
|
599
599
|
# connect sns topic to sqs
|
|
@@ -630,7 +630,7 @@ def sns_create_http_endpoint(sns_create_topic, sns_subscription, aws_client):
|
|
|
630
630
|
|
|
631
631
|
def _create_http_endpoint(
|
|
632
632
|
raw_message_delivery: bool = False,
|
|
633
|
-
) ->
|
|
633
|
+
) -> tuple[str, str, str, HTTPServer]:
|
|
634
634
|
server = HTTPServer()
|
|
635
635
|
server.start()
|
|
636
636
|
http_servers.append(server)
|
|
@@ -1004,7 +1004,7 @@ def opensearch_document_path(opensearch_endpoint, aws_client):
|
|
|
1004
1004
|
# Cleanup fixtures
|
|
1005
1005
|
@pytest.fixture
|
|
1006
1006
|
def cleanup_stacks(aws_client):
|
|
1007
|
-
def _cleanup_stacks(stacks:
|
|
1007
|
+
def _cleanup_stacks(stacks: list[str]) -> None:
|
|
1008
1008
|
stacks = ensure_list(stacks)
|
|
1009
1009
|
for stack in stacks:
|
|
1010
1010
|
try:
|
|
@@ -1018,7 +1018,7 @@ def cleanup_stacks(aws_client):
|
|
|
1018
1018
|
|
|
1019
1019
|
@pytest.fixture
|
|
1020
1020
|
def cleanup_changesets(aws_client):
|
|
1021
|
-
def _cleanup_changesets(changesets:
|
|
1021
|
+
def _cleanup_changesets(changesets: list[str]) -> None:
|
|
1022
1022
|
changesets = ensure_list(changesets)
|
|
1023
1023
|
for cs in changesets:
|
|
1024
1024
|
try:
|
|
@@ -1039,7 +1039,7 @@ class DeployResult:
|
|
|
1039
1039
|
stack_id: str
|
|
1040
1040
|
stack_name: str
|
|
1041
1041
|
change_set_name: str
|
|
1042
|
-
outputs:
|
|
1042
|
+
outputs: dict[str, str]
|
|
1043
1043
|
|
|
1044
1044
|
destroy: Callable[[], None]
|
|
1045
1045
|
|
|
@@ -1089,8 +1089,8 @@ def deploy_cfn_template(
|
|
|
1089
1089
|
change_set_name: Optional[str] = None,
|
|
1090
1090
|
template: Optional[str] = None,
|
|
1091
1091
|
template_path: Optional[str | os.PathLike] = None,
|
|
1092
|
-
template_mapping: Optional[
|
|
1093
|
-
parameters: Optional[
|
|
1092
|
+
template_mapping: Optional[dict[str, Any]] = None,
|
|
1093
|
+
parameters: Optional[dict[str, str]] = None,
|
|
1094
1094
|
role_arn: Optional[str] = None,
|
|
1095
1095
|
max_wait: Optional[int] = None,
|
|
1096
1096
|
delay_between_polls: Optional[int] = 2,
|
|
@@ -1238,7 +1238,7 @@ def is_stack_deleted(aws_client):
|
|
|
1238
1238
|
return _has_stack_status(aws_client.cloudformation, ["DELETE_COMPLETE"])
|
|
1239
1239
|
|
|
1240
1240
|
|
|
1241
|
-
def _has_stack_status(cfn_client, statuses:
|
|
1241
|
+
def _has_stack_status(cfn_client, statuses: list[str]):
|
|
1242
1242
|
def _has_status(stack_id: str):
|
|
1243
1243
|
def _inner():
|
|
1244
1244
|
resp = cfn_client.describe_stacks(StackName=stack_id)
|
|
@@ -1514,7 +1514,7 @@ def create_event_source_mapping(aws_client):
|
|
|
1514
1514
|
|
|
1515
1515
|
@pytest.fixture
|
|
1516
1516
|
def check_lambda_logs(aws_client):
|
|
1517
|
-
def _check_logs(func_name: str, expected_lines:
|
|
1517
|
+
def _check_logs(func_name: str, expected_lines: list[str] = None) -> list[str]:
|
|
1518
1518
|
if not expected_lines:
|
|
1519
1519
|
expected_lines = []
|
|
1520
1520
|
log_events = get_lambda_logs(func_name, logs_client=aws_client.logs)
|
|
@@ -2290,7 +2290,7 @@ def echo_http_server_post(echo_http_server):
|
|
|
2290
2290
|
return f"{echo_http_server}post"
|
|
2291
2291
|
|
|
2292
2292
|
|
|
2293
|
-
def create_policy_doc(effect: str, actions:
|
|
2293
|
+
def create_policy_doc(effect: str, actions: list, resource=None) -> dict:
|
|
2294
2294
|
actions = ensure_list(actions)
|
|
2295
2295
|
resource = resource or "*"
|
|
2296
2296
|
return {
|
|
@@ -3,7 +3,7 @@ Custom pytest mark typings
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import os
|
|
6
|
-
from typing import TYPE_CHECKING, Callable,
|
|
6
|
+
from typing import TYPE_CHECKING, Callable, Optional
|
|
7
7
|
|
|
8
8
|
import pytest
|
|
9
9
|
from _pytest.config import PytestPluginManager
|
|
@@ -36,13 +36,13 @@ class SkipSnapshotVerifyMarker:
|
|
|
36
36
|
def __call__(
|
|
37
37
|
self,
|
|
38
38
|
*,
|
|
39
|
-
paths: "Optional[
|
|
39
|
+
paths: "Optional[list[str]]" = None,
|
|
40
40
|
condition: "Optional[Callable[[...], bool]]" = None,
|
|
41
41
|
): ...
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
class MultiRuntimeMarker:
|
|
45
|
-
def __call__(self, *, scenario: str, runtimes: Optional[
|
|
45
|
+
def __call__(self, *, scenario: str, runtimes: Optional[list[str]] = None): ...
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
class SnapshotMarkers:
|
|
@@ -82,7 +82,7 @@ def pytest_addoption(parser: Parser, pluginmanager: PytestPluginManager):
|
|
|
82
82
|
)
|
|
83
83
|
|
|
84
84
|
|
|
85
|
-
def enforce_single_aws_marker(items:
|
|
85
|
+
def enforce_single_aws_marker(items: list[pytest.Item]):
|
|
86
86
|
"""Enforce that each test has exactly one aws compatibility marker"""
|
|
87
87
|
marker_errors = []
|
|
88
88
|
|
|
@@ -107,7 +107,7 @@ def enforce_single_aws_marker(items: List[pytest.Item]):
|
|
|
107
107
|
raise pytest.UsageError(*marker_errors)
|
|
108
108
|
|
|
109
109
|
|
|
110
|
-
def filter_by_markers(config: "Config", items:
|
|
110
|
+
def filter_by_markers(config: "Config", items: list[pytest.Item]):
|
|
111
111
|
"""Filter tests by markers."""
|
|
112
112
|
from localstack import config as localstack_config
|
|
113
113
|
from localstack.utils.bootstrap import in_ci
|
|
@@ -154,7 +154,7 @@ def filter_by_markers(config: "Config", items: List[pytest.Item]):
|
|
|
154
154
|
|
|
155
155
|
@pytest.hookimpl
|
|
156
156
|
def pytest_collection_modifyitems(
|
|
157
|
-
session: pytest.Session, config: "Config", items:
|
|
157
|
+
session: pytest.Session, config: "Config", items: list[pytest.Item]
|
|
158
158
|
) -> None:
|
|
159
159
|
enforce_single_aws_marker(items)
|
|
160
160
|
filter_by_markers(config, items)
|
|
@@ -49,7 +49,7 @@ def pytest_collection_modifyitems(config, items):
|
|
|
49
49
|
if not os.path.exists(pathfilter_file):
|
|
50
50
|
raise ValueError(f"Pathfilter file does not exist: {pathfilter_file}")
|
|
51
51
|
|
|
52
|
-
with open(pathfilter_file
|
|
52
|
+
with open(pathfilter_file) as f:
|
|
53
53
|
pathfilter_substrings = [line.strip() for line in f.readlines() if line.strip()]
|
|
54
54
|
|
|
55
55
|
if not pathfilter_substrings:
|
|
@@ -342,7 +342,7 @@ def is_execution_logs_list_complete(
|
|
|
342
342
|
|
|
343
343
|
def _await_on_execution_log_stream_created(target_aws_client, log_group_name: str) -> str:
|
|
344
344
|
logs_client = target_aws_client.logs
|
|
345
|
-
log_stream_name =
|
|
345
|
+
log_stream_name = ""
|
|
346
346
|
|
|
347
347
|
def _run_check():
|
|
348
348
|
nonlocal log_stream_name
|
|
@@ -9,7 +9,7 @@ import datetime
|
|
|
9
9
|
import json
|
|
10
10
|
import os
|
|
11
11
|
from pathlib import Path
|
|
12
|
-
from typing import
|
|
12
|
+
from typing import Optional
|
|
13
13
|
|
|
14
14
|
import pytest
|
|
15
15
|
from pluggy import Result
|
|
@@ -17,7 +17,7 @@ from pytest import StashKey, TestReport
|
|
|
17
17
|
|
|
18
18
|
from localstack.testing.aws.util import is_aws_cloud
|
|
19
19
|
|
|
20
|
-
durations_key = StashKey[
|
|
20
|
+
durations_key = StashKey[dict[str, float]]()
|
|
21
21
|
"""
|
|
22
22
|
Stores phase durations on the test node between execution phases.
|
|
23
23
|
See https://docs.pytest.org/en/latest/reference/reference.html#pytest.Stash
|
|
@@ -35,7 +35,7 @@ def find_validation_data_for_item(item: pytest.Item) -> Optional[dict]:
|
|
|
35
35
|
if not os.path.exists(snapshot_path):
|
|
36
36
|
return None
|
|
37
37
|
|
|
38
|
-
with open(snapshot_path
|
|
38
|
+
with open(snapshot_path) as fd:
|
|
39
39
|
file_content = json.load(fd)
|
|
40
40
|
return file_content.get(item.nodeid)
|
|
41
41
|
|