localstack-core 4.10.1.dev42__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.

Potentially problematic release.


This version of localstack-core might be problematic. Click here for more details.

Files changed (158) hide show
  1. localstack/aws/api/apigateway/__init__.py +42 -0
  2. localstack/aws/api/cloudformation/__init__.py +161 -0
  3. localstack/aws/api/ec2/__init__.py +1178 -12
  4. localstack/aws/api/iam/__init__.py +228 -0
  5. localstack/aws/api/kms/__init__.py +1 -0
  6. localstack/aws/api/lambda_/__init__.py +1034 -66
  7. localstack/aws/api/logs/__init__.py +500 -0
  8. localstack/aws/api/opensearch/__init__.py +100 -0
  9. localstack/aws/api/redshift/__init__.py +69 -0
  10. localstack/aws/api/resourcegroupstaggingapi/__init__.py +36 -0
  11. localstack/aws/api/route53/__init__.py +45 -0
  12. localstack/aws/api/route53resolver/__init__.py +1 -0
  13. localstack/aws/api/s3/__init__.py +64 -0
  14. localstack/aws/api/s3control/__init__.py +19 -0
  15. localstack/aws/api/secretsmanager/__init__.py +37 -23
  16. localstack/aws/api/stepfunctions/__init__.py +52 -10
  17. localstack/aws/api/sts/__init__.py +52 -0
  18. localstack/aws/connect.py +35 -15
  19. localstack/aws/handlers/logging.py +8 -4
  20. localstack/aws/handlers/service.py +11 -2
  21. localstack/aws/protocol/serializer.py +1 -1
  22. localstack/config.py +8 -0
  23. localstack/constants.py +3 -0
  24. localstack/deprecations.py +0 -6
  25. localstack/dev/kubernetes/__main__.py +39 -14
  26. localstack/runtime/analytics.py +11 -0
  27. localstack/services/acm/provider.py +17 -1
  28. localstack/services/apigateway/legacy/provider.py +28 -15
  29. localstack/services/cloudformation/engine/template_preparer.py +6 -2
  30. localstack/services/cloudformation/engine/v2/change_set_model.py +9 -0
  31. localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +15 -1
  32. localstack/services/cloudformation/engine/v2/change_set_resource_support_checker.py +114 -0
  33. localstack/services/cloudformation/provider.py +26 -1
  34. localstack/services/cloudformation/provider_utils.py +20 -0
  35. localstack/services/cloudformation/resource_provider.py +5 -4
  36. localstack/services/cloudformation/scaffolding/__main__.py +94 -22
  37. localstack/services/cloudformation/v2/provider.py +41 -0
  38. localstack/services/cloudwatch/provider.py +10 -3
  39. localstack/services/cloudwatch/provider_v2.py +6 -3
  40. localstack/services/configservice/provider.py +5 -1
  41. localstack/services/dynamodb/provider.py +1 -0
  42. localstack/services/dynamodb/v2/provider.py +1 -0
  43. localstack/services/dynamodbstreams/provider.py +6 -0
  44. localstack/services/dynamodbstreams/v2/provider.py +6 -0
  45. localstack/services/ec2/provider.py +6 -0
  46. localstack/services/es/provider.py +6 -0
  47. localstack/services/events/provider.py +4 -0
  48. localstack/services/events/v1/provider.py +9 -0
  49. localstack/services/firehose/provider.py +5 -0
  50. localstack/services/iam/provider.py +4 -0
  51. localstack/services/kinesis/packages.py +1 -1
  52. localstack/services/kms/models.py +16 -22
  53. localstack/services/kms/provider.py +4 -0
  54. localstack/services/lambda_/analytics.py +11 -2
  55. localstack/services/lambda_/api_utils.py +37 -20
  56. localstack/services/lambda_/event_source_mapping/pollers/stream_poller.py +1 -1
  57. localstack/services/lambda_/invocation/assignment.py +4 -1
  58. localstack/services/lambda_/invocation/event_manager.py +15 -11
  59. localstack/services/lambda_/invocation/execution_environment.py +21 -2
  60. localstack/services/lambda_/invocation/lambda_models.py +31 -2
  61. localstack/services/lambda_/invocation/lambda_service.py +62 -3
  62. localstack/services/lambda_/invocation/models.py +9 -1
  63. localstack/services/lambda_/invocation/version_manager.py +18 -3
  64. localstack/services/lambda_/provider.py +307 -106
  65. localstack/services/lambda_/resource_providers/aws_lambda_function.py +33 -1
  66. localstack/services/lambda_/runtimes.py +3 -1
  67. localstack/services/logs/provider.py +9 -0
  68. localstack/services/opensearch/packages.py +34 -20
  69. localstack/services/opensearch/provider.py +53 -3
  70. localstack/services/resource_groups/provider.py +5 -1
  71. localstack/services/resourcegroupstaggingapi/provider.py +6 -1
  72. localstack/services/route53/provider.py +7 -0
  73. localstack/services/route53resolver/provider.py +5 -0
  74. localstack/services/s3/constants.py +5 -0
  75. localstack/services/s3/exceptions.py +9 -0
  76. localstack/services/s3/models.py +9 -1
  77. localstack/services/s3/provider.py +51 -43
  78. localstack/services/s3/utils.py +81 -15
  79. localstack/services/s3control/provider.py +107 -2
  80. localstack/services/s3control/validation.py +50 -0
  81. localstack/services/scheduler/provider.py +4 -2
  82. localstack/services/secretsmanager/provider.py +4 -0
  83. localstack/services/ses/provider.py +4 -0
  84. localstack/services/sns/constants.py +16 -1
  85. localstack/services/sns/provider.py +5 -0
  86. localstack/services/sns/publisher.py +15 -6
  87. localstack/services/sns/v2/models.py +9 -0
  88. localstack/services/sns/v2/provider.py +750 -19
  89. localstack/services/sns/v2/utils.py +12 -0
  90. localstack/services/sqs/constants.py +6 -0
  91. localstack/services/sqs/provider.py +9 -1
  92. localstack/services/sqs/resource_providers/aws_sqs_queue.py +61 -46
  93. localstack/services/ssm/provider.py +6 -0
  94. localstack/services/stepfunctions/asl/component/common/path/result_path.py +1 -1
  95. localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +0 -1
  96. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/state_map.py +0 -1
  97. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +8 -8
  98. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/{mock_eval_utils.py → local_mock_eval_utils.py} +13 -9
  99. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py +6 -6
  100. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_callback.py +1 -1
  101. localstack/services/stepfunctions/asl/component/state/state_fail/state_fail.py +4 -0
  102. localstack/services/stepfunctions/asl/component/test_state/state/base_mock.py +118 -0
  103. localstack/services/stepfunctions/asl/component/test_state/state/common.py +82 -0
  104. localstack/services/stepfunctions/asl/component/test_state/state/execution.py +139 -0
  105. localstack/services/stepfunctions/asl/component/test_state/state/map.py +77 -0
  106. localstack/services/stepfunctions/asl/component/test_state/state/task.py +44 -0
  107. localstack/services/stepfunctions/asl/eval/environment.py +30 -22
  108. localstack/services/stepfunctions/asl/eval/states.py +1 -1
  109. localstack/services/stepfunctions/asl/eval/test_state/environment.py +49 -9
  110. localstack/services/stepfunctions/asl/eval/test_state/program_state.py +22 -0
  111. localstack/services/stepfunctions/asl/jsonata/jsonata.py +5 -1
  112. localstack/services/stepfunctions/asl/parse/preprocessor.py +67 -24
  113. localstack/services/stepfunctions/asl/parse/test_state/asl_parser.py +5 -4
  114. localstack/services/stepfunctions/asl/parse/test_state/preprocessor.py +222 -31
  115. localstack/services/stepfunctions/asl/static_analyser/test_state/test_state_analyser.py +256 -22
  116. localstack/services/stepfunctions/backend/execution.py +10 -11
  117. localstack/services/stepfunctions/backend/execution_worker.py +5 -5
  118. localstack/services/stepfunctions/backend/test_state/execution.py +36 -0
  119. localstack/services/stepfunctions/backend/test_state/execution_worker.py +33 -1
  120. localstack/services/stepfunctions/backend/test_state/test_state_mock.py +127 -0
  121. localstack/services/stepfunctions/local_mocking/__init__.py +9 -0
  122. localstack/services/stepfunctions/{mocking → local_mocking}/mock_config.py +24 -17
  123. localstack/services/stepfunctions/provider.py +83 -25
  124. localstack/services/stepfunctions/test_state/mock_config.py +47 -0
  125. localstack/services/sts/provider.py +7 -0
  126. localstack/services/support/provider.py +5 -1
  127. localstack/services/swf/provider.py +5 -1
  128. localstack/services/transcribe/provider.py +7 -0
  129. localstack/testing/aws/lambda_utils.py +1 -1
  130. localstack/testing/aws/util.py +2 -1
  131. localstack/testing/config.py +1 -0
  132. localstack/testing/pytest/fixtures.py +28 -0
  133. localstack/testing/snapshots/transformer_utility.py +5 -0
  134. localstack/utils/analytics/publisher.py +37 -155
  135. localstack/utils/analytics/service_request_aggregator.py +6 -4
  136. localstack/utils/aws/arns.py +7 -0
  137. localstack/utils/aws/client_types.py +2 -4
  138. localstack/utils/batching.py +258 -0
  139. localstack/utils/bootstrap.py +2 -2
  140. localstack/utils/catalog/catalog.py +3 -2
  141. localstack/utils/collections.py +23 -11
  142. localstack/utils/container_utils/container_client.py +22 -13
  143. localstack/utils/container_utils/docker_cmd_client.py +6 -6
  144. localstack/version.py +2 -2
  145. {localstack_core-4.10.1.dev42.dist-info → localstack_core-4.12.1.dev18.dist-info}/METADATA +7 -7
  146. {localstack_core-4.10.1.dev42.dist-info → localstack_core-4.12.1.dev18.dist-info}/RECORD +155 -146
  147. localstack_core-4.12.1.dev18.dist-info/plux.json +1 -0
  148. localstack/services/stepfunctions/mocking/__init__.py +0 -0
  149. localstack/utils/batch_policy.py +0 -124
  150. localstack_core-4.10.1.dev42.dist-info/plux.json +0 -1
  151. /localstack/services/stepfunctions/{mocking → local_mocking}/mock_config_file.py +0 -0
  152. {localstack_core-4.10.1.dev42.data → localstack_core-4.12.1.dev18.data}/scripts/localstack +0 -0
  153. {localstack_core-4.10.1.dev42.data → localstack_core-4.12.1.dev18.data}/scripts/localstack-supervisor +0 -0
  154. {localstack_core-4.10.1.dev42.data → localstack_core-4.12.1.dev18.data}/scripts/localstack.bat +0 -0
  155. {localstack_core-4.10.1.dev42.dist-info → localstack_core-4.12.1.dev18.dist-info}/WHEEL +0 -0
  156. {localstack_core-4.10.1.dev42.dist-info → localstack_core-4.12.1.dev18.dist-info}/entry_points.txt +0 -0
  157. {localstack_core-4.10.1.dev42.dist-info → localstack_core-4.12.1.dev18.dist-info}/licenses/LICENSE.txt +0 -0
  158. {localstack_core-4.10.1.dev42.dist-info → localstack_core-4.12.1.dev18.dist-info}/top_level.txt +0 -0
@@ -5,7 +5,7 @@ and manipulate python collection (dicts, list, sets).
5
5
 
6
6
  import logging
7
7
  import re
8
- from collections.abc import Callable, Iterable, Iterator, Mapping, Sized
8
+ from collections.abc import Callable, Generator, Iterable, Iterator, Mapping, Sized
9
9
  from typing import (
10
10
  Any,
11
11
  Optional,
@@ -24,6 +24,9 @@ LOG = logging.getLogger(__name__)
24
24
  # default regex to match an item in a comma-separated list string
25
25
  DEFAULT_REGEX_LIST_ITEM = r"[\w-]+"
26
26
 
27
+ _E = TypeVar("_E")
28
+ """TypeVar var used internally for container type parameters."""
29
+
27
30
 
28
31
  class AccessTrackingDict(dict):
29
32
  """
@@ -101,21 +104,18 @@ class HashableJsonDict(ImmutableDict):
101
104
  return hash(canonical_json(self._dict))
102
105
 
103
106
 
104
- _ListType = TypeVar("_ListType")
105
-
106
-
107
- class PaginatedList(list[_ListType]):
107
+ class PaginatedList(list[_E]):
108
108
  """List which can be paginated and filtered. For usage in AWS APIs with paginated responses"""
109
109
 
110
110
  DEFAULT_PAGE_SIZE = 50
111
111
 
112
112
  def get_page(
113
113
  self,
114
- token_generator: Callable[[_ListType], str],
114
+ token_generator: Callable[[_E], str],
115
115
  next_token: str = None,
116
116
  page_size: int = None,
117
- filter_function: Callable[[_ListType], bool] = None,
118
- ) -> tuple[list[_ListType], str | None]:
117
+ filter_function: Callable[[_E], bool] = None,
118
+ ) -> tuple[list[_E], str | None]:
119
119
  if filter_function is not None:
120
120
  result_list = list(filter(filter_function, self))
121
121
  else:
@@ -528,9 +528,6 @@ def is_comma_delimited_list(string: str, item_regex: str | None = None) -> bool:
528
528
  return True
529
529
 
530
530
 
531
- _E = TypeVar("_E")
532
-
533
-
534
531
  def optional_list(condition: bool, items: Iterable[_E]) -> list[_E]:
535
532
  """
536
533
  Given an iterable, either create a list out of the entire iterable (if `condition` is `True`), or return the empty list.
@@ -540,3 +537,18 @@ def optional_list(condition: bool, items: Iterable[_E]) -> list[_E]:
540
537
  []
541
538
  """
542
539
  return list(filter(lambda _: condition, items))
540
+
541
+
542
+ def iter_chunks(items: list[_E], chunk_size: int) -> Generator[list[_E], None, None]:
543
+ """
544
+ Split a list into smaller chunks of a specified size and iterate over them.
545
+
546
+ It is implemented as a generator and yields each chunk as needed, making it memory-efficient for large lists.
547
+
548
+ :param items: A list of elements to be divided into chunks.
549
+ :param chunk_size: The maximum number of elements that a single chunk can contain.
550
+ :return: A generator that yields chunks (sublists) of the original list. Each chunk contains up to `chunk_size`
551
+ elements.
552
+ """
553
+ for i in range(0, len(items), chunk_size):
554
+ yield items[i : i + chunk_size]
@@ -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.10.1.dev42'
32
- __version_tuple__ = version_tuple = (4, 10, 1, 'dev42')
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.10.1.dev42
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
@@ -16,7 +16,7 @@ Classifier: Topic :: System :: Emulators
16
16
  Requires-Python: >=3.10
17
17
  License-File: LICENSE.txt
18
18
  Requires-Dist: asn1crypto>=1.5.1
19
- Requires-Dist: click>=7.1
19
+ Requires-Dist: click>=8.2.0
20
20
  Requires-Dist: cachetools>=5.0
21
21
  Requires-Dist: cryptography
22
22
  Requires-Dist: dill==0.3.6
@@ -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.40.74; extra == "base-runtime"
34
- Requires-Dist: botocore==1.40.74; 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.42.74; 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