localstack-core 4.7.1.dev22__py3-none-any.whl → 4.7.1.dev24__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- localstack/aws/api/apigateway/__init__.py +87 -110
- localstack/aws/api/core.py +2 -3
- localstack/aws/api/events/__init__.py +12 -16
- localstack/aws/api/logs/__init__.py +5 -8
- localstack/aws/api/pipes/__init__.py +24 -32
- localstack/aws/api/scheduler/__init__.py +14 -16
- localstack/aws/api/stepfunctions/__init__.py +88 -114
- localstack/aws/api/support/__init__.py +8 -9
- localstack/aws/chain.py +2 -2
- localstack/aws/client.py +7 -9
- localstack/aws/connect.py +40 -39
- localstack/aws/forwarder.py +5 -4
- localstack/aws/gateway.py +1 -3
- localstack/aws/handlers/analytics.py +1 -2
- localstack/aws/handlers/cors.py +4 -5
- localstack/aws/handlers/logging.py +1 -2
- localstack/aws/handlers/metric_handler.py +3 -4
- localstack/aws/handlers/service.py +5 -5
- localstack/aws/mocking.py +15 -24
- localstack/aws/protocol/op_router.py +11 -10
- localstack/aws/protocol/parser.py +16 -17
- localstack/aws/protocol/serializer.py +37 -40
- localstack/aws/protocol/service_router.py +13 -13
- localstack/aws/protocol/validate.py +5 -5
- localstack/aws/scaffold.py +8 -9
- localstack/aws/serving/edge.py +5 -6
- localstack/aws/serving/hypercorn.py +2 -2
- localstack/aws/serving/twisted.py +1 -2
- localstack/aws/serving/werkzeug.py +2 -2
- localstack/aws/skeleton.py +7 -8
- localstack/aws/spec.py +29 -30
- localstack/cli/localstack.py +6 -6
- localstack/cli/lpm.py +2 -2
- localstack/config.py +14 -15
- localstack/deprecations.py +5 -5
- localstack/dev/run/__main__.py +4 -4
- localstack/dev/run/paths.py +5 -5
- localstack/dns/models.py +2 -1
- localstack/dns/server.py +3 -2
- localstack/http/dispatcher.py +1 -2
- localstack/http/response.py +2 -2
- localstack/http/router.py +1 -1
- localstack/http/trace.py +2 -1
- localstack/logging/format.py +3 -3
- localstack/packages/api.py +5 -5
- localstack/packages/core.py +3 -3
- localstack/packages/debugpy.py +1 -3
- localstack/packages/ffmpeg.py +1 -2
- localstack/packages/java.py +1 -2
- localstack/packages/terraform.py +1 -2
- localstack/runtime/init.py +6 -7
- localstack/runtime/shutdown.py +2 -1
- localstack/services/apigateway/exporter.py +1 -2
- localstack/services/apigateway/helpers.py +6 -6
- localstack/services/apigateway/legacy/context.py +21 -21
- localstack/services/apigateway/legacy/helpers.py +20 -20
- localstack/services/apigateway/legacy/integration.py +7 -7
- localstack/services/apigateway/legacy/router_asf.py +2 -2
- localstack/services/apigateway/legacy/templates.py +5 -5
- localstack/services/apigateway/models.py +16 -16
- localstack/services/apigateway/next_gen/execute_api/api.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/context.py +25 -25
- localstack/services/apigateway/next_gen/execute_api/handlers/api_key_validation.py +2 -5
- localstack/services/apigateway/next_gen/execute_api/handlers/parse.py +1 -2
- localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +1 -1
- localstack/services/apigateway/next_gen/execute_api/header_utils.py +1 -1
- localstack/services/apigateway/next_gen/execute_api/helpers.py +2 -2
- localstack/services/apigateway/next_gen/execute_api/integrations/aws.py +6 -6
- localstack/services/apigateway/next_gen/execute_api/integrations/http.py +9 -9
- localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
- localstack/services/apigateway/resource_providers/aws_apigateway_account.py +3 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_account_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_apikey.py +14 -14
- localstack/services/apigateway/resource_providers/aws_apigateway_apikey_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_deployment.py +46 -46
- localstack/services/apigateway/resource_providers/aws_apigateway_deployment_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_domainname.py +18 -18
- localstack/services/apigateway/resource_providers/aws_apigateway_domainname_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse.py +7 -7
- localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_method.py +36 -36
- localstack/services/apigateway/resource_providers/aws_apigateway_method_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_model.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_model_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator.py +6 -6
- localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_resource.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_resource_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_restapi.py +26 -26
- localstack/services/apigateway/resource_providers/aws_apigateway_restapi_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_stage.py +33 -33
- localstack/services/apigateway/resource_providers/aws_apigateway_stage_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplan.py +18 -18
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplan_plugin.py +1 -3
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey.py +5 -5
- localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey_plugin.py +1 -3
- localstack/services/cdk/resource_providers/cdk_metadata.py +2 -2
- localstack/services/cdk/resource_providers/cdk_metadata_plugin.py +1 -3
- localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate.py +14 -14
- localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate_plugin.py +1 -3
- localstack/services/cloudformation/cfn_utils.py +1 -1
- localstack/services/cloudformation/deployment_utils.py +2 -2
- localstack/services/cloudformation/engine/changes.py +3 -3
- localstack/services/cloudformation/engine/entities.py +12 -12
- localstack/services/cloudformation/engine/parameters.py +3 -3
- localstack/services/cloudformation/engine/template_deployer.py +9 -10
- localstack/services/cloudformation/engine/transformers.py +5 -4
- localstack/services/cloudformation/engine/types.py +5 -4
- localstack/services/cloudformation/engine/v2/change_set_model.py +31 -9
- localstack/services/cloudformation/engine/v2/change_set_model_describer.py +6 -6
- localstack/services/cloudformation/engine/v2/change_set_model_executor.py +62 -80
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +15 -14
- localstack/services/cloudformation/engine/v2/change_set_model_transform.py +5 -5
- localstack/services/cloudformation/provider_utils.py +2 -2
- localstack/services/cloudformation/resource_provider.py +10 -9
- localstack/services/cloudformation/resource_providers/aws_cloudformation_macro.py +7 -7
- localstack/services/cloudformation/resource_providers/aws_cloudformation_macro_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_stack.py +9 -9
- localstack/services/cloudformation/resource_providers/aws_cloudformation_stack_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition.py +6 -6
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition_plugin.py +1 -3
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle.py +2 -2
- localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle_plugin.py +1 -3
- localstack/services/cloudformation/scaffolding/__main__.py +8 -7
- localstack/services/cloudformation/scaffolding/propgen.py +2 -2
- localstack/services/cloudformation/stores.py +2 -3
- localstack/services/cloudformation/v2/entities.py +57 -36
- localstack/services/cloudformation/v2/provider.py +155 -29
- localstack/services/cloudwatch/alarm_scheduler.py +7 -7
- localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
- localstack/services/cloudwatch/models.py +5 -7
- localstack/services/cloudwatch/provider.py +12 -12
- localstack/services/cloudwatch/provider_v2.py +2 -4
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm.py +40 -40
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm_plugin.py +1 -3
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm.py +12 -12
- localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm_plugin.py +1 -3
- localstack/services/dynamodb/packages.py +1 -2
- localstack/services/dynamodb/provider.py +7 -8
- localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable.py +63 -63
- localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable_plugin.py +1 -3
- localstack/services/dynamodb/resource_providers/aws_dynamodb_table.py +57 -57
- localstack/services/dynamodb/resource_providers/aws_dynamodb_table_plugin.py +1 -3
- localstack/services/dynamodb/utils.py +13 -14
- localstack/services/dynamodb/v2/provider.py +6 -7
- localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
- localstack/services/dynamodbstreams/models.py +1 -3
- localstack/services/ec2/patches.py +4 -5
- localstack/services/ec2/provider.py +3 -3
- localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions.py +10 -10
- localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_instance.py +96 -96
- localstack/services/ec2/resource_providers/aws_ec2_instance_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_internetgateway.py +5 -5
- localstack/services/ec2/resource_providers/aws_ec2_internetgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_keypair.py +10 -10
- localstack/services/ec2/resource_providers/aws_ec2_keypair_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_natgateway.py +13 -13
- localstack/services/ec2/resource_providers/aws_ec2_natgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_networkacl.py +6 -6
- localstack/services/ec2/resource_providers/aws_ec2_networkacl_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_prefixlist.py +14 -14
- localstack/services/ec2/resource_providers/aws_ec2_prefixlist_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_route.py +15 -15
- localstack/services/ec2/resource_providers/aws_ec2_route_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_routetable.py +6 -6
- localstack/services/ec2/resource_providers/aws_ec2_routetable_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_securitygroup.py +29 -29
- localstack/services/ec2/resource_providers/aws_ec2_securitygroup_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_subnet.py +19 -19
- localstack/services/ec2/resource_providers/aws_ec2_subnet_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation.py +4 -4
- localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_transitgateway.py +16 -16
- localstack/services/ec2/resource_providers/aws_ec2_transitgateway_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment.py +9 -9
- localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpc.py +15 -15
- localstack/services/ec2/resource_providers/aws_ec2_vpc_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint.py +13 -13
- localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint_plugin.py +1 -3
- localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment.py +5 -5
- localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment_plugin.py +1 -3
- localstack/services/ecr/resource_providers/aws_ecr_repository.py +17 -17
- localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
- localstack/services/edge.py +5 -5
- localstack/services/es/provider.py +19 -19
- localstack/services/events/archive.py +2 -2
- localstack/services/events/connection.py +5 -5
- localstack/services/events/event_bus.py +9 -9
- localstack/services/events/models.py +25 -25
- localstack/services/events/provider.py +12 -12
- localstack/services/events/replay.py +3 -3
- localstack/services/events/resource_providers/aws_events_apidestination.py +8 -8
- localstack/services/events/resource_providers/aws_events_apidestination_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_connection.py +27 -27
- localstack/services/events/resource_providers/aws_events_connection_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_eventbus.py +9 -9
- localstack/services/events/resource_providers/aws_events_eventbus_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_eventbuspolicy.py +11 -11
- localstack/services/events/resource_providers/aws_events_eventbuspolicy_plugin.py +1 -3
- localstack/services/events/resource_providers/aws_events_rule.py +82 -82
- localstack/services/events/resource_providers/aws_events_rule_plugin.py +1 -3
- localstack/services/events/rule.py +15 -15
- localstack/services/events/target.py +5 -5
- localstack/services/events/utils.py +7 -7
- localstack/services/events/v1/models.py +1 -3
- localstack/services/events/v1/provider.py +10 -10
- localstack/services/firehose/models.py +1 -3
- localstack/services/firehose/provider.py +11 -12
- localstack/services/iam/iam_patches.py +5 -6
- localstack/services/iam/provider.py +4 -4
- localstack/services/iam/resource_providers/aws_iam_accesskey.py +6 -6
- localstack/services/iam/resource_providers/aws_iam_accesskey_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_group.py +9 -9
- localstack/services/iam/resource_providers/aws_iam_group_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_instanceprofile.py +5 -5
- localstack/services/iam/resource_providers/aws_iam_instanceprofile_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_managedpolicy.py +9 -9
- localstack/services/iam/resource_providers/aws_iam_managedpolicy_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_policy.py +7 -7
- localstack/services/iam/resource_providers/aws_iam_policy_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_role.py +16 -16
- localstack/services/iam/resource_providers/aws_iam_role_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_servercertificate.py +10 -10
- localstack/services/iam/resource_providers/aws_iam_servercertificate_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_servicelinkedrole.py +5 -5
- localstack/services/iam/resource_providers/aws_iam_servicelinkedrole_plugin.py +1 -3
- localstack/services/iam/resource_providers/aws_iam_user.py +17 -17
- localstack/services/iam/resource_providers/aws_iam_user_plugin.py +1 -3
- localstack/services/kinesis/kinesis_mock_server.py +7 -8
- localstack/services/kinesis/models.py +2 -3
- localstack/services/kinesis/packages.py +3 -3
- localstack/services/kinesis/resource_providers/aws_kinesis_stream.py +13 -13
- localstack/services/kinesis/resource_providers/aws_kinesis_stream_plugin.py +1 -3
- localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer.py +7 -7
- localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer_plugin.py +1 -3
- localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream.py +191 -191
- localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream_plugin.py +1 -3
- localstack/services/kms/models.py +14 -17
- localstack/services/kms/provider.py +2 -3
- localstack/services/kms/resource_providers/aws_kms_alias.py +3 -3
- localstack/services/kms/resource_providers/aws_kms_alias_plugin.py +1 -3
- localstack/services/kms/resource_providers/aws_kms_key.py +14 -14
- localstack/services/kms/resource_providers/aws_kms_key_plugin.py +1 -3
- localstack/services/kms/utils.py +3 -2
- localstack/services/lambda_/api_utils.py +12 -12
- localstack/services/lambda_/custom_endpoints.py +2 -2
- localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +1 -1
- localstack/services/lambda_/event_source_mapping/pipe_utils.py +2 -2
- localstack/services/lambda_/event_source_mapping/pollers/stream_poller.py +1 -1
- localstack/services/lambda_/event_source_mapping/senders/sender_utils.py +2 -1
- localstack/services/lambda_/invocation/assignment.py +1 -2
- localstack/services/lambda_/invocation/docker_runtime_executor.py +5 -4
- localstack/services/lambda_/invocation/execution_environment.py +4 -4
- localstack/services/lambda_/invocation/executor_endpoint.py +5 -5
- localstack/services/lambda_/invocation/internal_sqs_queue.py +1 -1
- localstack/services/lambda_/invocation/lambda_models.py +23 -23
- localstack/services/lambda_/invocation/lambda_service.py +4 -4
- localstack/services/lambda_/invocation/logs.py +2 -3
- localstack/services/lambda_/invocation/runtime_executor.py +3 -3
- localstack/services/lambda_/ldm.py +2 -3
- localstack/services/lambda_/packages.py +2 -3
- localstack/services/lambda_/provider.py +3 -3
- localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig.py +8 -8
- localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig.py +11 -11
- localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping.py +39 -39
- localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_function.py +54 -54
- localstack/services/lambda_/resource_providers/aws_lambda_function_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_layerversion.py +11 -11
- localstack/services/lambda_/resource_providers/aws_lambda_layerversion_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission.py +6 -6
- localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_permission.py +10 -10
- localstack/services/lambda_/resource_providers/aws_lambda_permission_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_url.py +14 -14
- localstack/services/lambda_/resource_providers/aws_lambda_url_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/aws_lambda_version.py +8 -8
- localstack/services/lambda_/resource_providers/aws_lambda_version_plugin.py +1 -3
- localstack/services/lambda_/resource_providers/lambda_alias.py +12 -12
- localstack/services/lambda_/resource_providers/lambda_alias_plugin.py +1 -3
- localstack/services/lambda_/runtimes.py +1 -3
- localstack/services/logs/models.py +1 -3
- localstack/services/logs/provider.py +3 -3
- localstack/services/logs/resource_providers/aws_logs_loggroup.py +9 -9
- localstack/services/logs/resource_providers/aws_logs_loggroup_plugin.py +1 -3
- localstack/services/logs/resource_providers/aws_logs_logstream.py +4 -4
- localstack/services/logs/resource_providers/aws_logs_logstream_plugin.py +1 -3
- localstack/services/logs/resource_providers/aws_logs_subscriptionfilter.py +7 -7
- localstack/services/logs/resource_providers/aws_logs_subscriptionfilter_plugin.py +1 -3
- localstack/services/moto.py +3 -3
- localstack/services/opensearch/cluster.py +13 -13
- localstack/services/opensearch/cluster_manager.py +13 -14
- localstack/services/opensearch/models.py +1 -3
- localstack/services/opensearch/packages.py +1 -2
- localstack/services/opensearch/provider.py +7 -8
- localstack/services/opensearch/resource_providers/aws_elasticsearch_domain.py +61 -61
- localstack/services/opensearch/resource_providers/aws_elasticsearch_domain_plugin.py +1 -3
- localstack/services/opensearch/resource_providers/aws_opensearchservice_domain.py +89 -89
- localstack/services/opensearch/resource_providers/aws_opensearchservice_domain_plugin.py +1 -3
- localstack/services/opensearch/versions.py +1 -3
- localstack/services/plugins.py +26 -25
- localstack/services/redshift/resource_providers/aws_redshift_cluster.py +57 -57
- localstack/services/redshift/resource_providers/aws_redshift_cluster_plugin.py +1 -3
- localstack/services/resource_groups/resource_providers/aws_resourcegroups_group.py +21 -21
- localstack/services/resource_groups/resource_providers/aws_resourcegroups_group_plugin.py +1 -3
- localstack/services/route53/models.py +1 -3
- localstack/services/route53/provider.py +1 -2
- localstack/services/route53/resource_providers/aws_route53_healthcheck.py +6 -6
- localstack/services/route53/resource_providers/aws_route53_healthcheck_plugin.py +1 -3
- localstack/services/route53/resource_providers/aws_route53_recordset.py +27 -27
- localstack/services/route53/resource_providers/aws_route53_recordset_plugin.py +1 -3
- localstack/services/route53resolver/models.py +8 -10
- localstack/services/route53resolver/provider.py +12 -12
- localstack/services/s3/codec.py +2 -2
- localstack/services/s3/cors.py +4 -4
- localstack/services/s3/models.py +72 -72
- localstack/services/s3/notifications.py +19 -19
- localstack/services/s3/presigned_url.py +6 -5
- localstack/services/s3/provider.py +13 -14
- localstack/services/s3/resource_providers/aws_s3_bucket.py +180 -180
- localstack/services/s3/resource_providers/aws_s3_bucket_plugin.py +1 -3
- localstack/services/s3/resource_providers/aws_s3_bucketpolicy.py +4 -4
- localstack/services/s3/resource_providers/aws_s3_bucketpolicy_plugin.py +1 -3
- localstack/services/s3/storage/core.py +4 -3
- localstack/services/s3/storage/ephemeral.py +7 -6
- localstack/services/s3/utils.py +11 -11
- localstack/services/s3/validation.py +1 -1
- localstack/services/s3/website_hosting.py +5 -5
- localstack/services/scheduler/resource_providers/aws_scheduler_schedule.py +60 -60
- localstack/services/scheduler/resource_providers/aws_scheduler_schedule_plugin.py +1 -3
- localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup.py +9 -9
- localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup_plugin.py +1 -3
- localstack/services/secretsmanager/provider.py +9 -11
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy.py +5 -5
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule.py +21 -21
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret.py +23 -23
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret_plugin.py +1 -3
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment.py +5 -5
- localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment_plugin.py +1 -3
- localstack/services/ses/provider.py +8 -8
- localstack/services/ses/resource_providers/aws_ses_emailidentity.py +21 -21
- localstack/services/ses/resource_providers/aws_ses_emailidentity_plugin.py +1 -3
- localstack/services/sns/models.py +25 -25
- localstack/services/sns/provider.py +1 -2
- localstack/services/sns/publisher.py +6 -7
- localstack/services/sns/resource_providers/aws_sns_subscription.py +13 -13
- localstack/services/sns/resource_providers/aws_sns_subscription_plugin.py +1 -3
- localstack/services/sns/resource_providers/aws_sns_topic.py +16 -16
- localstack/services/sns/resource_providers/aws_sns_topic_plugin.py +1 -3
- localstack/services/sns/resource_providers/aws_sns_topicpolicy.py +4 -4
- localstack/services/sns/resource_providers/aws_sns_topicpolicy_plugin.py +1 -3
- localstack/services/sqs/models.py +21 -22
- localstack/services/sqs/provider.py +19 -18
- localstack/services/sqs/query_api.py +2 -3
- localstack/services/sqs/resource_providers/aws_sqs_queue.py +21 -21
- localstack/services/sqs/resource_providers/aws_sqs_queue_plugin.py +1 -3
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy.py +4 -4
- localstack/services/sqs/resource_providers/aws_sqs_queuepolicy_plugin.py +1 -3
- localstack/services/sqs/utils.py +3 -3
- localstack/services/ssm/provider.py +2 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow.py +15 -15
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget.py +10 -10
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask.py +48 -48
- localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_parameter.py +10 -10
- localstack/services/ssm/resource_providers/aws_ssm_parameter_plugin.py +1 -3
- localstack/services/ssm/resource_providers/aws_ssm_patchbaseline.py +29 -29
- localstack/services/ssm/resource_providers/aws_ssm_patchbaseline_plugin.py +1 -3
- localstack/services/stepfunctions/asl/antlt4utils/antlr4utils.py +3 -4
- localstack/services/stepfunctions/asl/component/common/catch/catcher_decl.py +9 -9
- localstack/services/stepfunctions/asl/component/common/error_name/custom_error_name.py +2 -2
- localstack/services/stepfunctions/asl/component/common/error_name/error_name.py +4 -4
- localstack/services/stepfunctions/asl/component/common/error_name/failure_event.py +8 -8
- localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_binding.py +2 -2
- localstack/services/stepfunctions/asl/component/common/path/input_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/path/output_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
- localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
- localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
- localstack/services/stepfunctions/asl/component/common/string/string_expression.py +2 -2
- localstack/services/stepfunctions/asl/component/common/timeouts/timeout.py +3 -3
- localstack/services/stepfunctions/asl/component/eval_component.py +2 -3
- localstack/services/stepfunctions/asl/component/intrinsic/argument/argument.py +3 -3
- localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +2 -2
- localstack/services/stepfunctions/asl/component/program/program.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state.py +10 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/choice_rule.py +11 -11
- localstack/services/stepfunctions/asl/component/state/state_choice/comparison/operator/implementations/is_operator.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +1 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +6 -6
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/reader_config/reader_config_decl.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_eval_s3.py +2 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/distributed_iteration_component.py +8 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/inline_iteration_component.py +7 -7
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/distributed_item_processor_worker.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/inline_item_processor_worker.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/map_run_record.py +10 -10
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_component.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_declaration.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_worker.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/distributed_iterator_worker.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator.py +1 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator_worker.py +5 -5
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/job.py +9 -9
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/result_writer/resource_eval/resource_eval_s3.py +2 -1
- localstack/services/stepfunctions/asl/component/state/state_execution/state_map/state_map.py +10 -11
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branch_worker.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branches_decl.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +1 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +6 -6
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/resource.py +3 -3
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py +10 -10
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_api_gateway.py +15 -15
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +5 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_callback.py +18 -17
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_dynamodb.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_ecs.py +5 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_events.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_glue.py +7 -6
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_lambda.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sfn.py +9 -8
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sns.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sqs.py +4 -4
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task_lambda.py +2 -2
- localstack/services/stepfunctions/asl/component/state/state_fail/state_fail.py +2 -4
- localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +3 -5
- localstack/services/stepfunctions/asl/component/state/state_wait/wait_function/timestamp.py +2 -2
- localstack/services/stepfunctions/asl/eval/callback/callback.py +18 -18
- localstack/services/stepfunctions/asl/eval/environment.py +15 -17
- localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
- localstack/services/stepfunctions/asl/eval/event/event_manager.py +9 -9
- localstack/services/stepfunctions/asl/eval/event/logging.py +3 -3
- localstack/services/stepfunctions/asl/eval/program_state.py +8 -8
- localstack/services/stepfunctions/asl/eval/states.py +11 -11
- localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
- localstack/services/stepfunctions/asl/eval/variable_store.py +3 -3
- localstack/services/stepfunctions/asl/jsonata/jsonata.py +5 -4
- localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +1 -2
- localstack/services/stepfunctions/asl/parse/preprocessor.py +30 -30
- localstack/services/stepfunctions/asl/parse/typed_props.py +2 -2
- localstack/services/stepfunctions/asl/utils/encoding.py +2 -2
- localstack/services/stepfunctions/asl/utils/json_path.py +2 -2
- localstack/services/stepfunctions/backend/activity.py +4 -4
- localstack/services/stepfunctions/backend/alias.py +6 -6
- localstack/services/stepfunctions/backend/execution.py +25 -27
- localstack/services/stepfunctions/backend/execution_worker.py +7 -7
- localstack/services/stepfunctions/backend/state_machine.py +26 -26
- localstack/services/stepfunctions/backend/test_state/execution.py +3 -4
- localstack/services/stepfunctions/backend/test_state/execution_worker.py +1 -3
- localstack/services/stepfunctions/mocking/mock_config.py +5 -5
- localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
- localstack/services/stepfunctions/provider.py +27 -37
- localstack/services/stepfunctions/quotas.py +2 -3
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity.py +6 -6
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity_plugin.py +1 -3
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine.py +25 -25
- localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine_plugin.py +1 -3
- localstack/services/stepfunctions/stepfunctions_utils.py +1 -2
- localstack/services/stores.py +7 -7
- localstack/services/transcribe/packages.py +1 -3
- localstack/services/transcribe/provider.py +2 -2
- localstack/state/inspect.py +4 -4
- localstack/state/pickle.py +16 -15
- localstack/testing/aws/asf_utils.py +3 -2
- localstack/testing/aws/lambda_utils.py +15 -14
- localstack/testing/aws/util.py +3 -2
- localstack/testing/pytest/cloudformation/fixtures.py +13 -3
- localstack/testing/pytest/container.py +5 -4
- localstack/testing/pytest/filters.py +1 -3
- localstack/testing/pytest/fixtures.py +11 -11
- localstack/testing/pytest/marking.py +6 -6
- localstack/testing/pytest/path_filter.py +1 -1
- localstack/testing/pytest/stepfunctions/utils.py +1 -1
- localstack/testing/pytest/validation_tracking.py +3 -3
- localstack/testing/scenario/provisioning.py +11 -10
- localstack/testing/snapshots/transformer_utility.py +2 -2
- localstack/testing/testselection/matching.py +2 -2
- localstack/testing/testselection/opt_out.py +1 -1
- localstack/testing/testselection/scripts/filter_by_test_selection.py +1 -1
- localstack/testing/testselection/scripts/generate_test_selection.py +1 -1
- localstack/testing/testselection/testselection.py +2 -2
- localstack/utils/analytics/cli.py +2 -3
- localstack/utils/analytics/client.py +5 -5
- localstack/utils/analytics/events.py +2 -2
- localstack/utils/analytics/metrics/registry.py +1 -1
- localstack/utils/analytics/publisher.py +4 -4
- localstack/utils/analytics/service_request_aggregator.py +3 -3
- localstack/utils/aws/arns.py +2 -2
- localstack/utils/aws/aws_responses.py +14 -21
- localstack/utils/aws/aws_stack.py +7 -11
- localstack/utils/aws/dead_letter_queue.py +3 -4
- localstack/utils/aws/message_forwarding.py +9 -11
- localstack/utils/aws/request_context.py +4 -4
- localstack/utils/aws/templating.py +3 -3
- localstack/utils/batch_policy.py +2 -2
- localstack/utils/bootstrap.py +19 -20
- localstack/utils/collections.py +16 -23
- localstack/utils/config_listener.py +2 -2
- localstack/utils/container_networking.py +3 -3
- localstack/utils/container_utils/container_client.py +72 -75
- localstack/utils/container_utils/docker_cmd_client.py +33 -33
- localstack/utils/container_utils/docker_sdk_client.py +35 -35
- localstack/utils/crypto.py +2 -3
- localstack/utils/diagnose.py +11 -11
- localstack/utils/docker_utils.py +4 -4
- localstack/utils/files.py +1 -2
- localstack/utils/functions.py +2 -2
- localstack/utils/http.py +6 -6
- localstack/utils/iputils.py +2 -1
- localstack/utils/json.py +1 -1
- localstack/utils/net.py +10 -9
- localstack/utils/objects.py +10 -10
- localstack/utils/patch.py +5 -5
- localstack/utils/platform.py +2 -2
- localstack/utils/run.py +7 -7
- localstack/utils/scheduler.py +3 -2
- localstack/utils/strings.py +2 -2
- localstack/utils/tagging.py +3 -3
- localstack/utils/testutil.py +9 -9
- localstack/utils/threads.py +2 -2
- localstack/utils/xml.py +1 -1
- localstack/version.py +2 -2
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/METADATA +1 -1
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/RECORD +544 -544
- localstack_core-4.7.1.dev24.dist-info/plux.json +1 -0
- localstack_core-4.7.1.dev22.dist-info/plux.json +0 -1
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack +0 -0
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.7.1.dev22.data → localstack_core-4.7.1.dev24.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/WHEEL +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.7.1.dev22.dist-info → localstack_core-4.7.1.dev24.dist-info}/top_level.txt +0 -0
localstack/config.py
CHANGED
|
@@ -9,7 +9,8 @@ import tempfile
|
|
|
9
9
|
import time
|
|
10
10
|
import warnings
|
|
11
11
|
from collections import defaultdict
|
|
12
|
-
from
|
|
12
|
+
from collections.abc import Mapping
|
|
13
|
+
from typing import Any, Optional, TypeVar, Union
|
|
13
14
|
|
|
14
15
|
from localstack import constants
|
|
15
16
|
from localstack.constants import (
|
|
@@ -233,7 +234,7 @@ def is_env_not_false(env_var_name: str) -> bool:
|
|
|
233
234
|
return os.environ.get(env_var_name, "").lower().strip() not in FALSE_STRINGS
|
|
234
235
|
|
|
235
236
|
|
|
236
|
-
def load_environment(profiles: str = None, env=os.environ) ->
|
|
237
|
+
def load_environment(profiles: str = None, env=os.environ) -> list[str]:
|
|
237
238
|
"""Loads the environment variables from ~/.localstack/{profile}.env, for each profile listed in the profiles.
|
|
238
239
|
:param env: environment to load profile to. Defaults to `os.environ`
|
|
239
240
|
:param profiles: a comma separated list of profiles to load (defaults to "default")
|
|
@@ -337,7 +338,7 @@ def in_docker():
|
|
|
337
338
|
return False
|
|
338
339
|
except Exception:
|
|
339
340
|
pass
|
|
340
|
-
with open("/proc/1/cgroup"
|
|
341
|
+
with open("/proc/1/cgroup") as ifh:
|
|
341
342
|
content = ifh.read()
|
|
342
343
|
if "docker" in content or "buildkit" in content:
|
|
343
344
|
return True
|
|
@@ -348,7 +349,7 @@ def in_docker():
|
|
|
348
349
|
# containerd does not set any specific file or config, but it does use
|
|
349
350
|
# io.containerd.snapshotter.v1.overlayfs as the overlay filesystem for `/`.
|
|
350
351
|
try:
|
|
351
|
-
with open("/proc/mounts"
|
|
352
|
+
with open("/proc/mounts") as infile:
|
|
352
353
|
for line in infile:
|
|
353
354
|
line = line.strip()
|
|
354
355
|
|
|
@@ -603,9 +604,7 @@ class HostAndPort:
|
|
|
603
604
|
|
|
604
605
|
def _get_unprivileged_port_range_start(self) -> int:
|
|
605
606
|
try:
|
|
606
|
-
with open(
|
|
607
|
-
"/proc/sys/net/ipv4/ip_unprivileged_port_start", "rt"
|
|
608
|
-
) as unprivileged_port_start:
|
|
607
|
+
with open("/proc/sys/net/ipv4/ip_unprivileged_port_start") as unprivileged_port_start:
|
|
609
608
|
port = unprivileged_port_start.read()
|
|
610
609
|
return int(port.strip())
|
|
611
610
|
except Exception:
|
|
@@ -637,7 +636,7 @@ class HostAndPort:
|
|
|
637
636
|
return f"HostAndPort(host={self.host}, port={self.port})"
|
|
638
637
|
|
|
639
638
|
|
|
640
|
-
class UniqueHostAndPortList(
|
|
639
|
+
class UniqueHostAndPortList(list[HostAndPort]):
|
|
641
640
|
"""
|
|
642
641
|
Container type that ensures that ports added to the list are unique based
|
|
643
642
|
on these rules:
|
|
@@ -650,7 +649,7 @@ class UniqueHostAndPortList(List[HostAndPort]):
|
|
|
650
649
|
- Identical identical hosts and ports are de-duped
|
|
651
650
|
"""
|
|
652
651
|
|
|
653
|
-
def __init__(self, iterable: Union[
|
|
652
|
+
def __init__(self, iterable: Union[list[HostAndPort], None] = None):
|
|
654
653
|
super().__init__(iterable or [])
|
|
655
654
|
self._ensure_unique()
|
|
656
655
|
|
|
@@ -661,10 +660,10 @@ class UniqueHostAndPortList(List[HostAndPort]):
|
|
|
661
660
|
if len(self) <= 1:
|
|
662
661
|
return
|
|
663
662
|
|
|
664
|
-
unique:
|
|
663
|
+
unique: list[HostAndPort] = list()
|
|
665
664
|
|
|
666
665
|
# Build a dictionary of hosts by port
|
|
667
|
-
hosts_by_port:
|
|
666
|
+
hosts_by_port: dict[int, list[str]] = defaultdict(list)
|
|
668
667
|
for item in self:
|
|
669
668
|
hosts_by_port[item.port].append(item.host)
|
|
670
669
|
|
|
@@ -696,7 +695,7 @@ class UniqueHostAndPortList(List[HostAndPort]):
|
|
|
696
695
|
|
|
697
696
|
def populate_edge_configuration(
|
|
698
697
|
environment: Mapping[str, str],
|
|
699
|
-
) ->
|
|
698
|
+
) -> tuple[HostAndPort, UniqueHostAndPortList]:
|
|
700
699
|
"""Populate the LocalStack edge configuration from environment variables."""
|
|
701
700
|
localstack_host_raw = environment.get("LOCALSTACK_HOST")
|
|
702
701
|
gateway_listen_raw = environment.get("GATEWAY_LISTEN")
|
|
@@ -1448,7 +1447,7 @@ def is_collect_metrics_mode() -> bool:
|
|
|
1448
1447
|
return is_env_true(ENV_INTERNAL_TEST_COLLECT_METRIC)
|
|
1449
1448
|
|
|
1450
1449
|
|
|
1451
|
-
def collect_config_items() ->
|
|
1450
|
+
def collect_config_items() -> list[tuple[str, Any]]:
|
|
1452
1451
|
"""Returns a list of key-value tuples of LocalStack configuration values."""
|
|
1453
1452
|
none = object() # sentinel object
|
|
1454
1453
|
|
|
@@ -1598,7 +1597,7 @@ def get_edge_url(localstack_hostname=None, protocol=None):
|
|
|
1598
1597
|
|
|
1599
1598
|
|
|
1600
1599
|
class ServiceProviderConfig(Mapping[str, str]):
|
|
1601
|
-
_provider_config:
|
|
1600
|
+
_provider_config: dict[str, str]
|
|
1602
1601
|
default_value: str
|
|
1603
1602
|
override_prefix: str = "PROVIDER_OVERRIDE_"
|
|
1604
1603
|
|
|
@@ -1623,7 +1622,7 @@ class ServiceProviderConfig(Mapping[str, str]):
|
|
|
1623
1622
|
def set_provider(self, service: str, provider: str):
|
|
1624
1623
|
self._provider_config[service] = provider
|
|
1625
1624
|
|
|
1626
|
-
def bulk_set_provider_if_not_exists(self, services:
|
|
1625
|
+
def bulk_set_provider_if_not_exists(self, services: list[str], provider: str):
|
|
1627
1626
|
for service in services:
|
|
1628
1627
|
self.set_provider_if_not_exists(service, provider)
|
|
1629
1628
|
|
localstack/deprecations.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# A simple module to track deprecations over time / versions, and some simple functions guiding the affected users.
|
|
2
2
|
import logging
|
|
3
3
|
import os
|
|
4
|
+
from collections.abc import Callable
|
|
4
5
|
from dataclasses import dataclass
|
|
5
|
-
from typing import Callable, List, Optional
|
|
6
6
|
|
|
7
7
|
from localstack.utils.analytics import log
|
|
8
8
|
|
|
@@ -329,8 +329,8 @@ DEPRECATIONS = [
|
|
|
329
329
|
|
|
330
330
|
|
|
331
331
|
def collect_affected_deprecations(
|
|
332
|
-
deprecations:
|
|
333
|
-
) ->
|
|
332
|
+
deprecations: list[EnvVarDeprecation] | None = None,
|
|
333
|
+
) -> list[EnvVarDeprecation]:
|
|
334
334
|
"""
|
|
335
335
|
Collects all deprecations which are used in the OS environ.
|
|
336
336
|
:param deprecations: List of deprecations to check. Uses DEPRECATIONS list by default.
|
|
@@ -341,7 +341,7 @@ def collect_affected_deprecations(
|
|
|
341
341
|
return [deprecation for deprecation in deprecations if deprecation.is_affected]
|
|
342
342
|
|
|
343
343
|
|
|
344
|
-
def log_env_warning(deprecations:
|
|
344
|
+
def log_env_warning(deprecations: list[EnvVarDeprecation]) -> None:
|
|
345
345
|
"""
|
|
346
346
|
Logs warnings for the given deprecations.
|
|
347
347
|
:param deprecations: list of affected deprecations to show a warning for
|
|
@@ -368,7 +368,7 @@ def log_env_warning(deprecations: List[EnvVarDeprecation]) -> None:
|
|
|
368
368
|
log.event(event="deprecated_env_usage", payload={"deprecated_env_vars": env_vars})
|
|
369
369
|
|
|
370
370
|
|
|
371
|
-
def log_deprecation_warnings(deprecations:
|
|
371
|
+
def log_deprecation_warnings(deprecations: list[EnvVarDeprecation] | None = None) -> None:
|
|
372
372
|
affected_deprecations = collect_affected_deprecations(deprecations)
|
|
373
373
|
log_env_warning(affected_deprecations)
|
|
374
374
|
|
localstack/dev/run/__main__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import dataclasses
|
|
2
2
|
import os
|
|
3
|
-
from
|
|
3
|
+
from collections.abc import Iterable
|
|
4
4
|
|
|
5
5
|
import click
|
|
6
6
|
from rich.rule import Rule
|
|
@@ -133,9 +133,9 @@ def run(
|
|
|
133
133
|
mount_dependencies: bool = False,
|
|
134
134
|
mount_entrypoints: bool = False,
|
|
135
135
|
mount_docker_socket: bool = True,
|
|
136
|
-
env:
|
|
137
|
-
volume:
|
|
138
|
-
publish:
|
|
136
|
+
env: tuple = (),
|
|
137
|
+
volume: tuple = (),
|
|
138
|
+
publish: tuple = (),
|
|
139
139
|
entrypoint: str = None,
|
|
140
140
|
network: str = None,
|
|
141
141
|
local_packages: list[str] | None = None,
|
localstack/dev/run/paths.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""Utilities to resolve important paths on the host and in the container."""
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
|
+
from collections.abc import Callable
|
|
4
5
|
from pathlib import Path
|
|
5
|
-
from typing import Callable, Optional, Union
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class HostPaths:
|
|
@@ -20,9 +20,9 @@ class HostPaths:
|
|
|
20
20
|
|
|
21
21
|
def __init__(
|
|
22
22
|
self,
|
|
23
|
-
workspace_dir:
|
|
24
|
-
volume_dir:
|
|
25
|
-
venv_dir:
|
|
23
|
+
workspace_dir: os.PathLike | str = None,
|
|
24
|
+
volume_dir: os.PathLike | str = None,
|
|
25
|
+
venv_dir: os.PathLike | str = None,
|
|
26
26
|
):
|
|
27
27
|
self.workspace_dir = Path(workspace_dir or os.path.abspath(os.path.join(os.getcwd(), "..")))
|
|
28
28
|
self.localstack_project_dir = self.workspace_dir / "localstack"
|
|
@@ -72,7 +72,7 @@ class ContainerPaths:
|
|
|
72
72
|
docker_entrypoint: str = "/usr/local/bin/docker-entrypoint.sh"
|
|
73
73
|
localstack_supervisor: str = "/usr/local/bin/localstack-supervisor"
|
|
74
74
|
localstack_source_dir: str
|
|
75
|
-
localstack_pro_source_dir:
|
|
75
|
+
localstack_pro_source_dir: str | None
|
|
76
76
|
|
|
77
77
|
def dependency_source(self, name: str) -> str:
|
|
78
78
|
"""Returns path of the given source dependency in the site-packages directory."""
|
localstack/dns/models.py
CHANGED
localstack/dns/server.py
CHANGED
|
@@ -5,12 +5,13 @@ import os
|
|
|
5
5
|
import re
|
|
6
6
|
import textwrap
|
|
7
7
|
import threading
|
|
8
|
+
from collections.abc import Iterable
|
|
8
9
|
from datetime import datetime
|
|
9
10
|
from functools import cache
|
|
10
11
|
from ipaddress import IPv4Address, IPv4Interface
|
|
11
12
|
from pathlib import Path
|
|
12
13
|
from socket import AddressFamily
|
|
13
|
-
from typing import
|
|
14
|
+
from typing import Literal
|
|
14
15
|
|
|
15
16
|
import psutil
|
|
16
17
|
from cachetools import TTLCache, cached
|
|
@@ -90,7 +91,7 @@ THREAD_LOCAL = threading.local()
|
|
|
90
91
|
|
|
91
92
|
# Type of the value given by DNSHandler.client_address
|
|
92
93
|
# in the form (ip, port) e.g. ("127.0.0.1", 58291)
|
|
93
|
-
ClientAddress =
|
|
94
|
+
ClientAddress = tuple[str, int]
|
|
94
95
|
|
|
95
96
|
psutil_cache = TTLCache(maxsize=100, ttl=10)
|
|
96
97
|
|
localstack/http/dispatcher.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from json import JSONEncoder
|
|
2
|
-
from typing import Type
|
|
3
2
|
|
|
4
3
|
from rolo.routing.handler import Handler, ResultValue
|
|
5
4
|
from rolo.routing.handler import handler_dispatcher as _handler_dispatcher
|
|
@@ -14,7 +13,7 @@ __all__ = [
|
|
|
14
13
|
]
|
|
15
14
|
|
|
16
15
|
|
|
17
|
-
def handler_dispatcher(json_encoder:
|
|
16
|
+
def handler_dispatcher(json_encoder: type[JSONEncoder] = None) -> Dispatcher[Handler]:
|
|
18
17
|
"""
|
|
19
18
|
Replacement for ``rolo.dispatcher.handler_dispatcher`` that uses by default LocalStack's CustomEncoder for
|
|
20
19
|
serializing JSON documents.
|
localstack/http/response.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from json import JSONEncoder
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
from rolo import Response as RoloResponse
|
|
5
5
|
|
|
@@ -11,7 +11,7 @@ class Response(RoloResponse):
|
|
|
11
11
|
An HTTP Response object, which simply extends werkzeug's Response object with a few convenience methods.
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
|
-
def set_json(self, doc: Any, cls:
|
|
14
|
+
def set_json(self, doc: Any, cls: type[JSONEncoder] = CustomEncoder):
|
|
15
15
|
"""
|
|
16
16
|
Serializes the given dictionary using localstack's ``CustomEncoder`` into a json response, and sets the
|
|
17
17
|
mimetype automatically to ``application/json``.
|
localstack/http/router.py
CHANGED
localstack/http/trace.py
CHANGED
|
@@ -2,7 +2,8 @@ import dataclasses
|
|
|
2
2
|
import inspect
|
|
3
3
|
import logging
|
|
4
4
|
import time
|
|
5
|
-
from
|
|
5
|
+
from collections.abc import Callable
|
|
6
|
+
from typing import Any
|
|
6
7
|
|
|
7
8
|
from rolo import Response
|
|
8
9
|
from rolo.gateway import ExceptionHandler, Handler, HandlerChain, RequestContext
|
localstack/logging/format.py
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import logging
|
|
4
4
|
import re
|
|
5
5
|
from functools import lru_cache
|
|
6
|
-
from typing import Any
|
|
6
|
+
from typing import Any
|
|
7
7
|
|
|
8
8
|
from localstack.utils.numbers import format_bytes
|
|
9
9
|
from localstack.utils.strings import to_bytes
|
|
@@ -173,8 +173,8 @@ class AwsTraceLoggingFormatter(TraceLoggingFormatter):
|
|
|
173
173
|
def __init__(self):
|
|
174
174
|
super().__init__()
|
|
175
175
|
|
|
176
|
-
def _copy_service_dict(self, service_dict:
|
|
177
|
-
if not isinstance(service_dict,
|
|
176
|
+
def _copy_service_dict(self, service_dict: dict) -> dict:
|
|
177
|
+
if not isinstance(service_dict, dict):
|
|
178
178
|
return service_dict
|
|
179
179
|
result = {}
|
|
180
180
|
for key, value in service_dict.items():
|
localstack/packages/api.py
CHANGED
|
@@ -6,7 +6,7 @@ from collections import defaultdict
|
|
|
6
6
|
from enum import Enum
|
|
7
7
|
from inspect import getmodule
|
|
8
8
|
from threading import RLock
|
|
9
|
-
from typing import Any, Callable, Generic,
|
|
9
|
+
from typing import Any, Callable, Generic, Optional, ParamSpec, TypeVar
|
|
10
10
|
|
|
11
11
|
from plux import Plugin, PluginManager, PluginSpec # type: ignore
|
|
12
12
|
|
|
@@ -219,7 +219,7 @@ class Package(abc.ABC, Generic[T]):
|
|
|
219
219
|
"""
|
|
220
220
|
self.get_installer(version).install(target)
|
|
221
221
|
|
|
222
|
-
@functools.lru_cache
|
|
222
|
+
@functools.lru_cache
|
|
223
223
|
def get_installer(self, version: str | None = None) -> T:
|
|
224
224
|
"""
|
|
225
225
|
Returns the installer instance for a specific version of the package.
|
|
@@ -237,7 +237,7 @@ class Package(abc.ABC, Generic[T]):
|
|
|
237
237
|
raise NoSuchVersionException(package=self.name, version=version)
|
|
238
238
|
return self._get_installer(version)
|
|
239
239
|
|
|
240
|
-
def get_versions(self) ->
|
|
240
|
+
def get_versions(self) -> list[str]:
|
|
241
241
|
"""
|
|
242
242
|
:return: List of all versions available for this package.
|
|
243
243
|
"""
|
|
@@ -262,7 +262,7 @@ class MultiPackageInstaller(PackageInstaller):
|
|
|
262
262
|
PackageInstaller implementation which composes of multiple package installers.
|
|
263
263
|
"""
|
|
264
264
|
|
|
265
|
-
def __init__(self, name: str, version: str, package_installer:
|
|
265
|
+
def __init__(self, name: str, version: str, package_installer: list[PackageInstaller]):
|
|
266
266
|
"""
|
|
267
267
|
:param name: of the (multi-)package installer
|
|
268
268
|
:param version: of this (multi-)package installer
|
|
@@ -317,7 +317,7 @@ class PackagesPlugin(Plugin): # type: ignore[misc]
|
|
|
317
317
|
self,
|
|
318
318
|
name: str,
|
|
319
319
|
scope: str,
|
|
320
|
-
get_package: Callable[[], Package[PackageInstaller] |
|
|
320
|
+
get_package: Callable[[], Package[PackageInstaller] | list[Package[PackageInstaller]]],
|
|
321
321
|
should_load: Callable[[], bool] | None = None,
|
|
322
322
|
) -> None:
|
|
323
323
|
super().__init__()
|
localstack/packages/core.py
CHANGED
|
@@ -4,7 +4,7 @@ import re
|
|
|
4
4
|
from abc import ABC
|
|
5
5
|
from functools import lru_cache
|
|
6
6
|
from sys import version_info
|
|
7
|
-
from typing import Any, Optional
|
|
7
|
+
from typing import Any, Optional
|
|
8
8
|
|
|
9
9
|
import requests
|
|
10
10
|
|
|
@@ -190,7 +190,7 @@ class GitHubReleaseInstaller(PermissionDownloadInstaller):
|
|
|
190
190
|
f"https://api.github.com/repos/{github_slug}/releases/tags/{self.version}"
|
|
191
191
|
)
|
|
192
192
|
|
|
193
|
-
@lru_cache
|
|
193
|
+
@lru_cache
|
|
194
194
|
def _get_download_url(self) -> str:
|
|
195
195
|
asset_name = self._get_github_asset_name()
|
|
196
196
|
# try to use a token when calling the GH API for increased API rate limits
|
|
@@ -404,7 +404,7 @@ class MavenPackageInstaller(MavenDownloadInstaller):
|
|
|
404
404
|
super()._install(target)
|
|
405
405
|
|
|
406
406
|
|
|
407
|
-
def parse_maven_package_url(package_url: str) ->
|
|
407
|
+
def parse_maven_package_url(package_url: str) -> tuple[str, str, str]:
|
|
408
408
|
"""Example: parse_maven_package_url("pkg:maven/software.amazon.event.ruler/event-ruler@1.7.3")
|
|
409
409
|
-> software.amazon.event.ruler, event-ruler, 1.7.3
|
|
410
410
|
"""
|
localstack/packages/debugpy.py
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
3
1
|
from localstack.packages import InstallTarget, Package, PackageInstaller
|
|
4
2
|
from localstack.utils.run import run
|
|
5
3
|
|
|
@@ -8,7 +6,7 @@ class DebugPyPackage(Package["DebugPyPackageInstaller"]):
|
|
|
8
6
|
def __init__(self) -> None:
|
|
9
7
|
super().__init__("DebugPy", "latest")
|
|
10
8
|
|
|
11
|
-
def get_versions(self) ->
|
|
9
|
+
def get_versions(self) -> list[str]:
|
|
12
10
|
return ["latest"]
|
|
13
11
|
|
|
14
12
|
def _get_installer(self, version: str) -> "DebugPyPackageInstaller":
|
localstack/packages/ffmpeg.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import os
|
|
2
|
-
from typing import List
|
|
3
2
|
|
|
4
3
|
from localstack.packages import Package
|
|
5
4
|
from localstack.packages.core import ArchiveDownloadAndExtractInstaller
|
|
@@ -21,7 +20,7 @@ class FfmpegPackage(Package["FfmpegPackageInstaller"]):
|
|
|
21
20
|
def _get_installer(self, version: str) -> "FfmpegPackageInstaller":
|
|
22
21
|
return FfmpegPackageInstaller(version)
|
|
23
22
|
|
|
24
|
-
def get_versions(self) ->
|
|
23
|
+
def get_versions(self) -> list[str]:
|
|
25
24
|
return ["7.1"]
|
|
26
25
|
|
|
27
26
|
|
localstack/packages/java.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import os
|
|
3
|
-
from typing import List
|
|
4
3
|
|
|
5
4
|
import requests
|
|
6
5
|
|
|
@@ -198,7 +197,7 @@ class JavaPackage(Package[JavaPackageInstaller]):
|
|
|
198
197
|
def __init__(self, default_version: str = DEFAULT_JAVA_VERSION):
|
|
199
198
|
super().__init__(name="Java", default_version=default_version)
|
|
200
199
|
|
|
201
|
-
def get_versions(self) ->
|
|
200
|
+
def get_versions(self) -> list[str]:
|
|
202
201
|
return list(JAVA_VERSIONS.keys())
|
|
203
202
|
|
|
204
203
|
def _get_installer(self, version: str) -> JavaPackageInstaller:
|
localstack/packages/terraform.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import platform
|
|
3
|
-
from typing import List
|
|
4
3
|
|
|
5
4
|
from localstack.packages import InstallTarget, Package
|
|
6
5
|
from localstack.packages.core import ArchiveDownloadAndExtractInstaller
|
|
@@ -20,7 +19,7 @@ class TerraformPackage(Package["TerraformPackageInstaller"]):
|
|
|
20
19
|
def __init__(self) -> None:
|
|
21
20
|
super().__init__("Terraform", TERRAFORM_VERSION)
|
|
22
21
|
|
|
23
|
-
def get_versions(self) ->
|
|
22
|
+
def get_versions(self) -> list[str]:
|
|
24
23
|
return [TERRAFORM_VERSION]
|
|
25
24
|
|
|
26
25
|
def _get_installer(self, version: str) -> "TerraformPackageInstaller":
|
localstack/runtime/init.py
CHANGED
|
@@ -7,7 +7,6 @@ import subprocess
|
|
|
7
7
|
import time
|
|
8
8
|
from enum import Enum
|
|
9
9
|
from functools import cached_property
|
|
10
|
-
from typing import Dict, List, Optional
|
|
11
10
|
|
|
12
11
|
from plux import Plugin, PluginManager
|
|
13
12
|
|
|
@@ -109,7 +108,7 @@ class PythonScriptRunner(ScriptRunner):
|
|
|
109
108
|
|
|
110
109
|
|
|
111
110
|
class InitScriptManager:
|
|
112
|
-
_stage_directories:
|
|
111
|
+
_stage_directories: dict[Stage, str] = {
|
|
113
112
|
Stage.BOOT: "boot.d",
|
|
114
113
|
Stage.START: "start.d",
|
|
115
114
|
Stage.READY: "ready.d",
|
|
@@ -117,7 +116,7 @@ class InitScriptManager:
|
|
|
117
116
|
}
|
|
118
117
|
|
|
119
118
|
script_root: str
|
|
120
|
-
stage_completed:
|
|
119
|
+
stage_completed: dict[Stage, bool]
|
|
121
120
|
|
|
122
121
|
def __init__(self, script_root: str):
|
|
123
122
|
self.script_root = script_root
|
|
@@ -125,10 +124,10 @@ class InitScriptManager:
|
|
|
125
124
|
self.runner_manager: PluginManager[ScriptRunner] = PluginManager(ScriptRunner.namespace)
|
|
126
125
|
|
|
127
126
|
@cached_property
|
|
128
|
-
def scripts(self) ->
|
|
127
|
+
def scripts(self) -> dict[Stage, list[Script]]:
|
|
129
128
|
return self._find_scripts()
|
|
130
129
|
|
|
131
|
-
def get_script_runner(self, script_file: str) ->
|
|
130
|
+
def get_script_runner(self, script_file: str) -> ScriptRunner | None:
|
|
132
131
|
runners = self.runner_manager.load_all()
|
|
133
132
|
for runner in runners:
|
|
134
133
|
if runner.should_run(script_file):
|
|
@@ -138,7 +137,7 @@ class InitScriptManager:
|
|
|
138
137
|
def has_script_runner(self, script_file: str) -> bool:
|
|
139
138
|
return self.get_script_runner(script_file) is not None
|
|
140
139
|
|
|
141
|
-
def run_stage(self, stage: Stage) ->
|
|
140
|
+
def run_stage(self, stage: Stage) -> list[Script]:
|
|
142
141
|
"""
|
|
143
142
|
Runs all scripts in the given stage.
|
|
144
143
|
|
|
@@ -188,7 +187,7 @@ class InitScriptManager:
|
|
|
188
187
|
|
|
189
188
|
return scripts
|
|
190
189
|
|
|
191
|
-
def _find_scripts(self) ->
|
|
190
|
+
def _find_scripts(self) -> dict[Stage, list[Script]]:
|
|
192
191
|
scripts = {}
|
|
193
192
|
|
|
194
193
|
if self.script_root is None:
|
localstack/runtime/shutdown.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import abc
|
|
2
2
|
import json
|
|
3
|
-
from typing import Type
|
|
4
3
|
|
|
5
4
|
from apispec import APISpec
|
|
6
5
|
|
|
@@ -320,7 +319,7 @@ class _OpenApiOAS30Exporter(_BaseOpenApiExporter):
|
|
|
320
319
|
|
|
321
320
|
|
|
322
321
|
class OpenApiExporter:
|
|
323
|
-
exporters: dict[str,
|
|
322
|
+
exporters: dict[str, type[_BaseOpenApiExporter]]
|
|
324
323
|
|
|
325
324
|
def __init__(self):
|
|
326
325
|
self.exporters = {"swagger": _OpenApiSwaggerExporter, "oas30": _OpenApiOAS30Exporter}
|
|
@@ -3,7 +3,7 @@ import copy
|
|
|
3
3
|
import hashlib
|
|
4
4
|
import json
|
|
5
5
|
import logging
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import TypedDict
|
|
7
7
|
from urllib import parse as urlparse
|
|
8
8
|
|
|
9
9
|
from jsonpatch import apply_patch
|
|
@@ -93,7 +93,7 @@ class OpenAPIExt:
|
|
|
93
93
|
|
|
94
94
|
class AuthorizerConfig(TypedDict):
|
|
95
95
|
authorizer: Authorizer
|
|
96
|
-
authorization_scopes:
|
|
96
|
+
authorization_scopes: list[str] | None
|
|
97
97
|
|
|
98
98
|
|
|
99
99
|
# TODO: make the CRUD operations in this file generic for the different model types (authorizes, validators, ...)
|
|
@@ -198,11 +198,11 @@ class OpenAPISpecificationResolver:
|
|
|
198
198
|
|
|
199
199
|
return cur
|
|
200
200
|
|
|
201
|
-
def _namespaced_resolution(self, namespace: str, data:
|
|
201
|
+
def _namespaced_resolution(self, namespace: str, data: dict | list) -> dict | list:
|
|
202
202
|
with self._pathctx(namespace):
|
|
203
203
|
return self._resolve_references(data)
|
|
204
204
|
|
|
205
|
-
def _resolve_references(self, data) ->
|
|
205
|
+
def _resolve_references(self, data) -> dict | list:
|
|
206
206
|
if self._is_ref(data):
|
|
207
207
|
return self._resolve_refpath(data["$ref"])
|
|
208
208
|
|
|
@@ -578,7 +578,7 @@ def import_api_from_openapi_spec(
|
|
|
578
578
|
|
|
579
579
|
authorizers[security_scheme_name] = authorizer
|
|
580
580
|
|
|
581
|
-
def get_authorizer(path_payload: dict) ->
|
|
581
|
+
def get_authorizer(path_payload: dict) -> AuthorizerConfig | None:
|
|
582
582
|
if not (security_schemes := path_payload.get("security")):
|
|
583
583
|
return None
|
|
584
584
|
|
|
@@ -605,7 +605,7 @@ def import_api_from_openapi_spec(
|
|
|
605
605
|
rel_path = abs_path.removeprefix(base_path)
|
|
606
606
|
return add_path_methods(rel_path, parts, parent_id=parent_id)
|
|
607
607
|
|
|
608
|
-
def add_path_methods(rel_path: str, parts:
|
|
608
|
+
def add_path_methods(rel_path: str, parts: list[str], parent_id=""):
|
|
609
609
|
rel_path = rel_path or "/"
|
|
610
610
|
child_id = ApigwResourceIdentifier(account_id, region_name, parent_id, rel_path).generate()
|
|
611
611
|
|