localstack-core 4.11.2.dev14__py3-none-any.whl → 4.12.1.dev18__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.
Files changed (77) hide show
  1. localstack/aws/api/ec2/__init__.py +13 -0
  2. localstack/aws/api/iam/__init__.py +1 -0
  3. localstack/aws/api/lambda_/__init__.py +616 -0
  4. localstack/aws/api/logs/__init__.py +188 -0
  5. localstack/aws/api/opensearch/__init__.py +11 -0
  6. localstack/aws/api/route53/__init__.py +3 -0
  7. localstack/aws/api/s3/__init__.py +2 -0
  8. localstack/aws/api/s3control/__init__.py +19 -0
  9. localstack/aws/api/secretsmanager/__init__.py +9 -0
  10. localstack/aws/connect.py +35 -15
  11. localstack/config.py +8 -0
  12. localstack/constants.py +3 -0
  13. localstack/dev/kubernetes/__main__.py +39 -14
  14. localstack/runtime/analytics.py +11 -0
  15. localstack/services/acm/provider.py +13 -1
  16. localstack/services/cloudformation/engine/v2/change_set_model.py +9 -0
  17. localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +3 -1
  18. localstack/services/cloudformation/engine/v2/change_set_resource_support_checker.py +114 -0
  19. localstack/services/cloudformation/provider.py +26 -1
  20. localstack/services/cloudformation/provider_utils.py +20 -0
  21. localstack/services/cloudformation/resource_provider.py +5 -4
  22. localstack/services/cloudformation/scaffolding/__main__.py +94 -22
  23. localstack/services/cloudformation/v2/provider.py +41 -0
  24. localstack/services/kinesis/packages.py +1 -1
  25. localstack/services/kms/models.py +6 -2
  26. localstack/services/lambda_/analytics.py +11 -2
  27. localstack/services/lambda_/invocation/event_manager.py +15 -11
  28. localstack/services/lambda_/invocation/lambda_models.py +4 -0
  29. localstack/services/lambda_/invocation/lambda_service.py +11 -0
  30. localstack/services/lambda_/provider.py +70 -13
  31. localstack/services/opensearch/packages.py +34 -20
  32. localstack/services/route53/provider.py +7 -0
  33. localstack/services/route53resolver/provider.py +5 -0
  34. localstack/services/s3/constants.py +5 -0
  35. localstack/services/s3/exceptions.py +9 -0
  36. localstack/services/s3/models.py +9 -1
  37. localstack/services/s3/provider.py +25 -30
  38. localstack/services/s3/utils.py +46 -1
  39. localstack/services/s3control/provider.py +6 -0
  40. localstack/services/scheduler/provider.py +4 -2
  41. localstack/services/secretsmanager/provider.py +4 -0
  42. localstack/services/ses/provider.py +4 -0
  43. localstack/services/sns/constants.py +13 -0
  44. localstack/services/sns/provider.py +5 -0
  45. localstack/services/sns/v2/models.py +3 -0
  46. localstack/services/sns/v2/provider.py +100 -0
  47. localstack/services/sqs/constants.py +6 -0
  48. localstack/services/sqs/provider.py +9 -1
  49. localstack/services/sqs/resource_providers/aws_sqs_queue.py +61 -46
  50. localstack/services/ssm/provider.py +6 -0
  51. localstack/services/stepfunctions/asl/static_analyser/test_state/test_state_analyser.py +193 -107
  52. localstack/services/stepfunctions/backend/execution.py +4 -5
  53. localstack/services/stepfunctions/provider.py +21 -14
  54. localstack/services/sts/provider.py +7 -0
  55. localstack/services/support/provider.py +5 -1
  56. localstack/services/swf/provider.py +5 -1
  57. localstack/services/transcribe/provider.py +7 -0
  58. localstack/testing/aws/lambda_utils.py +1 -1
  59. localstack/testing/aws/util.py +2 -1
  60. localstack/testing/config.py +1 -0
  61. localstack/utils/aws/client_types.py +2 -4
  62. localstack/utils/bootstrap.py +2 -2
  63. localstack/utils/catalog/catalog.py +3 -2
  64. localstack/utils/container_utils/container_client.py +22 -13
  65. localstack/utils/container_utils/docker_cmd_client.py +6 -6
  66. localstack/version.py +2 -2
  67. {localstack_core-4.11.2.dev14.dist-info → localstack_core-4.12.1.dev18.dist-info}/METADATA +6 -6
  68. {localstack_core-4.11.2.dev14.dist-info → localstack_core-4.12.1.dev18.dist-info}/RECORD +76 -75
  69. localstack_core-4.12.1.dev18.dist-info/plux.json +1 -0
  70. localstack_core-4.11.2.dev14.dist-info/plux.json +0 -1
  71. {localstack_core-4.11.2.dev14.data → localstack_core-4.12.1.dev18.data}/scripts/localstack +0 -0
  72. {localstack_core-4.11.2.dev14.data → localstack_core-4.12.1.dev18.data}/scripts/localstack-supervisor +0 -0
  73. {localstack_core-4.11.2.dev14.data → localstack_core-4.12.1.dev18.data}/scripts/localstack.bat +0 -0
  74. {localstack_core-4.11.2.dev14.dist-info → localstack_core-4.12.1.dev18.dist-info}/WHEEL +0 -0
  75. {localstack_core-4.11.2.dev14.dist-info → localstack_core-4.12.1.dev18.dist-info}/entry_points.txt +0 -0
  76. {localstack_core-4.11.2.dev14.dist-info → localstack_core-4.12.1.dev18.dist-info}/licenses/LICENSE.txt +0 -0
  77. {localstack_core-4.11.2.dev14.dist-info → localstack_core-4.12.1.dev18.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,11 @@
1
1
  from abc import ABC
2
2
 
3
3
  from localstack.aws.api.support import SupportApi
4
+ from localstack.state import StateVisitor
4
5
 
5
6
 
6
7
  class SupportProvider(SupportApi, ABC):
7
- pass
8
+ def accept_state_visitor(self, visitor: StateVisitor):
9
+ from moto.support.models import support_backends
10
+
11
+ visitor.visit(support_backends)
@@ -1,7 +1,11 @@
1
1
  from abc import ABC
2
2
 
3
3
  from localstack.aws.api.swf import SwfApi
4
+ from localstack.state import StateVisitor
4
5
 
5
6
 
6
7
  class SWFProvider(SwfApi, ABC):
7
- pass
8
+ def accept_state_visitor(self, visitor: StateVisitor):
9
+ from moto.swf.models import swf_backends
10
+
11
+ visitor.visit(swf_backends)
@@ -38,6 +38,7 @@ from localstack.services.s3.utils import (
38
38
  )
39
39
  from localstack.services.transcribe.models import TranscribeStore, transcribe_stores
40
40
  from localstack.services.transcribe.packages import vosk_package
41
+ from localstack.state import StateVisitor
41
42
  from localstack.utils.files import new_tmp_file
42
43
  from localstack.utils.http import download
43
44
  from localstack.utils.run import run
@@ -101,6 +102,12 @@ _DL_LOCK = threading.Lock()
101
102
 
102
103
 
103
104
  class TranscribeProvider(TranscribeApi):
105
+ def accept_state_visitor(self, visitor: StateVisitor) -> None:
106
+ from moto.transcribe.models import transcribe_backends
107
+
108
+ visitor.visit(transcribe_backends)
109
+ visitor.visit(transcribe_stores)
110
+
104
111
  def get_transcription_job(
105
112
  self, context: RequestContext, transcription_job_name: TranscriptionJobName, **kwargs: Any
106
113
  ) -> GetTranscriptionJobResponse:
@@ -261,7 +261,7 @@ def concurrency_update_done(client, function_name, qualifier):
261
261
 
262
262
  def get_invoke_init_type(
263
263
  client, function_name, qualifier
264
- ) -> Literal["on-demand", "provisioned-concurrency"]:
264
+ ) -> Literal["on-demand", "provisioned-concurrency", "lambda-managed-instances"]:
265
265
  """check the environment in the lambda for AWS_LAMBDA_INITIALIZATION_TYPE indicating ondemand/provisioned"""
266
266
  invoke_result = client.invoke(FunctionName=function_name, Qualifier=qualifier)
267
267
  return json.load(invoke_result["Payload"])
@@ -29,6 +29,7 @@ from localstack.testing.config import (
29
29
  SECONDARY_TEST_AWS_SECRET_ACCESS_KEY,
30
30
  SECONDARY_TEST_AWS_SESSION_TOKEN,
31
31
  TEST_AWS_ACCESS_KEY_ID,
32
+ TEST_AWS_ENDPOINT_URL,
32
33
  TEST_AWS_REGION_NAME,
33
34
  TEST_AWS_SECRET_ACCESS_KEY,
34
35
  )
@@ -240,7 +241,7 @@ def base_aws_client_factory(session: boto3.Session) -> ClientFactory:
240
241
 
241
242
  # Prevent this fixture from using the region configured in system config
242
243
  config = config.merge(botocore.config.Config(region_name=TEST_AWS_REGION_NAME))
243
- return ExternalClientFactory(session=session, config=config)
244
+ return ExternalClientFactory(session=session, config=config, endpoint=TEST_AWS_ENDPOINT_URL)
244
245
 
245
246
 
246
247
  def base_testing_aws_client(client_factory: ClientFactory) -> ServiceLevelClientFactory:
@@ -9,6 +9,7 @@ TEST_AWS_ACCOUNT_ID = os.getenv("TEST_AWS_ACCOUNT_ID") or DEFAULT_AWS_ACCOUNT_ID
9
9
  TEST_AWS_ACCESS_KEY_ID = os.getenv("TEST_AWS_ACCESS_KEY_ID") or "test"
10
10
  TEST_AWS_SECRET_ACCESS_KEY = os.getenv("TEST_AWS_SECRET_ACCESS_KEY") or "test"
11
11
  TEST_AWS_REGION_NAME = os.getenv("TEST_AWS_REGION_NAME") or "us-east-1"
12
+ TEST_AWS_ENDPOINT_URL = os.getenv("TEST_AWS_ENDPOINT_URL")
12
13
 
13
14
  # Secondary test AWS profile - only used for testing against AWS
14
15
  SECONDARY_TEST_AWS_PROFILE = os.getenv("SECONDARY_TEST_AWS_PROFILE")
@@ -61,7 +61,6 @@ if TYPE_CHECKING:
61
61
  from mypy_boto3_identitystore import IdentityStoreClient
62
62
  from mypy_boto3_iot import IoTClient
63
63
  from mypy_boto3_iot_data import IoTDataPlaneClient
64
- from mypy_boto3_iotanalytics import IoTAnalyticsClient
65
64
  from mypy_boto3_iotwireless import IoTWirelessClient
66
65
  from mypy_boto3_kafka import KafkaClient
67
66
  from mypy_boto3_kinesis import KinesisClient
@@ -72,7 +71,6 @@ if TYPE_CHECKING:
72
71
  from mypy_boto3_logs import CloudWatchLogsClient
73
72
  from mypy_boto3_managedblockchain import ManagedBlockchainClient
74
73
  from mypy_boto3_mediaconvert import MediaConvertClient
75
- from mypy_boto3_mediastore import MediaStoreClient
76
74
  from mypy_boto3_mq import MQClient
77
75
  from mypy_boto3_mwaa import MWAAClient
78
76
  from mypy_boto3_neptune import NeptuneClient
@@ -184,7 +182,6 @@ class TypedServiceClientFactory(abc.ABC):
184
182
  identitystore: Union["IdentityStoreClient", "MetadataRequestInjector[IdentityStoreClient]"]
185
183
  iot: Union["IoTClient", "MetadataRequestInjector[IoTClient]"]
186
184
  iot_data: Union["IoTDataPlaneClient", "MetadataRequestInjector[IoTDataPlaneClient]"]
187
- iotanalytics: Union["IoTAnalyticsClient", "MetadataRequestInjector[IoTAnalyticsClient]"]
188
185
  iotwireless: Union["IoTWirelessClient", "MetadataRequestInjector[IoTWirelessClient]"]
189
186
  kafka: Union["KafkaClient", "MetadataRequestInjector[KafkaClient]"]
190
187
  kinesis: Union["KinesisClient", "MetadataRequestInjector[KinesisClient]"]
@@ -199,7 +196,6 @@ class TypedServiceClientFactory(abc.ABC):
199
196
  "ManagedBlockchainClient", "MetadataRequestInjector[ManagedBlockchainClient]"
200
197
  ]
201
198
  mediaconvert: Union["MediaConvertClient", "MetadataRequestInjector[MediaConvertClient]"]
202
- mediastore: Union["MediaStoreClient", "MetadataRequestInjector[MediaStoreClient]"]
203
199
  mq: Union["MQClient", "MetadataRequestInjector[MQClient]"]
204
200
  mwaa: Union["MWAAClient", "MetadataRequestInjector[MWAAClient]"]
205
201
  neptune: Union["NeptuneClient", "MetadataRequestInjector[NeptuneClient]"]
@@ -277,6 +273,8 @@ class ServicePrincipal(str):
277
273
  appsync = "appsync"
278
274
  cloudformation = "cloudformation"
279
275
  dms = "dms"
276
+ ecs = "ecs"
277
+ ecs_tasks = "ecs-tasks"
280
278
  edgelambda = "edgelambda"
281
279
  elasticloadbalancing = "elasticloadbalancing"
282
280
  events = "events"
@@ -34,8 +34,8 @@ from localstack.utils.container_utils.container_client import (
34
34
  NoSuchImage,
35
35
  NoSuchNetwork,
36
36
  PortMappings,
37
- VolumeDirMount,
38
37
  VolumeMappings,
38
+ VolumeMappingSpecification,
39
39
  )
40
40
  from localstack.utils.container_utils.docker_cmd_client import CmdDockerClient
41
41
  from localstack.utils.docker_utils import DOCKER_CLIENT
@@ -666,7 +666,7 @@ class ContainerConfigurators:
666
666
  return _cfg
667
667
 
668
668
  @staticmethod
669
- def volume(volume: BindMount | VolumeDirMount):
669
+ def volume(volume: VolumeMappingSpecification):
670
670
  def _cfg(cfg: ContainerConfiguration):
671
671
  cfg.volumes.add(volume)
672
672
 
@@ -1,5 +1,6 @@
1
1
  import logging
2
2
  from abc import abstractmethod
3
+ from typing import TypeAlias
3
4
 
4
5
  from plux import Plugin
5
6
 
@@ -21,10 +22,10 @@ ServiceOperations = set[str]
21
22
  ProviderName = str
22
23
  CfnResourceName = str
23
24
  CfnResourceMethodName = str
24
- AwsServicesSupportStatus = (
25
+ AwsServicesSupportStatus: TypeAlias = (
25
26
  AwsServiceSupportAtRuntime | AwsServicesSupportInLatest | AwsServiceOperationsSupportInLatest
26
27
  )
27
- CfnResourceSupportStatus = (
28
+ CfnResourceSupportStatus: TypeAlias = (
28
29
  CloudFormationResourcesSupportInLatest | CloudFormationResourcesSupportAtRuntime
29
30
  )
30
31
  CfnResourceCatalog = dict[LocalstackEmulatorType, dict[CfnResourceName, set[CfnResourceMethodName]]]
@@ -15,6 +15,7 @@ from typing import (
15
15
  Literal,
16
16
  NamedTuple,
17
17
  Protocol,
18
+ TypeAlias,
18
19
  TypedDict,
19
20
  )
20
21
 
@@ -357,7 +358,13 @@ SimpleVolumeBind = tuple[str, str]
357
358
 
358
359
 
359
360
  @dataclasses.dataclass
360
- class BindMount:
361
+ class Mount:
362
+ def to_str(self) -> str:
363
+ return str(self)
364
+
365
+
366
+ @dataclasses.dataclass
367
+ class BindMount(Mount):
361
368
  """Represents a --volume argument run/create command. When using VolumeBind to bind-mount a file or directory
362
369
  that does not yet exist on the Docker host, -v creates the endpoint for you. It is always created as a directory.
363
370
  """
@@ -402,7 +409,7 @@ class BindMount:
402
409
 
403
410
 
404
411
  @dataclasses.dataclass
405
- class VolumeDirMount:
412
+ class VolumeDirMount(Mount):
406
413
  volume_path: str
407
414
  """
408
415
  Absolute path inside /var/lib/localstack to mount into the container
@@ -439,24 +446,25 @@ class VolumeDirMount:
439
446
  }
440
447
 
441
448
 
449
+ VolumeMappingSpecification: TypeAlias = SimpleVolumeBind | Mount
450
+
451
+
442
452
  class VolumeMappings:
443
- mappings: list[SimpleVolumeBind | BindMount]
453
+ mappings: list[VolumeMappingSpecification]
444
454
 
445
- def __init__(self, mappings: list[SimpleVolumeBind | BindMount | VolumeDirMount] = None):
455
+ def __init__(
456
+ self,
457
+ mappings: list[VolumeMappingSpecification] = None,
458
+ ):
446
459
  self.mappings = mappings if mappings is not None else []
447
460
 
448
- def add(self, mapping: SimpleVolumeBind | BindMount | VolumeDirMount):
461
+ def add(self, mapping: VolumeMappingSpecification):
449
462
  self.append(mapping)
450
463
 
451
- def append(
452
- self,
453
- mapping: SimpleVolumeBind | BindMount | VolumeDirMount,
454
- ):
464
+ def append(self, mapping: VolumeMappingSpecification):
455
465
  self.mappings.append(mapping)
456
466
 
457
- def find_target_mapping(
458
- self, container_dir: str
459
- ) -> SimpleVolumeBind | BindMount | VolumeDirMount | None:
467
+ def find_target_mapping(self, container_dir: str) -> VolumeMappingSpecification | None:
460
468
  """
461
469
  Looks through the volumes and returns the one where the container dir matches ``container_dir``.
462
470
  Returns None if there is no volume mapping to the given container directory.
@@ -1510,7 +1518,8 @@ class Util:
1510
1518
  ) -> dict[str, dict[str, str]]:
1511
1519
  """Converts a List of (host_path, container_path) tuples to a Dict suitable as volume argument for docker sdk"""
1512
1520
 
1513
- def _map_to_dict(paths: SimpleVolumeBind | BindMount | VolumeDirMount):
1521
+ def _map_to_dict(paths: VolumeMappingSpecification):
1522
+ # TODO: move this logic to the `Mount` base class
1514
1523
  if isinstance(paths, (BindMount, VolumeDirMount)):
1515
1524
  return paths.to_docker_sdk_parameters()
1516
1525
  else:
@@ -12,7 +12,6 @@ from localstack import config
12
12
  from localstack.utils.collections import ensure_list
13
13
  from localstack.utils.container_utils.container_client import (
14
14
  AccessDenied,
15
- BindMount,
16
15
  CancellableStream,
17
16
  ContainerClient,
18
17
  ContainerException,
@@ -21,16 +20,16 @@ from localstack.utils.container_utils.container_client import (
21
20
  DockerNotAvailable,
22
21
  DockerPlatform,
23
22
  LogConfig,
23
+ Mount,
24
24
  NoSuchContainer,
25
25
  NoSuchImage,
26
26
  NoSuchNetwork,
27
27
  NoSuchObject,
28
28
  PortMappings,
29
29
  RegistryConnectionError,
30
- SimpleVolumeBind,
31
30
  Ulimit,
32
31
  Util,
33
- VolumeDirMount,
32
+ VolumeMappingSpecification,
34
33
  )
35
34
  from localstack.utils.run import run
36
35
  from localstack.utils.strings import first_char_to_upper, to_str
@@ -810,7 +809,7 @@ class CmdDockerClient(ContainerClient):
810
809
  tty: bool = False,
811
810
  detach: bool = False,
812
811
  command: list[str] | str | None = None,
813
- volumes: list[SimpleVolumeBind] | None = None,
812
+ volumes: list[VolumeMappingSpecification] | None = None,
814
813
  ports: PortMappings | None = None,
815
814
  exposed_ports: list[str] | None = None,
816
815
  env_vars: dict[str, str] | None = None,
@@ -900,7 +899,7 @@ class CmdDockerClient(ContainerClient):
900
899
  return cmd, env_file
901
900
 
902
901
  @staticmethod
903
- def _map_to_volume_param(volume: SimpleVolumeBind | BindMount | VolumeDirMount) -> str:
902
+ def _map_to_volume_param(volume: VolumeMappingSpecification) -> str:
904
903
  """
905
904
  Maps the mount volume, to a parameter for the -v docker cli argument.
906
905
 
@@ -911,7 +910,8 @@ class CmdDockerClient(ContainerClient):
911
910
  :param volume: Either a SimpleVolumeBind, in essence a tuple (host_dir, container_dir), or a VolumeBind object
912
911
  :return: String which is passable as parameter to the docker cli -v option
913
912
  """
914
- if isinstance(volume, (BindMount, VolumeDirMount)):
913
+ # TODO: move this logic to the VolumeMappingSpecification type
914
+ if isinstance(volume, Mount):
915
915
  return volume.to_str()
916
916
  else:
917
917
  return f"{volume[0]}:{volume[1]}"
localstack/version.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '4.11.2.dev14'
32
- __version_tuple__ = version_tuple = (4, 11, 2, 'dev14')
31
+ __version__ = version = '4.12.1.dev18'
32
+ __version_tuple__ = version_tuple = (4, 12, 1, 'dev18')
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: localstack-core
3
- Version: 4.11.2.dev14
3
+ Version: 4.12.1.dev18
4
4
  Summary: The core library and runtime of LocalStack
5
5
  Author-email: LocalStack Contributors <info@localstack.cloud>
6
6
  License-Expression: Apache-2.0
@@ -30,8 +30,8 @@ Requires-Dist: rich>=12.3.0
30
30
  Requires-Dist: requests>=2.20.0
31
31
  Requires-Dist: semver>=2.10
32
32
  Provides-Extra: base-runtime
33
- Requires-Dist: boto3==1.42.0; extra == "base-runtime"
34
- Requires-Dist: botocore==1.41.6; extra == "base-runtime"
33
+ Requires-Dist: boto3==1.42.9; extra == "base-runtime"
34
+ Requires-Dist: botocore==1.42.9; extra == "base-runtime"
35
35
  Requires-Dist: awscrt!=0.27.1,>=0.13.14; extra == "base-runtime"
36
36
  Requires-Dist: cbor2>=5.5.0; extra == "base-runtime"
37
37
  Requires-Dist: dnspython>=1.16.0; extra == "base-runtime"
@@ -53,11 +53,11 @@ Requires-Dist: xmltodict>=0.13.0; extra == "base-runtime"
53
53
  Requires-Dist: rolo>=0.7; extra == "base-runtime"
54
54
  Provides-Extra: runtime
55
55
  Requires-Dist: localstack-core[base-runtime]; extra == "runtime"
56
- Requires-Dist: awscli==1.43.6; extra == "runtime"
56
+ Requires-Dist: awscli==1.43.15; extra == "runtime"
57
57
  Requires-Dist: airspeed-ext>=0.6.3; extra == "runtime"
58
58
  Requires-Dist: antlr4-python3-runtime==4.13.2; extra == "runtime"
59
59
  Requires-Dist: apispec>=5.1.1; extra == "runtime"
60
- Requires-Dist: aws-sam-translator>=1.15.1; extra == "runtime"
60
+ Requires-Dist: aws-sam-translator>=1.105.0; extra == "runtime"
61
61
  Requires-Dist: crontab>=0.22.6; extra == "runtime"
62
62
  Requires-Dist: cryptography>=41.0.5; extra == "runtime"
63
63
  Requires-Dist: jinja2>=3.1.6; extra == "runtime"
@@ -100,5 +100,5 @@ Requires-Dist: rstr>=3.2.0; extra == "dev"
100
100
  Requires-Dist: mypy; extra == "dev"
101
101
  Provides-Extra: typehint
102
102
  Requires-Dist: localstack-core[dev]; extra == "typehint"
103
- Requires-Dist: boto3-stubs[acm,acm-pca,amplify,apigateway,apigatewayv2,appconfig,appconfigdata,application-autoscaling,appsync,athena,autoscaling,backup,batch,ce,cloudcontrol,cloudformation,cloudfront,cloudtrail,cloudwatch,codebuild,codecommit,codeconnections,codedeploy,codepipeline,codestar-connections,cognito-identity,cognito-idp,dms,docdb,dynamodb,dynamodbstreams,ec2,ecr,ecs,efs,eks,elasticache,elasticbeanstalk,elbv2,emr,emr-serverless,es,events,firehose,fis,glacier,glue,iam,identitystore,iot,iot-data,iotanalytics,iotwireless,kafka,kinesis,kinesisanalyticsv2,kms,lakeformation,lambda,logs,managedblockchain,mediaconvert,mediastore,mq,mwaa,neptune,opensearch,organizations,pi,pinpoint,pipes,rds,rds-data,redshift,redshift-data,resource-groups,resourcegroupstaggingapi,route53,route53resolver,s3,s3control,sagemaker,sagemaker-runtime,secretsmanager,serverlessrepo,servicediscovery,ses,sesv2,sns,sqs,ssm,sso-admin,stepfunctions,sts,timestream-query,timestream-write,transcribe,verifiedpermissions,wafv2,xray]; extra == "typehint"
103
+ Requires-Dist: boto3-stubs[acm,acm-pca,amplify,apigateway,apigatewayv2,appconfig,appconfigdata,application-autoscaling,appsync,athena,autoscaling,backup,batch,ce,cloudcontrol,cloudformation,cloudfront,cloudtrail,cloudwatch,codebuild,codecommit,codeconnections,codedeploy,codepipeline,codestar-connections,cognito-identity,cognito-idp,dms,docdb,dynamodb,dynamodbstreams,ec2,ecr,ecs,efs,eks,elasticache,elasticbeanstalk,elbv2,emr,emr-serverless,es,events,firehose,fis,glacier,glue,iam,identitystore,iot,iot-data,iotwireless,kafka,kinesis,kinesisanalyticsv2,kms,lakeformation,lambda,logs,managedblockchain,mediaconvert,mq,mwaa,neptune,opensearch,organizations,pi,pinpoint,pipes,rds,rds-data,redshift,redshift-data,resource-groups,resourcegroupstaggingapi,route53,route53resolver,s3,s3control,sagemaker,sagemaker-runtime,secretsmanager,serverlessrepo,servicediscovery,ses,sesv2,sns,sqs,ssm,sso-admin,stepfunctions,sts,timestream-query,timestream-write,transcribe,verifiedpermissions,wafv2,xray]; extra == "typehint"
104
104
  Dynamic: license-file