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
|
@@ -5,24 +5,17 @@ import logging
|
|
|
5
5
|
import os
|
|
6
6
|
import re
|
|
7
7
|
import shlex
|
|
8
|
-
import sys
|
|
9
8
|
import tarfile
|
|
10
9
|
import tempfile
|
|
11
10
|
from abc import ABCMeta, abstractmethod
|
|
11
|
+
from collections.abc import Callable
|
|
12
12
|
from enum import Enum, unique
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
from typing import (
|
|
15
|
-
Callable,
|
|
16
|
-
Dict,
|
|
17
|
-
List,
|
|
18
15
|
Literal,
|
|
19
16
|
NamedTuple,
|
|
20
|
-
Optional,
|
|
21
17
|
Protocol,
|
|
22
|
-
Tuple,
|
|
23
18
|
TypedDict,
|
|
24
|
-
Union,
|
|
25
|
-
get_args,
|
|
26
19
|
)
|
|
27
20
|
|
|
28
21
|
import dotenv
|
|
@@ -60,7 +53,7 @@ class DockerContainerStats(TypedDict):
|
|
|
60
53
|
MemUsage: tuple[int, int]
|
|
61
54
|
NetIO: tuple[int, int]
|
|
62
55
|
PIDs: int
|
|
63
|
-
SDKStats:
|
|
56
|
+
SDKStats: dict | None
|
|
64
57
|
|
|
65
58
|
|
|
66
59
|
class ContainerException(Exception):
|
|
@@ -146,7 +139,7 @@ class Ulimit:
|
|
|
146
139
|
|
|
147
140
|
name: str
|
|
148
141
|
soft_limit: int
|
|
149
|
-
hard_limit:
|
|
142
|
+
hard_limit: int | None = None
|
|
150
143
|
|
|
151
144
|
def __repr__(self):
|
|
152
145
|
"""Format: <type>=<soft limit>[:<hard limit>]"""
|
|
@@ -157,26 +150,18 @@ class Ulimit:
|
|
|
157
150
|
|
|
158
151
|
|
|
159
152
|
# defines the type for port mappings (source->target port range)
|
|
160
|
-
PortRange =
|
|
153
|
+
PortRange = list | HashableList
|
|
161
154
|
# defines the protocol for a port range ("tcp" or "udp")
|
|
162
155
|
PortProtocol = str
|
|
163
156
|
|
|
164
157
|
|
|
165
|
-
def isinstance_union(obj, class_or_tuple):
|
|
166
|
-
# that's some dirty hack
|
|
167
|
-
if sys.version_info < (3, 10):
|
|
168
|
-
return isinstance(obj, get_args(PortRange))
|
|
169
|
-
else:
|
|
170
|
-
return isinstance(obj, class_or_tuple)
|
|
171
|
-
|
|
172
|
-
|
|
173
158
|
class PortMappings:
|
|
174
159
|
"""Maps source to target port ranges for Docker port mappings."""
|
|
175
160
|
|
|
176
161
|
# bind host to be used for defining port mappings
|
|
177
162
|
bind_host: str
|
|
178
163
|
# maps `from` port range to `to` port range for port mappings
|
|
179
|
-
mappings:
|
|
164
|
+
mappings: dict[tuple[PortRange, PortProtocol], list]
|
|
180
165
|
|
|
181
166
|
def __init__(self, bind_host: str = None):
|
|
182
167
|
self.bind_host = bind_host if bind_host else ""
|
|
@@ -184,14 +169,14 @@ class PortMappings:
|
|
|
184
169
|
|
|
185
170
|
def add(
|
|
186
171
|
self,
|
|
187
|
-
port:
|
|
188
|
-
mapped:
|
|
172
|
+
port: int | PortRange,
|
|
173
|
+
mapped: int | PortRange = None,
|
|
189
174
|
protocol: PortProtocol = "tcp",
|
|
190
175
|
):
|
|
191
176
|
mapped = mapped or port
|
|
192
|
-
if
|
|
177
|
+
if isinstance(port, PortRange):
|
|
193
178
|
for i in range(port[1] - port[0] + 1):
|
|
194
|
-
if
|
|
179
|
+
if isinstance(mapped, PortRange):
|
|
195
180
|
self.add(port[0] + i, mapped[0] + i, protocol)
|
|
196
181
|
else:
|
|
197
182
|
self.add(port[0] + i, mapped, protocol)
|
|
@@ -253,7 +238,7 @@ class PortMappings:
|
|
|
253
238
|
|
|
254
239
|
return " ".join([entry(k, v) for k, v in self.mappings.items()])
|
|
255
240
|
|
|
256
|
-
def to_list(self) ->
|
|
241
|
+
def to_list(self) -> list[str]: # TODO test
|
|
257
242
|
bind_address = f"{self.bind_host}:" if self.bind_host else ""
|
|
258
243
|
|
|
259
244
|
def entry(k, v):
|
|
@@ -269,7 +254,7 @@ class PortMappings:
|
|
|
269
254
|
|
|
270
255
|
return [item for k, v in self.mappings.items() for item in entry(k, v)]
|
|
271
256
|
|
|
272
|
-
def to_dict(self) ->
|
|
257
|
+
def to_dict(self) -> dict[str, tuple[str, int | list[int]] | int]:
|
|
273
258
|
bind_address = self.bind_host or ""
|
|
274
259
|
|
|
275
260
|
def bind_port(bind_address, host_port):
|
|
@@ -367,7 +352,7 @@ class PortMappings:
|
|
|
367
352
|
return f"<PortMappings: {self.to_dict()}>"
|
|
368
353
|
|
|
369
354
|
|
|
370
|
-
SimpleVolumeBind =
|
|
355
|
+
SimpleVolumeBind = tuple[str, str]
|
|
371
356
|
"""Type alias for a simple version of VolumeBind"""
|
|
372
357
|
|
|
373
358
|
|
|
@@ -455,27 +440,23 @@ class VolumeDirMount:
|
|
|
455
440
|
|
|
456
441
|
|
|
457
442
|
class VolumeMappings:
|
|
458
|
-
mappings:
|
|
443
|
+
mappings: list[SimpleVolumeBind | BindMount]
|
|
459
444
|
|
|
460
|
-
def __init__(self, mappings:
|
|
445
|
+
def __init__(self, mappings: list[SimpleVolumeBind | BindMount | VolumeDirMount] = None):
|
|
461
446
|
self.mappings = mappings if mappings is not None else []
|
|
462
447
|
|
|
463
|
-
def add(self, mapping:
|
|
448
|
+
def add(self, mapping: SimpleVolumeBind | BindMount | VolumeDirMount):
|
|
464
449
|
self.append(mapping)
|
|
465
450
|
|
|
466
451
|
def append(
|
|
467
452
|
self,
|
|
468
|
-
mapping:
|
|
469
|
-
SimpleVolumeBind,
|
|
470
|
-
BindMount,
|
|
471
|
-
VolumeDirMount,
|
|
472
|
-
],
|
|
453
|
+
mapping: SimpleVolumeBind | BindMount | VolumeDirMount,
|
|
473
454
|
):
|
|
474
455
|
self.mappings.append(mapping)
|
|
475
456
|
|
|
476
457
|
def find_target_mapping(
|
|
477
458
|
self, container_dir: str
|
|
478
|
-
) ->
|
|
459
|
+
) -> SimpleVolumeBind | BindMount | VolumeDirMount | None:
|
|
479
460
|
"""
|
|
480
461
|
Looks through the volumes and returns the one where the container dir matches ``container_dir``.
|
|
481
462
|
Returns None if there is no volume mapping to the given container directory.
|
|
@@ -514,27 +495,27 @@ class VolumeInfo(NamedTuple):
|
|
|
514
495
|
mode: str
|
|
515
496
|
rw: bool
|
|
516
497
|
propagation: str
|
|
517
|
-
name:
|
|
518
|
-
driver:
|
|
498
|
+
name: str | None = None
|
|
499
|
+
driver: str | None = None
|
|
519
500
|
|
|
520
501
|
|
|
521
502
|
@dataclasses.dataclass
|
|
522
503
|
class LogConfig:
|
|
523
504
|
type: Literal["json-file", "syslog", "journald", "gelf", "fluentd", "none", "awslogs", "splunk"]
|
|
524
|
-
config:
|
|
505
|
+
config: dict[str, str] = dataclasses.field(default_factory=dict)
|
|
525
506
|
|
|
526
507
|
|
|
527
508
|
@dataclasses.dataclass
|
|
528
509
|
class ContainerConfiguration:
|
|
529
510
|
image_name: str
|
|
530
|
-
name:
|
|
511
|
+
name: str | None = None
|
|
531
512
|
volumes: VolumeMappings = dataclasses.field(default_factory=VolumeMappings)
|
|
532
513
|
ports: PortMappings = dataclasses.field(default_factory=PortMappings)
|
|
533
|
-
exposed_ports:
|
|
534
|
-
entrypoint:
|
|
535
|
-
additional_flags:
|
|
536
|
-
command:
|
|
537
|
-
env_vars:
|
|
514
|
+
exposed_ports: list[str] = dataclasses.field(default_factory=list)
|
|
515
|
+
entrypoint: list[str] | str | None = None
|
|
516
|
+
additional_flags: str | None = None
|
|
517
|
+
command: list[str] | None = None
|
|
518
|
+
env_vars: dict[str, str] = dataclasses.field(default_factory=dict)
|
|
538
519
|
|
|
539
520
|
privileged: bool = False
|
|
540
521
|
remove: bool = False
|
|
@@ -542,19 +523,19 @@ class ContainerConfiguration:
|
|
|
542
523
|
tty: bool = False
|
|
543
524
|
detach: bool = False
|
|
544
525
|
|
|
545
|
-
stdin:
|
|
546
|
-
user:
|
|
547
|
-
cap_add:
|
|
548
|
-
cap_drop:
|
|
549
|
-
security_opt:
|
|
550
|
-
network:
|
|
551
|
-
dns:
|
|
552
|
-
workdir:
|
|
553
|
-
platform:
|
|
554
|
-
ulimits:
|
|
555
|
-
labels:
|
|
556
|
-
init:
|
|
557
|
-
log_config:
|
|
526
|
+
stdin: str | None = None
|
|
527
|
+
user: str | None = None
|
|
528
|
+
cap_add: list[str] | None = None
|
|
529
|
+
cap_drop: list[str] | None = None
|
|
530
|
+
security_opt: list[str] | None = None
|
|
531
|
+
network: str | None = None
|
|
532
|
+
dns: str | None = None
|
|
533
|
+
workdir: str | None = None
|
|
534
|
+
platform: str | None = None
|
|
535
|
+
ulimits: list[Ulimit] | None = None
|
|
536
|
+
labels: dict[str, str] | None = None
|
|
537
|
+
init: bool | None = None
|
|
538
|
+
log_config: LogConfig | None = None
|
|
558
539
|
|
|
559
540
|
|
|
560
541
|
class ContainerConfigurator(Protocol):
|
|
@@ -577,17 +558,17 @@ class DockerRunFlags:
|
|
|
577
558
|
create: https://docs.docker.com/engine/reference/commandline/create/
|
|
578
559
|
"""
|
|
579
560
|
|
|
580
|
-
env_vars:
|
|
581
|
-
extra_hosts:
|
|
582
|
-
labels:
|
|
583
|
-
volumes:
|
|
584
|
-
network:
|
|
585
|
-
platform:
|
|
586
|
-
privileged:
|
|
587
|
-
ports:
|
|
588
|
-
ulimits:
|
|
589
|
-
user:
|
|
590
|
-
dns:
|
|
561
|
+
env_vars: dict[str, str] | None
|
|
562
|
+
extra_hosts: dict[str, str] | None
|
|
563
|
+
labels: dict[str, str] | None
|
|
564
|
+
volumes: list[SimpleVolumeBind] | None
|
|
565
|
+
network: str | None
|
|
566
|
+
platform: DockerPlatform | None
|
|
567
|
+
privileged: bool | None
|
|
568
|
+
ports: PortMappings | None
|
|
569
|
+
ulimits: list[Ulimit] | None
|
|
570
|
+
user: str | None
|
|
571
|
+
dns: list[str] | None
|
|
591
572
|
|
|
592
573
|
|
|
593
574
|
class RegistryResolverStrategy(Protocol):
|
|
@@ -621,7 +602,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
621
602
|
"""Returns the usage statistics of the container with the given name"""
|
|
622
603
|
pass
|
|
623
604
|
|
|
624
|
-
def get_networks(self, container_name: str) ->
|
|
605
|
+
def get_networks(self, container_name: str) -> list[str]:
|
|
625
606
|
LOG.debug("Getting networks for container: %s", container_name)
|
|
626
607
|
container_attrs = self.inspect_container(container_name_or_id=container_name)
|
|
627
608
|
return list(container_attrs["NetworkSettings"].get("Networks", {}).keys())
|
|
@@ -689,8 +670,16 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
689
670
|
"""Unpauses a container with the given name."""
|
|
690
671
|
|
|
691
672
|
@abstractmethod
|
|
692
|
-
def remove_container(
|
|
693
|
-
|
|
673
|
+
def remove_container(
|
|
674
|
+
self, container_name: str, force=True, check_existence=False, volumes=False
|
|
675
|
+
) -> None:
|
|
676
|
+
"""Removes container
|
|
677
|
+
|
|
678
|
+
:param container_name: Name of the container
|
|
679
|
+
:param force: Force the removal of a running container (uses SIGKILL)
|
|
680
|
+
:param check_existence: Return if container doesn't exist
|
|
681
|
+
:param volumes: Remove anonymous volumes associated with the container
|
|
682
|
+
"""
|
|
694
683
|
|
|
695
684
|
@abstractmethod
|
|
696
685
|
def remove_image(self, image: str, force: bool = True) -> None:
|
|
@@ -701,17 +690,19 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
701
690
|
"""
|
|
702
691
|
|
|
703
692
|
@abstractmethod
|
|
704
|
-
def list_containers(self, filter:
|
|
693
|
+
def list_containers(self, filter: list[str] | str | None = None, all=True) -> list[dict]:
|
|
705
694
|
"""List all containers matching the given filters
|
|
706
695
|
|
|
707
696
|
:return: A list of dicts with keys id, image, name, labels, status
|
|
708
697
|
"""
|
|
709
698
|
|
|
710
|
-
def get_running_container_names(self) ->
|
|
699
|
+
def get_running_container_names(self) -> list[str]:
|
|
711
700
|
"""Returns a list of the names of all running containers"""
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
701
|
+
return self.__get_container_names(return_all=False)
|
|
702
|
+
|
|
703
|
+
def get_all_container_names(self) -> list[str]:
|
|
704
|
+
"""Returns a list of the names of all containers including stopped ones"""
|
|
705
|
+
return self.__get_container_names(return_all=True)
|
|
715
706
|
|
|
716
707
|
def is_container_running(self, container_name: str) -> bool:
|
|
717
708
|
"""Checks whether a container with a given name is currently running"""
|
|
@@ -722,7 +713,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
722
713
|
container_name,
|
|
723
714
|
file_contents: bytes,
|
|
724
715
|
container_path: str,
|
|
725
|
-
chmod_mode:
|
|
716
|
+
chmod_mode: int | None = None,
|
|
726
717
|
) -> None:
|
|
727
718
|
"""
|
|
728
719
|
Create a file in container with the provided content. Provide the 'chmod_mode' argument if you want the file to have specific permissions.
|
|
@@ -754,8 +745,8 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
754
745
|
def pull_image(
|
|
755
746
|
self,
|
|
756
747
|
docker_image: str,
|
|
757
|
-
platform:
|
|
758
|
-
log_handler:
|
|
748
|
+
platform: DockerPlatform | None = None,
|
|
749
|
+
log_handler: Callable[[str], None] | None = None,
|
|
759
750
|
) -> None:
|
|
760
751
|
"""
|
|
761
752
|
Pulls an image with a given name from a Docker registry
|
|
@@ -773,7 +764,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
773
764
|
dockerfile_path: str,
|
|
774
765
|
image_name: str,
|
|
775
766
|
context_path: str = None,
|
|
776
|
-
platform:
|
|
767
|
+
platform: DockerPlatform | None = None,
|
|
777
768
|
) -> str:
|
|
778
769
|
"""Builds an image from the given Dockerfile
|
|
779
770
|
|
|
@@ -798,7 +789,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
798
789
|
strip_latest: bool = True,
|
|
799
790
|
include_tags: bool = True,
|
|
800
791
|
strip_wellknown_repo_prefixes: bool = True,
|
|
801
|
-
) ->
|
|
792
|
+
) -> list[str]:
|
|
802
793
|
"""
|
|
803
794
|
Get all names of docker images available to the container engine
|
|
804
795
|
:param strip_latest: return images both with and without :latest tag
|
|
@@ -817,13 +808,13 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
817
808
|
"""Returns a blocking generator you can iterate over to retrieve log output as it happens."""
|
|
818
809
|
|
|
819
810
|
@abstractmethod
|
|
820
|
-
def inspect_container(self, container_name_or_id: str) ->
|
|
811
|
+
def inspect_container(self, container_name_or_id: str) -> dict[str, dict | str]:
|
|
821
812
|
"""Get detailed attributes of a container.
|
|
822
813
|
|
|
823
814
|
:return: Dict containing docker attributes as returned by the daemon
|
|
824
815
|
"""
|
|
825
816
|
|
|
826
|
-
def inspect_container_volumes(self, container_name_or_id) ->
|
|
817
|
+
def inspect_container_volumes(self, container_name_or_id) -> list[VolumeInfo]:
|
|
827
818
|
"""Return information about the volumes mounted into the given container.
|
|
828
819
|
|
|
829
820
|
:param container_name_or_id: the container name or id
|
|
@@ -838,7 +829,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
838
829
|
@abstractmethod
|
|
839
830
|
def inspect_image(
|
|
840
831
|
self, image_name: str, pull: bool = True, strip_wellknown_repo_prefixes: bool = True
|
|
841
|
-
) ->
|
|
832
|
+
) -> dict[str, dict | list | str]:
|
|
842
833
|
"""Get detailed attributes of an image.
|
|
843
834
|
|
|
844
835
|
:param image_name: Image name to inspect
|
|
@@ -864,7 +855,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
864
855
|
"""
|
|
865
856
|
|
|
866
857
|
@abstractmethod
|
|
867
|
-
def inspect_network(self, network_name: str) ->
|
|
858
|
+
def inspect_network(self, network_name: str) -> dict[str, dict | str]:
|
|
868
859
|
"""Get detailed attributes of an network.
|
|
869
860
|
|
|
870
861
|
:return: Dict containing docker attributes as returned by the daemon
|
|
@@ -875,8 +866,8 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
875
866
|
self,
|
|
876
867
|
network_name: str,
|
|
877
868
|
container_name_or_id: str,
|
|
878
|
-
aliases:
|
|
879
|
-
link_local_ips:
|
|
869
|
+
aliases: list | None = None,
|
|
870
|
+
link_local_ips: list[str] = None,
|
|
880
871
|
) -> None:
|
|
881
872
|
"""
|
|
882
873
|
Connects a container to a given network
|
|
@@ -911,7 +902,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
911
902
|
If container has multiple networks, it will return the IP of the first
|
|
912
903
|
"""
|
|
913
904
|
|
|
914
|
-
def get_image_cmd(self, docker_image: str, pull: bool = True) ->
|
|
905
|
+
def get_image_cmd(self, docker_image: str, pull: bool = True) -> list[str]:
|
|
915
906
|
"""Get the command for the given image
|
|
916
907
|
:param docker_image: Docker image to inspect
|
|
917
908
|
:param pull: Whether to pull if image is not present
|
|
@@ -987,31 +978,31 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
987
978
|
self,
|
|
988
979
|
image_name: str,
|
|
989
980
|
*,
|
|
990
|
-
name:
|
|
991
|
-
entrypoint:
|
|
981
|
+
name: str | None = None,
|
|
982
|
+
entrypoint: list[str] | str | None = None,
|
|
992
983
|
remove: bool = False,
|
|
993
984
|
interactive: bool = False,
|
|
994
985
|
tty: bool = False,
|
|
995
986
|
detach: bool = False,
|
|
996
|
-
command:
|
|
997
|
-
volumes:
|
|
998
|
-
ports:
|
|
999
|
-
exposed_ports:
|
|
1000
|
-
env_vars:
|
|
1001
|
-
user:
|
|
1002
|
-
cap_add:
|
|
1003
|
-
cap_drop:
|
|
1004
|
-
security_opt:
|
|
1005
|
-
network:
|
|
1006
|
-
dns:
|
|
1007
|
-
additional_flags:
|
|
1008
|
-
workdir:
|
|
1009
|
-
privileged:
|
|
1010
|
-
labels:
|
|
1011
|
-
platform:
|
|
1012
|
-
ulimits:
|
|
1013
|
-
init:
|
|
1014
|
-
log_config:
|
|
987
|
+
command: list[str] | str | None = None,
|
|
988
|
+
volumes: VolumeMappings | list[SimpleVolumeBind] | None = None,
|
|
989
|
+
ports: PortMappings | None = None,
|
|
990
|
+
exposed_ports: list[str] | None = None,
|
|
991
|
+
env_vars: dict[str, str] | None = None,
|
|
992
|
+
user: str | None = None,
|
|
993
|
+
cap_add: list[str] | None = None,
|
|
994
|
+
cap_drop: list[str] | None = None,
|
|
995
|
+
security_opt: list[str] | None = None,
|
|
996
|
+
network: str | None = None,
|
|
997
|
+
dns: str | list[str] | None = None,
|
|
998
|
+
additional_flags: str | None = None,
|
|
999
|
+
workdir: str | None = None,
|
|
1000
|
+
privileged: bool | None = None,
|
|
1001
|
+
labels: dict[str, str] | None = None,
|
|
1002
|
+
platform: DockerPlatform | None = None,
|
|
1003
|
+
ulimits: list[Ulimit] | None = None,
|
|
1004
|
+
init: bool | None = None,
|
|
1005
|
+
log_config: LogConfig | None = None,
|
|
1015
1006
|
) -> str:
|
|
1016
1007
|
"""Creates a container with the given image
|
|
1017
1008
|
|
|
@@ -1024,32 +1015,32 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
1024
1015
|
image_name: str,
|
|
1025
1016
|
stdin: bytes = None,
|
|
1026
1017
|
*,
|
|
1027
|
-
name:
|
|
1028
|
-
entrypoint:
|
|
1018
|
+
name: str | None = None,
|
|
1019
|
+
entrypoint: str | None = None,
|
|
1029
1020
|
remove: bool = False,
|
|
1030
1021
|
interactive: bool = False,
|
|
1031
1022
|
tty: bool = False,
|
|
1032
1023
|
detach: bool = False,
|
|
1033
|
-
command:
|
|
1034
|
-
volumes:
|
|
1035
|
-
ports:
|
|
1036
|
-
exposed_ports:
|
|
1037
|
-
env_vars:
|
|
1038
|
-
user:
|
|
1039
|
-
cap_add:
|
|
1040
|
-
cap_drop:
|
|
1041
|
-
security_opt:
|
|
1042
|
-
network:
|
|
1043
|
-
dns:
|
|
1044
|
-
additional_flags:
|
|
1045
|
-
workdir:
|
|
1046
|
-
labels:
|
|
1047
|
-
platform:
|
|
1048
|
-
privileged:
|
|
1049
|
-
ulimits:
|
|
1050
|
-
init:
|
|
1051
|
-
log_config:
|
|
1052
|
-
) ->
|
|
1024
|
+
command: list[str] | str | None = None,
|
|
1025
|
+
volumes: VolumeMappings | list[SimpleVolumeBind] | None = None,
|
|
1026
|
+
ports: PortMappings | None = None,
|
|
1027
|
+
exposed_ports: list[str] | None = None,
|
|
1028
|
+
env_vars: dict[str, str] | None = None,
|
|
1029
|
+
user: str | None = None,
|
|
1030
|
+
cap_add: list[str] | None = None,
|
|
1031
|
+
cap_drop: list[str] | None = None,
|
|
1032
|
+
security_opt: list[str] | None = None,
|
|
1033
|
+
network: str | None = None,
|
|
1034
|
+
dns: str | None = None,
|
|
1035
|
+
additional_flags: str | None = None,
|
|
1036
|
+
workdir: str | None = None,
|
|
1037
|
+
labels: dict[str, str] | None = None,
|
|
1038
|
+
platform: DockerPlatform | None = None,
|
|
1039
|
+
privileged: bool | None = None,
|
|
1040
|
+
ulimits: list[Ulimit] | None = None,
|
|
1041
|
+
init: bool | None = None,
|
|
1042
|
+
log_config: LogConfig | None = None,
|
|
1043
|
+
) -> tuple[bytes, bytes]:
|
|
1053
1044
|
"""Creates and runs a given docker container
|
|
1054
1045
|
|
|
1055
1046
|
:return: A tuple (stdout, stderr)
|
|
@@ -1057,7 +1048,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
1057
1048
|
|
|
1058
1049
|
def run_container_from_config(
|
|
1059
1050
|
self, container_config: ContainerConfiguration
|
|
1060
|
-
) ->
|
|
1051
|
+
) -> tuple[bytes, bytes]:
|
|
1061
1052
|
"""Like ``run_container`` but uses the parameters from the configuration."""
|
|
1062
1053
|
|
|
1063
1054
|
return self.run_container(
|
|
@@ -1093,14 +1084,14 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
1093
1084
|
def exec_in_container(
|
|
1094
1085
|
self,
|
|
1095
1086
|
container_name_or_id: str,
|
|
1096
|
-
command:
|
|
1087
|
+
command: list[str] | str,
|
|
1097
1088
|
interactive: bool = False,
|
|
1098
1089
|
detach: bool = False,
|
|
1099
|
-
env_vars:
|
|
1100
|
-
stdin:
|
|
1101
|
-
user:
|
|
1102
|
-
workdir:
|
|
1103
|
-
) ->
|
|
1090
|
+
env_vars: dict[str, str | None] | None = None,
|
|
1091
|
+
stdin: bytes | None = None,
|
|
1092
|
+
user: str | None = None,
|
|
1093
|
+
workdir: str | None = None,
|
|
1094
|
+
) -> tuple[bytes, bytes]:
|
|
1104
1095
|
"""Execute a given command in a container
|
|
1105
1096
|
|
|
1106
1097
|
:return: A tuple (stdout, stderr)
|
|
@@ -1113,8 +1104,8 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
1113
1104
|
stdin: bytes = None,
|
|
1114
1105
|
interactive: bool = False,
|
|
1115
1106
|
attach: bool = False,
|
|
1116
|
-
flags:
|
|
1117
|
-
) ->
|
|
1107
|
+
flags: str | None = None,
|
|
1108
|
+
) -> tuple[bytes, bytes]:
|
|
1118
1109
|
"""Start a given, already created container
|
|
1119
1110
|
|
|
1120
1111
|
:return: A tuple (stdout, stderr) if attach or interactive is set, otherwise a tuple (b"container_name_or_id", b"")
|
|
@@ -1127,7 +1118,7 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
1127
1118
|
"""
|
|
1128
1119
|
|
|
1129
1120
|
@abstractmethod
|
|
1130
|
-
def login(self, username: str, password: str, registry:
|
|
1121
|
+
def login(self, username: str, password: str, registry: str | None = None) -> None:
|
|
1131
1122
|
"""
|
|
1132
1123
|
Login into an OCI registry
|
|
1133
1124
|
|
|
@@ -1136,18 +1127,23 @@ class ContainerClient(metaclass=ABCMeta):
|
|
|
1136
1127
|
:param registry: Registry url
|
|
1137
1128
|
"""
|
|
1138
1129
|
|
|
1130
|
+
def __get_container_names(self, return_all: bool) -> list[str]:
|
|
1131
|
+
result = self.list_containers(all=return_all)
|
|
1132
|
+
result = [container["name"] for container in result]
|
|
1133
|
+
return result
|
|
1134
|
+
|
|
1139
1135
|
|
|
1140
1136
|
class Util:
|
|
1141
1137
|
MAX_ENV_ARGS_LENGTH = 20000
|
|
1142
1138
|
|
|
1143
1139
|
@staticmethod
|
|
1144
|
-
def format_env_vars(key: str, value:
|
|
1140
|
+
def format_env_vars(key: str, value: str | None):
|
|
1145
1141
|
if value is None:
|
|
1146
1142
|
return key
|
|
1147
1143
|
return f"{key}={value}"
|
|
1148
1144
|
|
|
1149
1145
|
@classmethod
|
|
1150
|
-
def create_env_vars_file_flag(cls, env_vars:
|
|
1146
|
+
def create_env_vars_file_flag(cls, env_vars: dict) -> tuple[list[str], str | None]:
|
|
1151
1147
|
if not env_vars:
|
|
1152
1148
|
return [], None
|
|
1153
1149
|
result = []
|
|
@@ -1185,14 +1181,14 @@ class Util:
|
|
|
1185
1181
|
return f
|
|
1186
1182
|
|
|
1187
1183
|
@staticmethod
|
|
1188
|
-
def append_without_latest(image_names:
|
|
1184
|
+
def append_without_latest(image_names: list[str]):
|
|
1189
1185
|
suffix = ":latest"
|
|
1190
1186
|
for image in list(image_names):
|
|
1191
1187
|
if image.endswith(suffix):
|
|
1192
1188
|
image_names.append(image[: -len(suffix)])
|
|
1193
1189
|
|
|
1194
1190
|
@staticmethod
|
|
1195
|
-
def strip_wellknown_repo_prefixes(image_names:
|
|
1191
|
+
def strip_wellknown_repo_prefixes(image_names: list[str]) -> list[str]:
|
|
1196
1192
|
"""
|
|
1197
1193
|
Remove well-known repo prefixes like `localhost/` or `docker.io/library/` from the list of given
|
|
1198
1194
|
image names. This is mostly to ensure compatibility of our Docker client with Podman API responses.
|
|
@@ -1238,7 +1234,7 @@ class Util:
|
|
|
1238
1234
|
LOG.debug("File to copy empty, ignoring...")
|
|
1239
1235
|
|
|
1240
1236
|
@staticmethod
|
|
1241
|
-
def _read_docker_cli_env_file(env_file: str) ->
|
|
1237
|
+
def _read_docker_cli_env_file(env_file: str) -> dict[str, str]:
|
|
1242
1238
|
"""
|
|
1243
1239
|
Read an environment file in docker CLI format, specified here:
|
|
1244
1240
|
https://docs.docker.com/reference/cli/docker/container/run/#env
|
|
@@ -1247,7 +1243,7 @@ class Util:
|
|
|
1247
1243
|
"""
|
|
1248
1244
|
env_vars = {}
|
|
1249
1245
|
try:
|
|
1250
|
-
with open(env_file
|
|
1246
|
+
with open(env_file) as f:
|
|
1251
1247
|
env_file_lines = f.readlines()
|
|
1252
1248
|
except FileNotFoundError as e:
|
|
1253
1249
|
LOG.error(
|
|
@@ -1280,16 +1276,16 @@ class Util:
|
|
|
1280
1276
|
@staticmethod
|
|
1281
1277
|
def parse_additional_flags(
|
|
1282
1278
|
additional_flags: str,
|
|
1283
|
-
env_vars:
|
|
1284
|
-
labels:
|
|
1285
|
-
volumes:
|
|
1286
|
-
network:
|
|
1287
|
-
platform:
|
|
1288
|
-
ports:
|
|
1289
|
-
privileged:
|
|
1290
|
-
user:
|
|
1291
|
-
ulimits:
|
|
1292
|
-
dns:
|
|
1279
|
+
env_vars: dict[str, str] | None = None,
|
|
1280
|
+
labels: dict[str, str] | None = None,
|
|
1281
|
+
volumes: list[SimpleVolumeBind] | None = None,
|
|
1282
|
+
network: str | None = None,
|
|
1283
|
+
platform: DockerPlatform | None = None,
|
|
1284
|
+
ports: PortMappings | None = None,
|
|
1285
|
+
privileged: bool | None = None,
|
|
1286
|
+
user: str | None = None,
|
|
1287
|
+
ulimits: list[Ulimit] | None = None,
|
|
1288
|
+
dns: str | list[str] | None = None,
|
|
1293
1289
|
) -> DockerRunFlags:
|
|
1294
1290
|
"""Parses additional CLI-formatted Docker flags, which could overwrite provided defaults.
|
|
1295
1291
|
:param additional_flags: String which contains the flag definitions inspired by the Docker CLI reference:
|
|
@@ -1510,8 +1506,8 @@ class Util:
|
|
|
1510
1506
|
|
|
1511
1507
|
@staticmethod
|
|
1512
1508
|
def convert_mount_list_to_dict(
|
|
1513
|
-
volumes:
|
|
1514
|
-
) ->
|
|
1509
|
+
volumes: list[SimpleVolumeBind] | VolumeMappings,
|
|
1510
|
+
) -> dict[str, dict[str, str]]:
|
|
1515
1511
|
"""Converts a List of (host_path, container_path) tuples to a Dict suitable as volume argument for docker sdk"""
|
|
1516
1512
|
|
|
1517
1513
|
def _map_to_dict(paths: SimpleVolumeBind | BindMount | VolumeDirMount):
|