localstack-core 4.7.1.dev23__py3-none-any.whl → 4.7.1.dev24__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- localstack/aws/api/apigateway/__init__.py +87 -110
- localstack/aws/api/core.py +2 -3
- localstack/aws/api/events/__init__.py +12 -16
- localstack/aws/api/logs/__init__.py +5 -8
- localstack/aws/api/pipes/__init__.py +24 -32
- localstack/aws/api/scheduler/__init__.py +14 -16
- localstack/aws/api/stepfunctions/__init__.py +88 -114
- localstack/aws/api/support/__init__.py +8 -9
- localstack/aws/chain.py +2 -2
- localstack/aws/client.py +7 -9
- localstack/aws/connect.py +40 -39
- localstack/aws/forwarder.py +5 -4
- localstack/aws/gateway.py +1 -3
- localstack/aws/handlers/analytics.py +1 -2
- localstack/aws/handlers/cors.py +4 -5
- localstack/aws/handlers/logging.py +1 -2
- localstack/aws/handlers/metric_handler.py +3 -4
- localstack/aws/handlers/service.py +5 -5
- localstack/aws/mocking.py +15 -24
- localstack/aws/protocol/op_router.py +11 -10
- localstack/aws/protocol/parser.py +16 -17
- localstack/aws/protocol/serializer.py +37 -40
- localstack/aws/protocol/service_router.py +13 -13
- localstack/aws/protocol/validate.py +5 -5
- localstack/aws/scaffold.py +8 -9
- localstack/aws/serving/edge.py +5 -6
- localstack/aws/serving/hypercorn.py +2 -2
- localstack/aws/serving/twisted.py +1 -2
- localstack/aws/serving/werkzeug.py +2 -2
- localstack/aws/skeleton.py +7 -8
- localstack/aws/spec.py +29 -30
- localstack/cli/localstack.py +6 -6
- localstack/cli/lpm.py +2 -2
- localstack/config.py +14 -15
- localstack/deprecations.py +5 -5
- localstack/dev/run/__main__.py +4 -4
- localstack/dev/run/paths.py +5 -5
- localstack/dns/models.py +2 -1
- localstack/dns/server.py +3 -2
- localstack/http/dispatcher.py +1 -2
- localstack/http/response.py +2 -2
- localstack/http/router.py +1 -1
- localstack/http/trace.py +2 -1
- localstack/logging/format.py +3 -3
- localstack/packages/api.py +5 -5
- localstack/packages/core.py +3 -3
- localstack/packages/debugpy.py +1 -3
- localstack/packages/ffmpeg.py +1 -2
- localstack/packages/java.py +1 -2
- localstack/packages/terraform.py +1 -2
- localstack/runtime/init.py +6 -7
- localstack/runtime/shutdown.py +2 -1
- localstack/services/apigateway/exporter.py +1 -2
- localstack/services/apigateway/helpers.py +6 -6
- localstack/services/apigateway/legacy/context.py +21 -21
- localstack/services/apigateway/legacy/helpers.py +20 -20
- localstack/services/apigateway/legacy/integration.py +7 -7
- localstack/services/apigateway/legacy/router_asf.py +2 -2
- localstack/services/apigateway/legacy/templates.py +5 -5
- localstack/services/apigateway/models.py +16 -16
- localstack/services/apigateway/next_gen/execute_api/api.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/context.py +25 -25
- localstack/services/apigateway/next_gen/execute_api/handlers/api_key_validation.py +2 -5
- localstack/services/apigateway/next_gen/execute_api/handlers/parse.py +1 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +1 -1
- localstack/services/apigateway/next_gen/execute_api/header_utils.py +1 -1
- localstack/services/apigateway/next_gen/execute_api/helpers.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/integrations/aws.py +6 -6
- localstack/services/apigateway/next_gen/execute_api/integrations/http.py +9 -9
- localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
- localstack/services/apigateway/resource_providers/aws_apigateway_account.py +3 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_account_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_apikey.py +14 -14
- localstack/services/apigateway/resource_providers/aws_apigateway_apikey_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_deployment.py +46 -46
- localstack/services/apigateway/resource_providers/aws_apigateway_deployment_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_domainname.py +18 -18
- localstack/services/apigateway/resource_providers/aws_apigateway_domainname_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse.py +7 -7
- localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_method.py +36 -36
- localstack/services/apigateway/resource_providers/aws_apigateway_method_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_model.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_model_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_resource.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_resource_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_restapi.py +26 -26
- localstack/services/apigateway/resource_providers/aws_apigateway_restapi_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_stage.py +33 -33
- localstack/services/apigateway/resource_providers/aws_apigateway_stage_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplan.py +18 -18
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplan_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey_plugin.py +1 -3
- localstack/services/cdk/resource_providers/cdk_metadata.py +2 -2
- localstack/services/cdk/resource_providers/cdk_metadata_plugin.py +1 -3
- localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate.py +14 -14
- localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate_plugin.py +1 -3
- localstack/services/cloudformation/cfn_utils.py +1 -1
- localstack/services/cloudformation/deployment_utils.py +2 -2
- localstack/services/cloudformation/engine/changes.py +3 -3
- localstack/services/cloudformation/engine/entities.py +12 -12
- localstack/services/cloudformation/engine/parameters.py +3 -3
- localstack/services/cloudformation/engine/template_deployer.py +9 -10
- localstack/services/cloudformation/engine/transformers.py +5 -4
- localstack/services/cloudformation/engine/types.py +5 -4
- localstack/services/cloudformation/engine/v2/change_set_model.py +9 -8
- localstack/services/cloudformation/engine/v2/change_set_model_describer.py +6 -6
- localstack/services/cloudformation/engine/v2/change_set_model_executor.py +9 -9
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +15 -14
- localstack/services/cloudformation/engine/v2/change_set_model_transform.py +5 -5
- localstack/services/cloudformation/provider_utils.py +2 -2
- localstack/services/cloudformation/resource_provider.py +10 -9
- localstack/services/cloudformation/resource_providers/aws_cloudformation_macro.py +7 -7
- localstack/services/cloudformation/resource_providers/aws_cloudformation_macro_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_stack.py +9 -9
- localstack/services/cloudformation/resource_providers/aws_cloudformation_stack_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition.py +6 -6
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle.py +2 -2
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle_plugin.py +1 -3
- localstack/services/cloudformation/scaffolding/__main__.py +8 -7
- localstack/services/cloudformation/scaffolding/propgen.py +2 -2
- localstack/services/cloudformation/stores.py +2 -3
- localstack/services/cloudformation/v2/entities.py +7 -7
- localstack/services/cloudformation/v2/provider.py +10 -10
- localstack/services/cloudwatch/alarm_scheduler.py +7 -7
- localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
- localstack/services/cloudwatch/models.py +5 -7
- localstack/services/cloudwatch/provider.py +12 -12
- localstack/services/cloudwatch/provider_v2.py +2 -4
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm.py +40 -40
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm_plugin.py +1 -3
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm.py +12 -12
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm_plugin.py +1 -3
- localstack/services/dynamodb/packages.py +1 -2
- localstack/services/dynamodb/provider.py +7 -8
- localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable.py +63 -63
- localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable_plugin.py +1 -3
- localstack/services/dynamodb/resource_providers/aws_dynamodb_table.py +57 -57
- localstack/services/dynamodb/resource_providers/aws_dynamodb_table_plugin.py +1 -3
- localstack/services/dynamodb/utils.py +13 -14
- localstack/services/dynamodb/v2/provider.py +6 -7
- localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
- localstack/services/dynamodbstreams/models.py +1 -3
- localstack/services/ec2/patches.py +4 -5
- localstack/services/ec2/provider.py +3 -3
- localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions.py +10 -10
- localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_instance.py +96 -96
- localstack/services/ec2/resource_providers/aws_ec2_instance_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_internetgateway.py +5 -5
- localstack/services/ec2/resource_providers/aws_ec2_internetgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_keypair.py +10 -10
- localstack/services/ec2/resource_providers/aws_ec2_keypair_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_natgateway.py +13 -13
- localstack/services/ec2/resource_providers/aws_ec2_natgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_networkacl.py +6 -6
- localstack/services/ec2/resource_providers/aws_ec2_networkacl_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_prefixlist.py +14 -14
- localstack/services/ec2/resource_providers/aws_ec2_prefixlist_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_route.py +15 -15
- localstack/services/ec2/resource_providers/aws_ec2_route_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_routetable.py +6 -6
- localstack/services/ec2/resource_providers/aws_ec2_routetable_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_securitygroup.py +29 -29
- localstack/services/ec2/resource_providers/aws_ec2_securitygroup_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_subnet.py +19 -19
- localstack/services/ec2/resource_providers/aws_ec2_subnet_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation.py +4 -4
- localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_transitgateway.py +16 -16
- localstack/services/ec2/resource_providers/aws_ec2_transitgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment.py +9 -9
- localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpc.py +15 -15
- localstack/services/ec2/resource_providers/aws_ec2_vpc_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint.py +13 -13
- localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment.py +5 -5
- localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment_plugin.py +1 -3
- localstack/services/ecr/resource_providers/aws_ecr_repository.py +17 -17
- localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
- localstack/services/edge.py +5 -5
- localstack/services/es/provider.py +19 -19
- localstack/services/events/archive.py +2 -2
- localstack/services/events/connection.py +5 -5
- localstack/services/events/event_bus.py +9 -9
- localstack/services/events/models.py +25 -25
- localstack/services/events/provider.py +12 -12
- localstack/services/events/replay.py +3 -3
- localstack/services/events/resource_providers/aws_events_apidestination.py +8 -8
- localstack/services/events/resource_providers/aws_events_apidestination_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_connection.py +27 -27
- localstack/services/events/resource_providers/aws_events_connection_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_eventbus.py +9 -9
- localstack/services/events/resource_providers/aws_events_eventbus_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_eventbuspolicy.py +11 -11
- localstack/services/events/resource_providers/aws_events_eventbuspolicy_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_rule.py +82 -82
- localstack/services/events/resource_providers/aws_events_rule_plugin.py +1 -3
- localstack/services/events/rule.py +15 -15
- localstack/services/events/target.py +5 -5
- localstack/services/events/utils.py +7 -7
- localstack/services/events/v1/models.py +1 -3
- localstack/services/events/v1/provider.py +10 -10
- localstack/services/firehose/models.py +1 -3
- localstack/services/firehose/provider.py +11 -12
- localstack/services/iam/iam_patches.py +5 -6
- localstack/services/iam/provider.py +4 -4
- localstack/services/iam/resource_providers/aws_iam_accesskey.py +6 -6
- localstack/services/iam/resource_providers/aws_iam_accesskey_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_group.py +9 -9
- localstack/services/iam/resource_providers/aws_iam_group_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_instanceprofile.py +5 -5
- localstack/services/iam/resource_providers/aws_iam_instanceprofile_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_managedpolicy.py +9 -9
- localstack/services/iam/resource_providers/aws_iam_managedpolicy_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_policy.py +7 -7
- localstack/services/iam/resource_providers/aws_iam_policy_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_role.py +16 -16
- localstack/services/iam/resource_providers/aws_iam_role_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_servercertificate.py +10 -10
- localstack/services/iam/resource_providers/aws_iam_servercertificate_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_servicelinkedrole.py +5 -5
- localstack/services/iam/resource_providers/aws_iam_servicelinkedrole_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_user.py +17 -17
- localstack/services/iam/resource_providers/aws_iam_user_plugin.py +1 -3
- localstack/services/kinesis/kinesis_mock_server.py +7 -8
- localstack/services/kinesis/models.py +2 -3
- localstack/services/kinesis/packages.py +3 -3
- localstack/services/kinesis/resource_providers/aws_kinesis_stream.py +13 -13
- localstack/services/kinesis/resource_providers/aws_kinesis_stream_plugin.py +1 -3
- localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer.py +7 -7
- localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer_plugin.py +1 -3
- localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream.py +191 -191
- localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream_plugin.py +1 -3
- localstack/services/kms/models.py +14 -17
- localstack/services/kms/provider.py +2 -3
- localstack/services/kms/resource_providers/aws_kms_alias.py +3 -3
- localstack/services/kms/resource_providers/aws_kms_alias_plugin.py +1 -3
- localstack/services/kms/resource_providers/aws_kms_key.py +14 -14
- localstack/services/kms/resource_providers/aws_kms_key_plugin.py +1 -3
- localstack/services/kms/utils.py +3 -2
- localstack/services/lambda_/api_utils.py +12 -12
- localstack/services/lambda_/custom_endpoints.py +2 -2
- localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +1 -1
- localstack/services/lambda_/event_source_mapping/pipe_utils.py +2 -2
- localstack/services/lambda_/event_source_mapping/pollers/stream_poller.py +1 -1
- localstack/services/lambda_/event_source_mapping/senders/sender_utils.py +2 -1
- localstack/services/lambda_/invocation/assignment.py +1 -2
- localstack/services/lambda_/invocation/docker_runtime_executor.py +5 -4
- localstack/services/lambda_/invocation/execution_environment.py +4 -4
- localstack/services/lambda_/invocation/executor_endpoint.py +5 -5
- localstack/services/lambda_/invocation/internal_sqs_queue.py +1 -1
- localstack/services/lambda_/invocation/lambda_models.py +23 -23
- localstack/services/lambda_/invocation/lambda_service.py +4 -4
- localstack/services/lambda_/invocation/logs.py +2 -3
- localstack/services/lambda_/invocation/runtime_executor.py +3 -3
- localstack/services/lambda_/ldm.py +2 -3
- localstack/services/lambda_/packages.py +2 -3
- localstack/services/lambda_/provider.py +3 -3
- localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig.py +8 -8
- localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig.py +11 -11
- localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping.py +39 -39
- localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_function.py +54 -54
- localstack/services/lambda_/resource_providers/aws_lambda_function_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_layerversion.py +11 -11
- localstack/services/lambda_/resource_providers/aws_lambda_layerversion_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission.py +6 -6
- localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_permission.py +10 -10
- localstack/services/lambda_/resource_providers/aws_lambda_permission_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_url.py +14 -14
- localstack/services/lambda_/resource_providers/aws_lambda_url_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_version.py +8 -8
- localstack/services/lambda_/resource_providers/aws_lambda_version_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/lambda_alias.py +12 -12
- localstack/services/lambda_/resource_providers/lambda_alias_plugin.py +1 -3
- localstack/services/lambda_/runtimes.py +1 -3
- localstack/services/logs/models.py +1 -3
- localstack/services/logs/provider.py +3 -3
- localstack/services/logs/resource_providers/aws_logs_loggroup.py +9 -9
- localstack/services/logs/resource_providers/aws_logs_loggroup_plugin.py +1 -3
- localstack/services/logs/resource_providers/aws_logs_logstream.py +4 -4
- localstack/services/logs/resource_providers/aws_logs_logstream_plugin.py +1 -3
- localstack/services/logs/resource_providers/aws_logs_subscriptionfilter.py +7 -7
- localstack/services/logs/resource_providers/aws_logs_subscriptionfilter_plugin.py +1 -3
- localstack/services/moto.py +3 -3
- localstack/services/opensearch/cluster.py +13 -13
- localstack/services/opensearch/cluster_manager.py +13 -14
- localstack/services/opensearch/models.py +1 -3
- localstack/services/opensearch/packages.py +1 -2
- localstack/services/opensearch/provider.py +7 -8
- localstack/services/opensearch/resource_providers/aws_elasticsearch_domain.py +61 -61
- localstack/services/opensearch/resource_providers/aws_elasticsearch_domain_plugin.py +1 -3
- localstack/services/opensearch/resource_providers/aws_opensearchservice_domain.py +89 -89
- localstack/services/opensearch/resource_providers/aws_opensearchservice_domain_plugin.py +1 -3
- localstack/services/opensearch/versions.py +1 -3
- localstack/services/plugins.py +26 -25
- localstack/services/redshift/resource_providers/aws_redshift_cluster.py +57 -57
- localstack/services/redshift/resource_providers/aws_redshift_cluster_plugin.py +1 -3
- localstack/services/resource_groups/resource_providers/aws_resourcegroups_group.py +21 -21
- localstack/services/resource_groups/resource_providers/aws_resourcegroups_group_plugin.py +1 -3
- localstack/services/route53/models.py +1 -3
- localstack/services/route53/provider.py +1 -2
- localstack/services/route53/resource_providers/aws_route53_healthcheck.py +6 -6
- localstack/services/route53/resource_providers/aws_route53_healthcheck_plugin.py +1 -3
- localstack/services/route53/resource_providers/aws_route53_recordset.py +27 -27
- localstack/services/route53/resource_providers/aws_route53_recordset_plugin.py +1 -3
- localstack/services/route53resolver/models.py +8 -10
- localstack/services/route53resolver/provider.py +12 -12
- localstack/services/s3/codec.py +2 -2
- localstack/services/s3/cors.py +4 -4
- localstack/services/s3/models.py +72 -72
- localstack/services/s3/notifications.py +19 -19
- localstack/services/s3/presigned_url.py +6 -5
- localstack/services/s3/provider.py +13 -14
- localstack/services/s3/resource_providers/aws_s3_bucket.py +180 -180
- localstack/services/s3/resource_providers/aws_s3_bucket_plugin.py +1 -3
- localstack/services/s3/resource_providers/aws_s3_bucketpolicy.py +4 -4
- localstack/services/s3/resource_providers/aws_s3_bucketpolicy_plugin.py +1 -3
- localstack/services/s3/storage/core.py +4 -3
- localstack/services/s3/storage/ephemeral.py +7 -6
- localstack/services/s3/utils.py +11 -11
- localstack/services/s3/validation.py +1 -1
- localstack/services/s3/website_hosting.py +5 -5
- localstack/services/scheduler/resource_providers/aws_scheduler_schedule.py +60 -60
- localstack/services/scheduler/resource_providers/aws_scheduler_schedule_plugin.py +1 -3
- localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup.py +9 -9
- localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup_plugin.py +1 -3
- localstack/services/secretsmanager/provider.py +9 -11
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy.py +5 -5
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule.py +21 -21
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret.py +23 -23
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment.py +5 -5
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment_plugin.py +1 -3
- localstack/services/ses/provider.py +8 -8
- localstack/services/ses/resource_providers/aws_ses_emailidentity.py +21 -21
- localstack/services/ses/resource_providers/aws_ses_emailidentity_plugin.py +1 -3
- localstack/services/sns/models.py +25 -25
- localstack/services/sns/provider.py +1 -2
- localstack/services/sns/publisher.py +6 -7
- localstack/services/sns/resource_providers/aws_sns_subscription.py +13 -13
- localstack/services/sns/resource_providers/aws_sns_subscription_plugin.py +1 -3
- localstack/services/sns/resource_providers/aws_sns_topic.py +16 -16
- localstack/services/sns/resource_providers/aws_sns_topic_plugin.py +1 -3
- localstack/services/sns/resource_providers/aws_sns_topicpolicy.py +4 -4
- localstack/services/sns/resource_providers/aws_sns_topicpolicy_plugin.py +1 -3
- localstack/services/sqs/models.py +21 -22
- localstack/services/sqs/provider.py +19 -18
- localstack/services/sqs/query_api.py +2 -3
- localstack/services/sqs/resource_providers/aws_sqs_queue.py +21 -21
- localstack/services/sqs/resource_providers/aws_sqs_queue_plugin.py +1 -3
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy.py +4 -4
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy_plugin.py +1 -3
- localstack/services/sqs/utils.py +3 -3
- localstack/services/ssm/provider.py +2 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow.py +15 -15
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget.py +10 -10
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask.py +48 -48
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_parameter.py +10 -10
- localstack/services/ssm/resource_providers/aws_ssm_parameter_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_patchbaseline.py +29 -29
- localstack/services/ssm/resource_providers/aws_ssm_patchbaseline_plugin.py +1 -3
- localstack/services/stepfunctions/asl/antlt4utils/antlr4utils.py +3 -4
- localstack/services/stepfunctions/asl/component/common/catch/catcher_decl.py +9 -9
- localstack/services/stepfunctions/asl/component/common/error_name/custom_error_name.py +2 -2
- localstack/services/stepfunctions/asl/component/common/error_name/error_name.py +4 -4
- localstack/services/stepfunctions/asl/component/common/error_name/failure_event.py +8 -8
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_binding.py +2 -2
- localstack/services/stepfunctions/asl/component/common/path/input_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/path/output_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
- localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
- localstack/services/stepfunctions/asl/component/common/string/string_expression.py +2 -2
- localstack/services/stepfunctions/asl/component/common/timeouts/timeout.py +3 -3
- localstack/services/stepfunctions/asl/component/eval_component.py +2 -3
- localstack/services/stepfunctions/asl/component/intrinsic/argument/argument.py +3 -3
- localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +2 -2
- localstack/services/stepfunctions/asl/component/program/program.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state.py +10 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/choice_rule.py +11 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/comparison/operator/implementations/is_operator.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +1 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +6 -6
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/reader_config/reader_config_decl.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_eval_s3.py +2 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/distributed_iteration_component.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/inline_iteration_component.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/distributed_item_processor_worker.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/inline_item_processor_worker.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/map_run_record.py +10 -10
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_component.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_declaration.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_worker.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/distributed_iterator_worker.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator.py +1 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator_worker.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/job.py +9 -9
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/result_writer/resource_eval/resource_eval_s3.py +2 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/state_map.py +10 -11
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branch_worker.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branches_decl.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +1 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +6 -6
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/resource.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py +10 -10
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_api_gateway.py +15 -15
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +5 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_callback.py +18 -17
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_dynamodb.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_ecs.py +5 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_events.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_glue.py +7 -6
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_lambda.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sfn.py +9 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sns.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sqs.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task_lambda.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_fail/state_fail.py +2 -4
- localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_wait/wait_function/timestamp.py +2 -2
- localstack/services/stepfunctions/asl/eval/callback/callback.py +18 -18
- localstack/services/stepfunctions/asl/eval/environment.py +15 -17
- localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
- localstack/services/stepfunctions/asl/eval/event/event_manager.py +9 -9
- localstack/services/stepfunctions/asl/eval/event/logging.py +3 -3
- localstack/services/stepfunctions/asl/eval/program_state.py +8 -8
- localstack/services/stepfunctions/asl/eval/states.py +11 -11
- localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
- localstack/services/stepfunctions/asl/eval/variable_store.py +3 -3
- localstack/services/stepfunctions/asl/jsonata/jsonata.py +5 -4
- localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +1 -2
- localstack/services/stepfunctions/asl/parse/preprocessor.py +30 -30
- localstack/services/stepfunctions/asl/parse/typed_props.py +2 -2
- localstack/services/stepfunctions/asl/utils/encoding.py +2 -2
- localstack/services/stepfunctions/asl/utils/json_path.py +2 -2
- localstack/services/stepfunctions/backend/activity.py +4 -4
- localstack/services/stepfunctions/backend/alias.py +6 -6
- localstack/services/stepfunctions/backend/execution.py +25 -27
- localstack/services/stepfunctions/backend/execution_worker.py +7 -7
- localstack/services/stepfunctions/backend/state_machine.py +26 -26
- localstack/services/stepfunctions/backend/test_state/execution.py +3 -4
- localstack/services/stepfunctions/backend/test_state/execution_worker.py +1 -3
- localstack/services/stepfunctions/mocking/mock_config.py +5 -5
- localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
- localstack/services/stepfunctions/provider.py +27 -37
- localstack/services/stepfunctions/quotas.py +2 -3
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity.py +6 -6
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity_plugin.py +1 -3
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine.py +25 -25
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine_plugin.py +1 -3
- localstack/services/stepfunctions/stepfunctions_utils.py +1 -2
- localstack/services/stores.py +7 -7
- localstack/services/transcribe/packages.py +1 -3
- localstack/services/transcribe/provider.py +2 -2
- localstack/state/inspect.py +4 -4
- localstack/state/pickle.py +16 -15
- localstack/testing/aws/asf_utils.py +3 -2
- localstack/testing/aws/lambda_utils.py +15 -14
- localstack/testing/aws/util.py +3 -2
- localstack/testing/pytest/cloudformation/fixtures.py +3 -2
- localstack/testing/pytest/container.py +5 -4
- localstack/testing/pytest/filters.py +1 -3
- localstack/testing/pytest/fixtures.py +11 -11
- localstack/testing/pytest/marking.py +6 -6
- localstack/testing/pytest/path_filter.py +1 -1
- localstack/testing/pytest/stepfunctions/utils.py +1 -1
- localstack/testing/pytest/validation_tracking.py +3 -3
- localstack/testing/scenario/provisioning.py +11 -10
- localstack/testing/snapshots/transformer_utility.py +2 -2
- localstack/testing/testselection/matching.py +2 -2
- localstack/testing/testselection/opt_out.py +1 -1
- localstack/testing/testselection/scripts/filter_by_test_selection.py +1 -1
- localstack/testing/testselection/scripts/generate_test_selection.py +1 -1
- localstack/testing/testselection/testselection.py +2 -2
- localstack/utils/analytics/cli.py +2 -3
- localstack/utils/analytics/client.py +5 -5
- localstack/utils/analytics/events.py +2 -2
- localstack/utils/analytics/metrics/registry.py +1 -1
- localstack/utils/analytics/publisher.py +4 -4
- localstack/utils/analytics/service_request_aggregator.py +3 -3
- localstack/utils/aws/arns.py +2 -2
- localstack/utils/aws/aws_responses.py +14 -21
- localstack/utils/aws/aws_stack.py +7 -11
- localstack/utils/aws/dead_letter_queue.py +3 -4
- localstack/utils/aws/message_forwarding.py +9 -11
- localstack/utils/aws/request_context.py +4 -4
- localstack/utils/aws/templating.py +3 -3
- localstack/utils/batch_policy.py +2 -2
- localstack/utils/bootstrap.py +19 -20
- localstack/utils/collections.py +16 -23
- localstack/utils/config_listener.py +2 -2
- localstack/utils/container_networking.py +3 -3
- localstack/utils/container_utils/container_client.py +72 -75
- localstack/utils/container_utils/docker_cmd_client.py +33 -33
- localstack/utils/container_utils/docker_sdk_client.py +35 -35
- localstack/utils/crypto.py +2 -3
- localstack/utils/diagnose.py +11 -11
- localstack/utils/docker_utils.py +4 -4
- localstack/utils/files.py +1 -2
- localstack/utils/functions.py +2 -2
- localstack/utils/http.py +6 -6
- localstack/utils/iputils.py +2 -1
- localstack/utils/json.py +1 -1
- localstack/utils/net.py +10 -9
- localstack/utils/objects.py +10 -10
- localstack/utils/patch.py +5 -5
- localstack/utils/platform.py +2 -2
- localstack/utils/run.py +7 -7
- localstack/utils/scheduler.py +3 -2
- localstack/utils/strings.py +2 -2
- localstack/utils/tagging.py +3 -3
- localstack/utils/testutil.py +9 -9
- localstack/utils/threads.py +2 -2
- localstack/utils/xml.py +1 -1
- localstack/version.py +2 -2
- {localstack_core-4.7.1.dev23.dist-info → localstack_core-4.7.1.dev24.dist-info}/METADATA +1 -1
- {localstack_core-4.7.1.dev23.dist-info → localstack_core-4.7.1.dev24.dist-info}/RECORD +544 -544
- localstack_core-4.7.1.dev24.dist-info/plux.json +1 -0
- localstack_core-4.7.1.dev23.dist-info/plux.json +0 -1
- {localstack_core-4.7.1.dev23.data → localstack_core-4.7.1.dev24.data}/scripts/localstack +0 -0
- {localstack_core-4.7.1.dev23.data → localstack_core-4.7.1.dev24.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.7.1.dev23.data → localstack_core-4.7.1.dev24.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.7.1.dev23.dist-info → localstack_core-4.7.1.dev24.dist-info}/WHEEL +0 -0
- {localstack_core-4.7.1.dev23.dist-info → localstack_core-4.7.1.dev24.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.7.1.dev23.dist-info → localstack_core-4.7.1.dev24.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.7.1.dev23.dist-info → localstack_core-4.7.1.dev24.dist-info}/top_level.txt +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import NamedTuple
|
|
2
|
+
from typing import NamedTuple
|
|
3
3
|
|
|
4
4
|
from botocore.model import ServiceModel
|
|
5
5
|
from werkzeug.exceptions import RequestEntityTooLarge
|
|
@@ -28,15 +28,15 @@ class _ServiceIndicators(NamedTuple):
|
|
|
28
28
|
|
|
29
29
|
# AWS service's "signing name" - Contained in the Authorization header
|
|
30
30
|
# (https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html)
|
|
31
|
-
signing_name:
|
|
31
|
+
signing_name: str | None = None
|
|
32
32
|
# Target prefix as defined in the service specs for non-rest protocols - Contained in the X-Amz-Target header
|
|
33
|
-
target_prefix:
|
|
33
|
+
target_prefix: str | None = None
|
|
34
34
|
# Targeted operation as defined in the service specs for non-rest protocols - Contained in the X-Amz-Target header
|
|
35
|
-
operation:
|
|
35
|
+
operation: str | None = None
|
|
36
36
|
# Host field of the HTTP request
|
|
37
|
-
host:
|
|
37
|
+
host: str | None = None
|
|
38
38
|
# Path of the HTTP request
|
|
39
|
-
path:
|
|
39
|
+
path: str | None = None
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
def _extract_service_indicators(request: Request) -> _ServiceIndicators:
|
|
@@ -111,7 +111,7 @@ signing_name_path_prefix_rules = {
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
|
|
114
|
-
def custom_signing_name_rules(signing_name: str, path: str) ->
|
|
114
|
+
def custom_signing_name_rules(signing_name: str, path: str) -> ServiceModelIdentifier | None:
|
|
115
115
|
"""
|
|
116
116
|
Rules which are based on the signing name (in the auth header) and the request path.
|
|
117
117
|
"""
|
|
@@ -134,7 +134,7 @@ def custom_signing_name_rules(signing_name: str, path: str) -> Optional[ServiceM
|
|
|
134
134
|
return rules.get("*", ServiceModelIdentifier(signing_name))
|
|
135
135
|
|
|
136
136
|
|
|
137
|
-
def custom_host_addressing_rules(host: str) ->
|
|
137
|
+
def custom_host_addressing_rules(host: str) -> ServiceModelIdentifier | None:
|
|
138
138
|
"""
|
|
139
139
|
Rules based on the host header of the request, which is typically the data plane of a service.
|
|
140
140
|
|
|
@@ -147,7 +147,7 @@ def custom_host_addressing_rules(host: str) -> Optional[ServiceModelIdentifier]:
|
|
|
147
147
|
return ServiceModelIdentifier("s3")
|
|
148
148
|
|
|
149
149
|
|
|
150
|
-
def custom_path_addressing_rules(path: str) ->
|
|
150
|
+
def custom_path_addressing_rules(path: str) -> ServiceModelIdentifier | None:
|
|
151
151
|
"""
|
|
152
152
|
Rules which are only based on the request path.
|
|
153
153
|
"""
|
|
@@ -159,7 +159,7 @@ def custom_path_addressing_rules(path: str) -> Optional[ServiceModelIdentifier]:
|
|
|
159
159
|
return ServiceModelIdentifier("lambda")
|
|
160
160
|
|
|
161
161
|
|
|
162
|
-
def legacy_s3_rules(request: Request) ->
|
|
162
|
+
def legacy_s3_rules(request: Request) -> ServiceModelIdentifier | None:
|
|
163
163
|
"""
|
|
164
164
|
*Legacy* rules which allow us to fallback to S3 if no other service was matched.
|
|
165
165
|
All rules which are implemented here should be removed once we make sure it would not break any use-cases.
|
|
@@ -228,7 +228,7 @@ def legacy_s3_rules(request: Request) -> Optional[ServiceModelIdentifier]:
|
|
|
228
228
|
|
|
229
229
|
|
|
230
230
|
def resolve_conflicts(
|
|
231
|
-
candidates:
|
|
231
|
+
candidates: set[ServiceModelIdentifier], request: Request
|
|
232
232
|
) -> ServiceModelIdentifier:
|
|
233
233
|
"""
|
|
234
234
|
Some service definitions are overlapping to a point where they are _not_ distinguishable at all
|
|
@@ -258,7 +258,7 @@ def resolve_conflicts(
|
|
|
258
258
|
|
|
259
259
|
def determine_aws_service_model_for_data_plane(
|
|
260
260
|
request: Request, services: ServiceCatalog = None
|
|
261
|
-
) ->
|
|
261
|
+
) -> ServiceModel | None:
|
|
262
262
|
"""
|
|
263
263
|
A stripped down version of ``determine_aws_service_model`` which only checks hostname indicators for
|
|
264
264
|
the AWS data plane, such as s3 websites, lambda function URLs, or API gateway routes.
|
|
@@ -271,7 +271,7 @@ def determine_aws_service_model_for_data_plane(
|
|
|
271
271
|
|
|
272
272
|
def determine_aws_service_model(
|
|
273
273
|
request: Request, services: ServiceCatalog = None
|
|
274
|
-
) ->
|
|
274
|
+
) -> ServiceModel | None:
|
|
275
275
|
"""
|
|
276
276
|
Tries to determine the name of the AWS service an incoming request is targeting.
|
|
277
277
|
:param request: to determine the target service name of
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Slightly extends the ``botocore.validate`` package to provide better integration with our parser/serializer."""
|
|
2
2
|
|
|
3
|
-
from typing import Any,
|
|
3
|
+
from typing import Any, NamedTuple
|
|
4
4
|
|
|
5
5
|
from botocore.model import OperationModel, Shape
|
|
6
6
|
from botocore.validate import ParamValidator as BotocoreParamValidator
|
|
@@ -22,7 +22,7 @@ class Error(NamedTuple):
|
|
|
22
22
|
|
|
23
23
|
reason: str
|
|
24
24
|
name: str
|
|
25
|
-
attributes:
|
|
25
|
+
attributes: dict[str, Any]
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
class ParameterValidationError(Exception):
|
|
@@ -88,11 +88,11 @@ class EmptyInput(ParameterValidationError):
|
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
class ValidationErrors(BotocoreValidationErrors):
|
|
91
|
-
def __init__(self, shape: Shape, params:
|
|
91
|
+
def __init__(self, shape: Shape, params: dict[str, Any]):
|
|
92
92
|
super().__init__()
|
|
93
93
|
self.shape = shape
|
|
94
94
|
self.params = params
|
|
95
|
-
self._exceptions:
|
|
95
|
+
self._exceptions: list[ParameterValidationError] = []
|
|
96
96
|
|
|
97
97
|
@property
|
|
98
98
|
def exceptions(self):
|
|
@@ -133,7 +133,7 @@ class ValidationErrors(BotocoreValidationErrors):
|
|
|
133
133
|
|
|
134
134
|
|
|
135
135
|
class ParamValidator(BotocoreParamValidator):
|
|
136
|
-
def validate(self, params:
|
|
136
|
+
def validate(self, params: dict[str, Any], shape: Shape):
|
|
137
137
|
"""Validate parameters against a shape model.
|
|
138
138
|
|
|
139
139
|
This method will validate the parameters against a provided shape model.
|
localstack/aws/scaffold.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import io
|
|
2
2
|
import keyword
|
|
3
3
|
import re
|
|
4
|
+
from collections import OrderedDict
|
|
4
5
|
from functools import cached_property
|
|
5
6
|
from multiprocessing import Pool
|
|
6
7
|
from pathlib import Path
|
|
7
|
-
from typing import Dict, List, Optional, Set
|
|
8
8
|
|
|
9
9
|
import click
|
|
10
10
|
from botocore import xform_name
|
|
@@ -18,7 +18,6 @@ from botocore.model import (
|
|
|
18
18
|
StringShape,
|
|
19
19
|
StructureShape,
|
|
20
20
|
)
|
|
21
|
-
from typing_extensions import OrderedDict
|
|
22
21
|
|
|
23
22
|
from localstack.aws.spec import load_service
|
|
24
23
|
from localstack.utils.common import camel_to_snake_case, snake_to_camel_case
|
|
@@ -75,7 +74,7 @@ class ShapeNode:
|
|
|
75
74
|
self.shape = shape
|
|
76
75
|
|
|
77
76
|
@cached_property
|
|
78
|
-
def request_operation(self) ->
|
|
77
|
+
def request_operation(self) -> OperationModel | None:
|
|
79
78
|
for operation_name in self.service.operation_names:
|
|
80
79
|
operation = self.service.operation_model(operation_name)
|
|
81
80
|
if operation.input_shape is None:
|
|
@@ -89,7 +88,7 @@ class ShapeNode:
|
|
|
89
88
|
return None
|
|
90
89
|
|
|
91
90
|
@cached_property
|
|
92
|
-
def response_operation(self) ->
|
|
91
|
+
def response_operation(self) -> OperationModel | None:
|
|
93
92
|
for operation_name in self.service.operation_names:
|
|
94
93
|
operation = self.service.operation_model(operation_name)
|
|
95
94
|
if operation.output_shape is None:
|
|
@@ -128,7 +127,7 @@ class ShapeNode:
|
|
|
128
127
|
return isinstance(self.shape, StringShape) and self.shape.enum
|
|
129
128
|
|
|
130
129
|
@property
|
|
131
|
-
def dependencies(self) ->
|
|
130
|
+
def dependencies(self) -> list[str]:
|
|
132
131
|
shape = self.shape
|
|
133
132
|
|
|
134
133
|
if isinstance(shape, StructureShape):
|
|
@@ -327,7 +326,7 @@ def generate_service_types(output, service: ServiceModel, doc=True):
|
|
|
327
326
|
output.write("\n")
|
|
328
327
|
|
|
329
328
|
# ==================================== print type declarations
|
|
330
|
-
nodes:
|
|
329
|
+
nodes: dict[str, ShapeNode] = {}
|
|
331
330
|
|
|
332
331
|
for shape_name in service.shape_names:
|
|
333
332
|
shape = service.shape_for(shape_name)
|
|
@@ -338,9 +337,9 @@ def generate_service_types(output, service: ServiceModel, doc=True):
|
|
|
338
337
|
# output.write(f' "{name}",\n')
|
|
339
338
|
# output.write("]\n")
|
|
340
339
|
|
|
341
|
-
printed:
|
|
342
|
-
visited:
|
|
343
|
-
stack:
|
|
340
|
+
printed: set[str] = set()
|
|
341
|
+
visited: set[str] = set()
|
|
342
|
+
stack: list[str] = list(nodes.keys())
|
|
344
343
|
|
|
345
344
|
stack = sorted(stack, key=lambda name: nodes[name].get_order())
|
|
346
345
|
stack.reverse()
|
localstack/aws/serving/edge.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import threading
|
|
3
|
-
from typing import List
|
|
4
3
|
|
|
5
4
|
from rolo.gateway.wsgi import WsgiGateway
|
|
6
5
|
|
|
@@ -15,7 +14,7 @@ LOG = logging.getLogger(__name__)
|
|
|
15
14
|
|
|
16
15
|
|
|
17
16
|
def serve_gateway(
|
|
18
|
-
listen: HostAndPort |
|
|
17
|
+
listen: HostAndPort | list[HostAndPort], use_ssl: bool, asynchronous: bool = False
|
|
19
18
|
):
|
|
20
19
|
"""
|
|
21
20
|
Implementation of the edge.do_start_edge_proxy interface to start a Hypercorn server instance serving the
|
|
@@ -37,7 +36,7 @@ def serve_gateway(
|
|
|
37
36
|
|
|
38
37
|
|
|
39
38
|
def _serve_werkzeug(
|
|
40
|
-
gateway: LocalstackAwsGateway, listen:
|
|
39
|
+
gateway: LocalstackAwsGateway, listen: list[HostAndPort], use_ssl: bool, asynchronous: bool
|
|
41
40
|
):
|
|
42
41
|
from werkzeug.serving import ThreadedWSGIServer
|
|
43
42
|
|
|
@@ -57,7 +56,7 @@ def _serve_werkzeug(
|
|
|
57
56
|
params["ssl_context"] = (cert_file_name, key_file_name)
|
|
58
57
|
|
|
59
58
|
threads = []
|
|
60
|
-
servers:
|
|
59
|
+
servers: list[ThreadedWSGIServer] = []
|
|
61
60
|
|
|
62
61
|
for host_port in listen:
|
|
63
62
|
kwargs = dict(params)
|
|
@@ -90,7 +89,7 @@ def _serve_werkzeug(
|
|
|
90
89
|
|
|
91
90
|
|
|
92
91
|
def _serve_hypercorn(
|
|
93
|
-
gateway: LocalstackAwsGateway, listen:
|
|
92
|
+
gateway: LocalstackAwsGateway, listen: list[HostAndPort], use_ssl: bool, asynchronous: bool
|
|
94
93
|
):
|
|
95
94
|
from localstack.http.hypercorn import GatewayServer
|
|
96
95
|
|
|
@@ -112,7 +111,7 @@ def _serve_hypercorn(
|
|
|
112
111
|
|
|
113
112
|
|
|
114
113
|
def _serve_twisted(
|
|
115
|
-
gateway: LocalstackAwsGateway, listen:
|
|
114
|
+
gateway: LocalstackAwsGateway, listen: list[HostAndPort], use_ssl: bool, asynchronous: bool
|
|
116
115
|
):
|
|
117
116
|
from .twisted import serve_gateway
|
|
118
117
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
from hypercorn import Config
|
|
5
5
|
from hypercorn.asyncio import serve as serve_hypercorn
|
|
@@ -15,7 +15,7 @@ def serve(
|
|
|
15
15
|
host: str = "localhost",
|
|
16
16
|
port: int = constants.DEFAULT_PORT_EDGE,
|
|
17
17
|
use_reloader: bool = True,
|
|
18
|
-
ssl_creds:
|
|
18
|
+
ssl_creds: tuple[Any, Any] | None = None,
|
|
19
19
|
**kwargs,
|
|
20
20
|
) -> None:
|
|
21
21
|
"""
|
|
@@ -4,7 +4,6 @@ Bindings to serve LocalStack using twisted.
|
|
|
4
4
|
|
|
5
5
|
import logging
|
|
6
6
|
import time
|
|
7
|
-
from typing import List
|
|
8
7
|
|
|
9
8
|
from rolo.gateway import Gateway
|
|
10
9
|
from rolo.serving.twisted import TwistedGateway
|
|
@@ -130,7 +129,7 @@ def stop_thread_pool(self: ThreadPool, stop, timeout: float = None):
|
|
|
130
129
|
|
|
131
130
|
|
|
132
131
|
def serve_gateway(
|
|
133
|
-
gateway: Gateway, listen:
|
|
132
|
+
gateway: Gateway, listen: list[HostAndPort], use_ssl: bool, asynchronous: bool = False
|
|
134
133
|
):
|
|
135
134
|
"""
|
|
136
135
|
Serve a Gateway instance using twisted.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import ssl
|
|
2
|
-
from typing import TYPE_CHECKING, Any
|
|
2
|
+
from typing import TYPE_CHECKING, Any
|
|
3
3
|
|
|
4
4
|
from rolo.gateway import Gateway
|
|
5
5
|
from rolo.gateway.wsgi import WsgiGateway
|
|
@@ -17,7 +17,7 @@ def serve(
|
|
|
17
17
|
host: str = "localhost",
|
|
18
18
|
port: int = constants.DEFAULT_PORT_EDGE,
|
|
19
19
|
use_reloader: bool = True,
|
|
20
|
-
ssl_creds:
|
|
20
|
+
ssl_creds: tuple[Any, Any] | None = None,
|
|
21
21
|
**kwargs,
|
|
22
22
|
) -> None:
|
|
23
23
|
"""
|
localstack/aws/skeleton.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import inspect
|
|
2
2
|
import logging
|
|
3
|
-
from
|
|
3
|
+
from collections.abc import Callable
|
|
4
|
+
from typing import Any, NamedTuple
|
|
4
5
|
|
|
5
6
|
from botocore import xform_name
|
|
6
7
|
from botocore.model import ServiceModel
|
|
@@ -20,10 +21,10 @@ from localstack.utils.coverage_docs import get_coverage_link_for_service
|
|
|
20
21
|
|
|
21
22
|
LOG = logging.getLogger(__name__)
|
|
22
23
|
|
|
23
|
-
DispatchTable =
|
|
24
|
+
DispatchTable = dict[str, ServiceRequestHandler]
|
|
24
25
|
|
|
25
26
|
|
|
26
|
-
def create_skeleton(service:
|
|
27
|
+
def create_skeleton(service: str | ServiceModel, delegate: Any):
|
|
27
28
|
if isinstance(service, str):
|
|
28
29
|
service = load_service(service)
|
|
29
30
|
|
|
@@ -49,7 +50,7 @@ def create_dispatch_table(delegate: object) -> DispatchTable:
|
|
|
49
50
|
# scan class tree for @handler wrapped functions (reverse class tree so that inherited functions overwrite parent
|
|
50
51
|
# functions)
|
|
51
52
|
cls_tree = inspect.getmro(delegate.__class__)
|
|
52
|
-
handlers:
|
|
53
|
+
handlers: dict[str, HandlerAttributes] = {}
|
|
53
54
|
cls_tree = reversed(list(cls_tree))
|
|
54
55
|
for cls in cls_tree:
|
|
55
56
|
if cls == object:
|
|
@@ -98,9 +99,7 @@ class ServiceRequestDispatcher:
|
|
|
98
99
|
self.pass_context = pass_context
|
|
99
100
|
self.expand_parameters = expand_parameters
|
|
100
101
|
|
|
101
|
-
def __call__(
|
|
102
|
-
self, context: RequestContext, request: ServiceRequest
|
|
103
|
-
) -> Optional[ServiceResponse]:
|
|
102
|
+
def __call__(self, context: RequestContext, request: ServiceRequest) -> ServiceResponse | None:
|
|
104
103
|
args = []
|
|
105
104
|
kwargs = {}
|
|
106
105
|
|
|
@@ -122,7 +121,7 @@ class Skeleton:
|
|
|
122
121
|
service: ServiceModel
|
|
123
122
|
dispatch_table: DispatchTable
|
|
124
123
|
|
|
125
|
-
def __init__(self, service: ServiceModel, implementation:
|
|
124
|
+
def __init__(self, service: ServiceModel, implementation: Any | DispatchTable):
|
|
126
125
|
self.service = service
|
|
127
126
|
|
|
128
127
|
if isinstance(implementation, dict):
|
localstack/aws/spec.py
CHANGED
|
@@ -4,8 +4,9 @@ import logging
|
|
|
4
4
|
import os
|
|
5
5
|
import sys
|
|
6
6
|
from collections import defaultdict
|
|
7
|
+
from collections.abc import Generator
|
|
7
8
|
from functools import cached_property, lru_cache
|
|
8
|
-
from typing import
|
|
9
|
+
from typing import Literal, NamedTuple
|
|
9
10
|
|
|
10
11
|
import botocore
|
|
11
12
|
import jsonpatch
|
|
@@ -31,13 +32,13 @@ class ServiceModelIdentifier(NamedTuple):
|
|
|
31
32
|
"""
|
|
32
33
|
|
|
33
34
|
name: ServiceName
|
|
34
|
-
protocol:
|
|
35
|
+
protocol: ProtocolName | None = None
|
|
35
36
|
|
|
36
37
|
|
|
37
38
|
spec_patches_json = os.path.join(os.path.dirname(__file__), "spec-patches.json")
|
|
38
39
|
|
|
39
40
|
|
|
40
|
-
def load_spec_patches() ->
|
|
41
|
+
def load_spec_patches() -> dict[str, list]:
|
|
41
42
|
if not os.path.exists(spec_patches_json):
|
|
42
43
|
return {}
|
|
43
44
|
with open(spec_patches_json) as fd:
|
|
@@ -59,9 +60,9 @@ class PatchingLoader(Loader):
|
|
|
59
60
|
A custom botocore Loader that applies JSON patches from the given json patch file to the specs as they are loaded.
|
|
60
61
|
"""
|
|
61
62
|
|
|
62
|
-
patches:
|
|
63
|
+
patches: dict[str, list]
|
|
63
64
|
|
|
64
|
-
def __init__(self, patches:
|
|
65
|
+
def __init__(self, patches: dict[str, list], *args, **kwargs):
|
|
65
66
|
# add the builtin data path to the extra_search_paths to ensure they are discovered by the loader
|
|
66
67
|
super().__init__(*args, **kwargs)
|
|
67
68
|
self.patches = patches
|
|
@@ -94,12 +95,12 @@ class UnknownServiceProtocolError(UnknownServiceError):
|
|
|
94
95
|
fmt = "Unknown service protocol: '{service_name}-{protocol}'."
|
|
95
96
|
|
|
96
97
|
|
|
97
|
-
def list_services() ->
|
|
98
|
+
def list_services() -> list[ServiceModel]:
|
|
98
99
|
return [load_service(service) for service in loader.list_available_services("service-2")]
|
|
99
100
|
|
|
100
101
|
|
|
101
102
|
def load_service(
|
|
102
|
-
service: ServiceName, version:
|
|
103
|
+
service: ServiceName, version: str | None = None, protocol: ProtocolName | None = None
|
|
103
104
|
) -> ServiceModel:
|
|
104
105
|
"""
|
|
105
106
|
Loads a service
|
|
@@ -136,7 +137,7 @@ def load_service(
|
|
|
136
137
|
return ServiceModel(service_description, service)
|
|
137
138
|
|
|
138
139
|
|
|
139
|
-
def iterate_service_operations() -> Generator[
|
|
140
|
+
def iterate_service_operations() -> Generator[tuple[ServiceModel, OperationModel], None, None]:
|
|
140
141
|
"""
|
|
141
142
|
Returns one record per operation in the AWS service spec, where the first item is the service model the operation
|
|
142
143
|
belongs to, and the second is the operation model.
|
|
@@ -154,11 +155,11 @@ class ServiceCatalogIndex:
|
|
|
154
155
|
The ServiceCatalogIndex enables fast lookups for common operations to determine a service from service indicators.
|
|
155
156
|
"""
|
|
156
157
|
|
|
157
|
-
service_names:
|
|
158
|
-
target_prefix_index:
|
|
159
|
-
signing_name_index:
|
|
160
|
-
operations_index:
|
|
161
|
-
endpoint_prefix_index:
|
|
158
|
+
service_names: list[ServiceName]
|
|
159
|
+
target_prefix_index: dict[str, list[ServiceModelIdentifier]]
|
|
160
|
+
signing_name_index: dict[str, list[ServiceModelIdentifier]]
|
|
161
|
+
operations_index: dict[str, list[ServiceModelIdentifier]]
|
|
162
|
+
endpoint_prefix_index: dict[str, list[ServiceModelIdentifier]]
|
|
162
163
|
|
|
163
164
|
|
|
164
165
|
class LazyServiceCatalogIndex:
|
|
@@ -167,11 +168,11 @@ class LazyServiceCatalogIndex:
|
|
|
167
168
|
"""
|
|
168
169
|
|
|
169
170
|
@cached_property
|
|
170
|
-
def service_names(self) ->
|
|
171
|
+
def service_names(self) -> list[ServiceName]:
|
|
171
172
|
return list(self._services.keys())
|
|
172
173
|
|
|
173
174
|
@cached_property
|
|
174
|
-
def target_prefix_index(self) ->
|
|
175
|
+
def target_prefix_index(self) -> dict[str, list[ServiceModelIdentifier]]:
|
|
175
176
|
result = defaultdict(list)
|
|
176
177
|
for service_models in self._services.values():
|
|
177
178
|
for service_model in service_models:
|
|
@@ -183,7 +184,7 @@ class LazyServiceCatalogIndex:
|
|
|
183
184
|
return dict(result)
|
|
184
185
|
|
|
185
186
|
@cached_property
|
|
186
|
-
def signing_name_index(self) ->
|
|
187
|
+
def signing_name_index(self) -> dict[str, list[ServiceModelIdentifier]]:
|
|
187
188
|
result = defaultdict(list)
|
|
188
189
|
for service_models in self._services.values():
|
|
189
190
|
for service_model in service_models:
|
|
@@ -193,7 +194,7 @@ class LazyServiceCatalogIndex:
|
|
|
193
194
|
return dict(result)
|
|
194
195
|
|
|
195
196
|
@cached_property
|
|
196
|
-
def operations_index(self) ->
|
|
197
|
+
def operations_index(self) -> dict[str, list[ServiceModelIdentifier]]:
|
|
197
198
|
result = defaultdict(list)
|
|
198
199
|
for service_models in self._services.values():
|
|
199
200
|
for service_model in service_models:
|
|
@@ -208,7 +209,7 @@ class LazyServiceCatalogIndex:
|
|
|
208
209
|
return dict(result)
|
|
209
210
|
|
|
210
211
|
@cached_property
|
|
211
|
-
def endpoint_prefix_index(self) ->
|
|
212
|
+
def endpoint_prefix_index(self) -> dict[str, list[ServiceModelIdentifier]]:
|
|
212
213
|
result = defaultdict(list)
|
|
213
214
|
for service_models in self._services.values():
|
|
214
215
|
for service_model in service_models:
|
|
@@ -218,7 +219,7 @@ class LazyServiceCatalogIndex:
|
|
|
218
219
|
return dict(result)
|
|
219
220
|
|
|
220
221
|
@cached_property
|
|
221
|
-
def _services(self) ->
|
|
222
|
+
def _services(self) -> dict[ServiceName, list[ServiceModel]]:
|
|
222
223
|
services = defaultdict(list)
|
|
223
224
|
for service in list_services():
|
|
224
225
|
services[service.service_name].append(service)
|
|
@@ -232,38 +233,36 @@ class ServiceCatalog:
|
|
|
232
233
|
self.index = index or LazyServiceCatalogIndex()
|
|
233
234
|
|
|
234
235
|
@lru_cache(maxsize=512)
|
|
235
|
-
def get(
|
|
236
|
-
self, name: ServiceName, protocol: Optional[ProtocolName] = None
|
|
237
|
-
) -> Optional[ServiceModel]:
|
|
236
|
+
def get(self, name: ServiceName, protocol: ProtocolName | None = None) -> ServiceModel | None:
|
|
238
237
|
return load_service(name, protocol=protocol)
|
|
239
238
|
|
|
240
239
|
@property
|
|
241
|
-
def service_names(self) ->
|
|
240
|
+
def service_names(self) -> list[ServiceName]:
|
|
242
241
|
return self.index.service_names
|
|
243
242
|
|
|
244
243
|
@property
|
|
245
|
-
def target_prefix_index(self) ->
|
|
244
|
+
def target_prefix_index(self) -> dict[str, list[ServiceModelIdentifier]]:
|
|
246
245
|
return self.index.target_prefix_index
|
|
247
246
|
|
|
248
247
|
@property
|
|
249
|
-
def signing_name_index(self) ->
|
|
248
|
+
def signing_name_index(self) -> dict[str, list[ServiceModelIdentifier]]:
|
|
250
249
|
return self.index.signing_name_index
|
|
251
250
|
|
|
252
251
|
@property
|
|
253
|
-
def operations_index(self) ->
|
|
252
|
+
def operations_index(self) -> dict[str, list[ServiceModelIdentifier]]:
|
|
254
253
|
return self.index.operations_index
|
|
255
254
|
|
|
256
255
|
@property
|
|
257
|
-
def endpoint_prefix_index(self) ->
|
|
256
|
+
def endpoint_prefix_index(self) -> dict[str, list[ServiceModelIdentifier]]:
|
|
258
257
|
return self.index.endpoint_prefix_index
|
|
259
258
|
|
|
260
|
-
def by_target_prefix(self, target_prefix: str) ->
|
|
259
|
+
def by_target_prefix(self, target_prefix: str) -> list[ServiceModelIdentifier]:
|
|
261
260
|
return self.target_prefix_index.get(target_prefix, [])
|
|
262
261
|
|
|
263
|
-
def by_signing_name(self, signing_name: str) ->
|
|
262
|
+
def by_signing_name(self, signing_name: str) -> list[ServiceModelIdentifier]:
|
|
264
263
|
return self.signing_name_index.get(signing_name, [])
|
|
265
264
|
|
|
266
|
-
def by_operation(self, operation_name: str) ->
|
|
265
|
+
def by_operation(self, operation_name: str) -> list[ServiceModelIdentifier]:
|
|
267
266
|
return self.operations_index.get(operation_name, [])
|
|
268
267
|
|
|
269
268
|
|
localstack/cli/localstack.py
CHANGED
|
@@ -3,7 +3,7 @@ import logging
|
|
|
3
3
|
import os
|
|
4
4
|
import sys
|
|
5
5
|
import traceback
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import Optional, TypedDict
|
|
7
7
|
|
|
8
8
|
import click
|
|
9
9
|
import requests
|
|
@@ -405,7 +405,7 @@ def cmd_status_services(format_: str) -> None:
|
|
|
405
405
|
raise CLIError(f"could not connect to LocalStack health endpoint at {url}")
|
|
406
406
|
|
|
407
407
|
|
|
408
|
-
def _print_service_table(services:
|
|
408
|
+
def _print_service_table(services: dict[str, str]) -> None:
|
|
409
409
|
from rich.table import Table
|
|
410
410
|
|
|
411
411
|
status_display = {
|
|
@@ -486,9 +486,9 @@ def cmd_start(
|
|
|
486
486
|
no_banner: bool,
|
|
487
487
|
detached: bool,
|
|
488
488
|
network: str = None,
|
|
489
|
-
env:
|
|
490
|
-
publish:
|
|
491
|
-
volume:
|
|
489
|
+
env: tuple = (),
|
|
490
|
+
publish: tuple = (),
|
|
491
|
+
volume: tuple = (),
|
|
492
492
|
host_dns: bool = False,
|
|
493
493
|
stack: str = None,
|
|
494
494
|
) -> None:
|
|
@@ -825,7 +825,7 @@ def cmd_update_docker_images() -> None:
|
|
|
825
825
|
update_images(localstack_images)
|
|
826
826
|
|
|
827
827
|
|
|
828
|
-
def update_images(image_list:
|
|
828
|
+
def update_images(image_list: list[str]) -> None:
|
|
829
829
|
from rich.markup import escape
|
|
830
830
|
from rich.progress import MofNCompleteColumn, Progress
|
|
831
831
|
|
localstack/cli/lpm.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import itertools
|
|
2
2
|
import logging
|
|
3
3
|
from multiprocessing.pool import ThreadPool
|
|
4
|
-
from typing import
|
|
4
|
+
from typing import Optional
|
|
5
5
|
|
|
6
6
|
import click
|
|
7
7
|
from rich.console import Console
|
|
@@ -74,7 +74,7 @@ def _do_install_package(package: Package, version: str = None, target: InstallTa
|
|
|
74
74
|
help="target of the installation",
|
|
75
75
|
)
|
|
76
76
|
def install(
|
|
77
|
-
package:
|
|
77
|
+
package: list[str],
|
|
78
78
|
parallel: Optional[int] = 1,
|
|
79
79
|
version: Optional[str] = None,
|
|
80
80
|
target: Optional[str] = None,
|