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
|
@@ -6,7 +6,7 @@ import os
|
|
|
6
6
|
import re
|
|
7
7
|
import shlex
|
|
8
8
|
import subprocess
|
|
9
|
-
from
|
|
9
|
+
from collections.abc import Callable
|
|
10
10
|
|
|
11
11
|
from localstack import config
|
|
12
12
|
from localstack.utils.collections import ensure_list
|
|
@@ -96,9 +96,9 @@ class CmdDockerClient(ContainerClient):
|
|
|
96
96
|
different response payloads or error messages returned by the `docker` vs `podman` commands.
|
|
97
97
|
"""
|
|
98
98
|
|
|
99
|
-
default_run_outfile:
|
|
99
|
+
default_run_outfile: str | None = None
|
|
100
100
|
|
|
101
|
-
def _docker_cmd(self) ->
|
|
101
|
+
def _docker_cmd(self) -> list[str]:
|
|
102
102
|
"""
|
|
103
103
|
Get the configured, tested Docker CMD.
|
|
104
104
|
:return: string to be used for running Docker commands
|
|
@@ -202,7 +202,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
202
202
|
except subprocess.CalledProcessError as e:
|
|
203
203
|
self._check_and_raise_no_such_container_error(container_name, error=e)
|
|
204
204
|
raise ContainerException(
|
|
205
|
-
"Docker process returned with errorcode
|
|
205
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
206
206
|
) from e
|
|
207
207
|
|
|
208
208
|
def pause_container(self, container_name: str) -> None:
|
|
@@ -214,7 +214,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
214
214
|
except subprocess.CalledProcessError as e:
|
|
215
215
|
self._check_and_raise_no_such_container_error(container_name, error=e)
|
|
216
216
|
raise ContainerException(
|
|
217
|
-
"Docker process returned with errorcode
|
|
217
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
218
218
|
) from e
|
|
219
219
|
|
|
220
220
|
def unpause_container(self, container_name: str) -> None:
|
|
@@ -226,7 +226,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
226
226
|
except subprocess.CalledProcessError as e:
|
|
227
227
|
self._check_and_raise_no_such_container_error(container_name, error=e)
|
|
228
228
|
raise ContainerException(
|
|
229
|
-
"Docker process returned with errorcode
|
|
229
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
230
230
|
) from e
|
|
231
231
|
|
|
232
232
|
def remove_image(self, image: str, force: bool = True) -> None:
|
|
@@ -243,7 +243,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
243
243
|
if any(msg in to_str(e.stdout) for msg in error_messages):
|
|
244
244
|
raise NoSuchImage(image, stdout=e.stdout, stderr=e.stderr)
|
|
245
245
|
raise ContainerException(
|
|
246
|
-
"Docker process returned with errorcode
|
|
246
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
247
247
|
) from e
|
|
248
248
|
|
|
249
249
|
def commit(
|
|
@@ -262,26 +262,34 @@ class CmdDockerClient(ContainerClient):
|
|
|
262
262
|
except subprocess.CalledProcessError as e:
|
|
263
263
|
self._check_and_raise_no_such_container_error(container_name_or_id, error=e)
|
|
264
264
|
raise ContainerException(
|
|
265
|
-
"Docker process returned with errorcode
|
|
265
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
266
266
|
) from e
|
|
267
267
|
|
|
268
|
-
def remove_container(
|
|
269
|
-
|
|
268
|
+
def remove_container(
|
|
269
|
+
self, container_name: str, force=True, check_existence=False, volumes=False
|
|
270
|
+
) -> None:
|
|
271
|
+
if check_existence and container_name not in self.get_all_container_names():
|
|
270
272
|
return
|
|
271
273
|
cmd = self._docker_cmd() + ["rm"]
|
|
272
274
|
if force:
|
|
273
275
|
cmd.append("-f")
|
|
276
|
+
if volumes:
|
|
277
|
+
cmd.append("--volumes")
|
|
274
278
|
cmd.append(container_name)
|
|
275
279
|
LOG.debug("Removing container with cmd %s", cmd)
|
|
276
280
|
try:
|
|
277
|
-
run(cmd)
|
|
281
|
+
output = run(cmd)
|
|
282
|
+
# When the container does not exist, the output could have the error message without any exception
|
|
283
|
+
if isinstance(output, str) and not force:
|
|
284
|
+
self._check_output_and_raise_no_such_container_error(container_name, output=output)
|
|
278
285
|
except subprocess.CalledProcessError as e:
|
|
279
|
-
|
|
286
|
+
if not force:
|
|
287
|
+
self._check_and_raise_no_such_container_error(container_name, error=e)
|
|
280
288
|
raise ContainerException(
|
|
281
|
-
"Docker process returned with errorcode
|
|
289
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
282
290
|
) from e
|
|
283
291
|
|
|
284
|
-
def list_containers(self, filter:
|
|
292
|
+
def list_containers(self, filter: list[str] | str | None = None, all=True) -> list[dict]:
|
|
285
293
|
filter = [filter] if isinstance(filter, str) else filter
|
|
286
294
|
cmd = self._docker_cmd()
|
|
287
295
|
cmd.append("ps")
|
|
@@ -297,7 +305,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
297
305
|
cmd_result = run(cmd).strip()
|
|
298
306
|
except subprocess.CalledProcessError as e:
|
|
299
307
|
raise ContainerException(
|
|
300
|
-
"Docker process returned with errorcode
|
|
308
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
301
309
|
) from e
|
|
302
310
|
container_list = []
|
|
303
311
|
if cmd_result:
|
|
@@ -351,14 +359,14 @@ class CmdDockerClient(ContainerClient):
|
|
|
351
359
|
if re.match(".*container .+ does not exist", to_str(e.stdout)):
|
|
352
360
|
raise NoSuchContainer(container_name, stdout=e.stdout, stderr=e.stderr)
|
|
353
361
|
raise ContainerException(
|
|
354
|
-
"Docker process returned with errorcode
|
|
362
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
355
363
|
) from e
|
|
356
364
|
|
|
357
365
|
def pull_image(
|
|
358
366
|
self,
|
|
359
367
|
docker_image: str,
|
|
360
|
-
platform:
|
|
361
|
-
log_handler:
|
|
368
|
+
platform: DockerPlatform | None = None,
|
|
369
|
+
log_handler: Callable[[str], None] | None = None,
|
|
362
370
|
) -> None:
|
|
363
371
|
cmd = self._docker_cmd()
|
|
364
372
|
docker_image = self.registry_resolver_strategy.resolve(docker_image)
|
|
@@ -380,7 +388,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
380
388
|
if "Trying to pull" in stdout_str and "access to the resource is denied" in stdout_str:
|
|
381
389
|
raise NoSuchImage(docker_image, stdout=e.stdout, stderr=e.stderr)
|
|
382
390
|
raise ContainerException(
|
|
383
|
-
"Docker process returned with errorcode
|
|
391
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
384
392
|
) from e
|
|
385
393
|
|
|
386
394
|
def push_image(self, docker_image: str) -> None:
|
|
@@ -412,7 +420,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
412
420
|
dockerfile_path: str,
|
|
413
421
|
image_name: str,
|
|
414
422
|
context_path: str = None,
|
|
415
|
-
platform:
|
|
423
|
+
platform: DockerPlatform | None = None,
|
|
416
424
|
):
|
|
417
425
|
cmd = self._docker_cmd()
|
|
418
426
|
dockerfile_path = Util.resolve_dockerfile_path(dockerfile_path)
|
|
@@ -474,7 +482,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
474
482
|
return ""
|
|
475
483
|
self._check_and_raise_no_such_container_error(container_name_or_id, error=e)
|
|
476
484
|
raise ContainerException(
|
|
477
|
-
"Docker process returned with errorcode
|
|
485
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
478
486
|
) from e
|
|
479
487
|
|
|
480
488
|
def stream_container_logs(self, container_name_or_id: str) -> CancellableStream:
|
|
@@ -489,7 +497,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
489
497
|
|
|
490
498
|
return CancellableProcessStream(process)
|
|
491
499
|
|
|
492
|
-
def _inspect_object(self, object_name_or_id: str) ->
|
|
500
|
+
def _inspect_object(self, object_name_or_id: str) -> dict[str, dict | list | str]:
|
|
493
501
|
cmd = self._docker_cmd()
|
|
494
502
|
cmd += ["inspect", "--format", "{{json .}}", object_name_or_id]
|
|
495
503
|
try:
|
|
@@ -499,7 +507,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
499
507
|
if "no such object" in to_str(e.stdout).lower():
|
|
500
508
|
raise NoSuchObject(object_name_or_id, stdout=e.stdout, stderr=e.stderr)
|
|
501
509
|
raise ContainerException(
|
|
502
|
-
"Docker process returned with errorcode
|
|
510
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
503
511
|
) from e
|
|
504
512
|
object_data = json.loads(cmd_result.strip())
|
|
505
513
|
if isinstance(object_data, list):
|
|
@@ -516,7 +524,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
516
524
|
)
|
|
517
525
|
return object_data
|
|
518
526
|
|
|
519
|
-
def inspect_container(self, container_name_or_id: str) ->
|
|
527
|
+
def inspect_container(self, container_name_or_id: str) -> dict[str, dict | str]:
|
|
520
528
|
try:
|
|
521
529
|
return self._inspect_object(container_name_or_id)
|
|
522
530
|
except NoSuchObject as e:
|
|
@@ -527,7 +535,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
527
535
|
image_name: str,
|
|
528
536
|
pull: bool = True,
|
|
529
537
|
strip_wellknown_repo_prefixes: bool = True,
|
|
530
|
-
) ->
|
|
538
|
+
) -> dict[str, dict | list | str]:
|
|
531
539
|
image_name = self.registry_resolver_strategy.resolve(image_name)
|
|
532
540
|
try:
|
|
533
541
|
result = self._inspect_object(image_name)
|
|
@@ -552,7 +560,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
552
560
|
return run(cmd).strip()
|
|
553
561
|
except subprocess.CalledProcessError as e:
|
|
554
562
|
raise ContainerException(
|
|
555
|
-
"Docker process returned with errorcode
|
|
563
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
556
564
|
) from e
|
|
557
565
|
|
|
558
566
|
def delete_network(self, network_name: str) -> None:
|
|
@@ -566,10 +574,10 @@ class CmdDockerClient(ContainerClient):
|
|
|
566
574
|
raise NoSuchNetwork(network_name=network_name)
|
|
567
575
|
else:
|
|
568
576
|
raise ContainerException(
|
|
569
|
-
"Docker process returned with errorcode
|
|
577
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
570
578
|
) from e
|
|
571
579
|
|
|
572
|
-
def inspect_network(self, network_name: str) ->
|
|
580
|
+
def inspect_network(self, network_name: str) -> dict[str, dict | str]:
|
|
573
581
|
try:
|
|
574
582
|
return self._inspect_object(network_name)
|
|
575
583
|
except NoSuchObject as e:
|
|
@@ -579,8 +587,8 @@ class CmdDockerClient(ContainerClient):
|
|
|
579
587
|
self,
|
|
580
588
|
network_name: str,
|
|
581
589
|
container_name_or_id: str,
|
|
582
|
-
aliases:
|
|
583
|
-
link_local_ips:
|
|
590
|
+
aliases: list | None = None,
|
|
591
|
+
link_local_ips: list[str] = None,
|
|
584
592
|
) -> None:
|
|
585
593
|
LOG.debug(
|
|
586
594
|
"Connecting container '%s' to network '%s' with aliases '%s'",
|
|
@@ -603,7 +611,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
603
611
|
raise NoSuchNetwork(network_name=network_name)
|
|
604
612
|
self._check_and_raise_no_such_container_error(container_name_or_id, error=e)
|
|
605
613
|
raise ContainerException(
|
|
606
|
-
"Docker process returned with errorcode
|
|
614
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
607
615
|
) from e
|
|
608
616
|
|
|
609
617
|
def disconnect_container_from_network(
|
|
@@ -621,7 +629,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
621
629
|
raise NoSuchNetwork(network_name=network_name)
|
|
622
630
|
self._check_and_raise_no_such_container_error(container_name_or_id, error=e)
|
|
623
631
|
raise ContainerException(
|
|
624
|
-
"Docker process returned with errorcode
|
|
632
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
625
633
|
) from e
|
|
626
634
|
|
|
627
635
|
def get_container_ip(self, container_name_or_id: str) -> str:
|
|
@@ -641,10 +649,10 @@ class CmdDockerClient(ContainerClient):
|
|
|
641
649
|
if "no such object" in to_str(e.stdout).lower():
|
|
642
650
|
raise NoSuchContainer(container_name_or_id, stdout=e.stdout, stderr=e.stderr)
|
|
643
651
|
raise ContainerException(
|
|
644
|
-
"Docker process returned with errorcode
|
|
652
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
645
653
|
) from e
|
|
646
654
|
|
|
647
|
-
def login(self, username: str, password: str, registry:
|
|
655
|
+
def login(self, username: str, password: str, registry: str | None = None) -> None:
|
|
648
656
|
cmd = self._docker_cmd()
|
|
649
657
|
# TODO specify password via stdin
|
|
650
658
|
cmd += ["login", "-u", username, "-p", password]
|
|
@@ -654,10 +662,10 @@ class CmdDockerClient(ContainerClient):
|
|
|
654
662
|
run(cmd)
|
|
655
663
|
except subprocess.CalledProcessError as e:
|
|
656
664
|
raise ContainerException(
|
|
657
|
-
"Docker process returned with errorcode
|
|
665
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
658
666
|
) from e
|
|
659
667
|
|
|
660
|
-
@functools.
|
|
668
|
+
@functools.cache
|
|
661
669
|
def has_docker(self) -> bool:
|
|
662
670
|
try:
|
|
663
671
|
# do not use self._docker_cmd here (would result in a loop)
|
|
@@ -680,12 +688,12 @@ class CmdDockerClient(ContainerClient):
|
|
|
680
688
|
if any(msg in to_str(e.stdout) for msg in error_messages):
|
|
681
689
|
raise NoSuchImage(image_name, stdout=e.stdout, stderr=e.stderr)
|
|
682
690
|
raise ContainerException(
|
|
683
|
-
"Docker process returned with errorcode
|
|
691
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
684
692
|
) from e
|
|
685
693
|
finally:
|
|
686
694
|
Util.rm_env_vars_file(env_file)
|
|
687
695
|
|
|
688
|
-
def run_container(self, image_name: str, stdin=None, **kwargs) ->
|
|
696
|
+
def run_container(self, image_name: str, stdin=None, **kwargs) -> tuple[bytes, bytes]:
|
|
689
697
|
image_name = self.registry_resolver_strategy.resolve(image_name)
|
|
690
698
|
cmd, env_file = self._build_run_create_cmd("run", image_name, **kwargs)
|
|
691
699
|
LOG.debug("Run container with cmd: %s", cmd)
|
|
@@ -701,14 +709,14 @@ class CmdDockerClient(ContainerClient):
|
|
|
701
709
|
def exec_in_container(
|
|
702
710
|
self,
|
|
703
711
|
container_name_or_id: str,
|
|
704
|
-
command:
|
|
712
|
+
command: list[str] | str,
|
|
705
713
|
interactive=False,
|
|
706
714
|
detach=False,
|
|
707
|
-
env_vars:
|
|
708
|
-
stdin:
|
|
709
|
-
user:
|
|
710
|
-
workdir:
|
|
711
|
-
) ->
|
|
715
|
+
env_vars: dict[str, str | None] | None = None,
|
|
716
|
+
stdin: bytes | None = None,
|
|
717
|
+
user: str | None = None,
|
|
718
|
+
workdir: str | None = None,
|
|
719
|
+
) -> tuple[bytes, bytes]:
|
|
712
720
|
env_file = None
|
|
713
721
|
cmd = self._docker_cmd()
|
|
714
722
|
cmd.append("exec")
|
|
@@ -724,7 +732,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
724
732
|
env_flag, env_file = Util.create_env_vars_file_flag(env_vars)
|
|
725
733
|
cmd += env_flag
|
|
726
734
|
cmd.append(container_name_or_id)
|
|
727
|
-
cmd += command if isinstance(command,
|
|
735
|
+
cmd += command if isinstance(command, list) else [command]
|
|
728
736
|
LOG.debug("Execute command in container: %s", cmd)
|
|
729
737
|
try:
|
|
730
738
|
return self._run_async_cmd(cmd, stdin, container_name_or_id)
|
|
@@ -737,8 +745,8 @@ class CmdDockerClient(ContainerClient):
|
|
|
737
745
|
stdin=None,
|
|
738
746
|
interactive: bool = False,
|
|
739
747
|
attach: bool = False,
|
|
740
|
-
flags:
|
|
741
|
-
) ->
|
|
748
|
+
flags: str | None = None,
|
|
749
|
+
) -> tuple[bytes, bytes]:
|
|
742
750
|
cmd = self._docker_cmd() + ["start"]
|
|
743
751
|
if flags:
|
|
744
752
|
cmd.append(flags)
|
|
@@ -756,8 +764,8 @@ class CmdDockerClient(ContainerClient):
|
|
|
756
764
|
return self._run_async_cmd(cmd, stdin=None, container_name=container_name_or_id)
|
|
757
765
|
|
|
758
766
|
def _run_async_cmd(
|
|
759
|
-
self, cmd:
|
|
760
|
-
) ->
|
|
767
|
+
self, cmd: list[str], stdin: bytes, container_name: str, image_name=None
|
|
768
|
+
) -> tuple[bytes, bytes]:
|
|
761
769
|
kwargs = {
|
|
762
770
|
"inherit_env": True,
|
|
763
771
|
"asynchronous": True,
|
|
@@ -787,7 +795,7 @@ class CmdDockerClient(ContainerClient):
|
|
|
787
795
|
if any(msg.lower() in to_str(e.stderr).lower() for msg in error_messages):
|
|
788
796
|
raise NoSuchContainer(container_name, stdout=e.stdout, stderr=e.stderr)
|
|
789
797
|
raise ContainerException(
|
|
790
|
-
"Docker process returned with errorcode
|
|
798
|
+
f"Docker process returned with errorcode {e.returncode}", e.stdout, e.stderr
|
|
791
799
|
) from e
|
|
792
800
|
|
|
793
801
|
def _build_run_create_cmd(
|
|
@@ -795,32 +803,32 @@ class CmdDockerClient(ContainerClient):
|
|
|
795
803
|
action: str,
|
|
796
804
|
image_name: str,
|
|
797
805
|
*,
|
|
798
|
-
name:
|
|
799
|
-
entrypoint:
|
|
806
|
+
name: str | None = None,
|
|
807
|
+
entrypoint: list[str] | str | None = None,
|
|
800
808
|
remove: bool = False,
|
|
801
809
|
interactive: bool = False,
|
|
802
810
|
tty: bool = False,
|
|
803
811
|
detach: bool = False,
|
|
804
|
-
command:
|
|
805
|
-
volumes:
|
|
806
|
-
ports:
|
|
807
|
-
exposed_ports:
|
|
808
|
-
env_vars:
|
|
809
|
-
user:
|
|
810
|
-
cap_add:
|
|
811
|
-
cap_drop:
|
|
812
|
-
security_opt:
|
|
813
|
-
network:
|
|
814
|
-
dns:
|
|
815
|
-
additional_flags:
|
|
816
|
-
workdir:
|
|
817
|
-
privileged:
|
|
818
|
-
labels:
|
|
819
|
-
platform:
|
|
820
|
-
ulimits:
|
|
821
|
-
init:
|
|
822
|
-
log_config:
|
|
823
|
-
) ->
|
|
812
|
+
command: list[str] | str | None = None,
|
|
813
|
+
volumes: list[SimpleVolumeBind] | None = None,
|
|
814
|
+
ports: PortMappings | None = None,
|
|
815
|
+
exposed_ports: list[str] | None = None,
|
|
816
|
+
env_vars: dict[str, str] | None = None,
|
|
817
|
+
user: str | None = None,
|
|
818
|
+
cap_add: list[str] | None = None,
|
|
819
|
+
cap_drop: list[str] | None = None,
|
|
820
|
+
security_opt: list[str] | None = None,
|
|
821
|
+
network: str | None = None,
|
|
822
|
+
dns: str | list[str] | None = None,
|
|
823
|
+
additional_flags: str | None = None,
|
|
824
|
+
workdir: str | None = None,
|
|
825
|
+
privileged: bool | None = None,
|
|
826
|
+
labels: dict[str, str] | None = None,
|
|
827
|
+
platform: DockerPlatform | None = None,
|
|
828
|
+
ulimits: list[Ulimit] | None = None,
|
|
829
|
+
init: bool | None = None,
|
|
830
|
+
log_config: LogConfig | None = None,
|
|
831
|
+
) -> tuple[list[str], str]:
|
|
824
832
|
env_file = None
|
|
825
833
|
cmd = self._docker_cmd() + [action]
|
|
826
834
|
if remove:
|
|
@@ -888,11 +896,11 @@ class CmdDockerClient(ContainerClient):
|
|
|
888
896
|
cmd += shlex.split(additional_flags)
|
|
889
897
|
cmd.append(image_name)
|
|
890
898
|
if command:
|
|
891
|
-
cmd += command if isinstance(command,
|
|
899
|
+
cmd += command if isinstance(command, list) else [command]
|
|
892
900
|
return cmd, env_file
|
|
893
901
|
|
|
894
902
|
@staticmethod
|
|
895
|
-
def _map_to_volume_param(volume:
|
|
903
|
+
def _map_to_volume_param(volume: SimpleVolumeBind | BindMount | VolumeDirMount) -> str:
|
|
896
904
|
"""
|
|
897
905
|
Maps the mount volume, to a parameter for the -v docker cli argument.
|
|
898
906
|
|
|
@@ -915,20 +923,28 @@ class CmdDockerClient(ContainerClient):
|
|
|
915
923
|
Check the given client invocation error and raise a `NoSuchContainer` exception if it
|
|
916
924
|
represents a `no such container` exception from Docker or Podman.
|
|
917
925
|
"""
|
|
926
|
+
self._check_output_and_raise_no_such_container_error(
|
|
927
|
+
container_name_or_id, str(error.stdout), error=str(error.stderr)
|
|
928
|
+
)
|
|
918
929
|
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
930
|
+
def _check_output_and_raise_no_such_container_error(
|
|
931
|
+
self, container_name_or_id: str, output: str, error: str | None = None
|
|
932
|
+
):
|
|
933
|
+
"""
|
|
934
|
+
Check the given client invocation output and raise a `NoSuchContainer` exception if it
|
|
935
|
+
represents a `no such container` exception from Docker or Podman.
|
|
936
|
+
"""
|
|
937
|
+
possible_not_found_messages = ("No such container", "no container with name or ID")
|
|
938
|
+
if any(msg.lower() in output.lower() for msg in possible_not_found_messages):
|
|
939
|
+
raise NoSuchContainer(container_name_or_id, stdout=output, stderr=error)
|
|
924
940
|
|
|
925
|
-
def _transform_container_labels(self, labels:
|
|
941
|
+
def _transform_container_labels(self, labels: str | dict[str, str]) -> dict[str, str]:
|
|
926
942
|
"""
|
|
927
943
|
Transforms the container labels returned by the docker command from the key-value pair format to a dict
|
|
928
944
|
:param labels: Input string, comma separated key value pairs. Example: key1=value1,key2=value2
|
|
929
945
|
:return: Dict representation of the passed values, example: {"key1": "value1", "key2": "value2"}
|
|
930
946
|
"""
|
|
931
|
-
if isinstance(labels,
|
|
947
|
+
if isinstance(labels, dict):
|
|
932
948
|
return labels
|
|
933
949
|
|
|
934
950
|
labels = labels.split(",")
|