diff --git a/.github/workflows/merge-develop.yml b/.github/workflows/merge-develop.yml index 50616c7..ba4ebc9 100644 --- a/.github/workflows/merge-develop.yml +++ b/.github/workflows/merge-develop.yml @@ -34,7 +34,7 @@ jobs: with: path: | .venv - key: ${{ runner.os }}-poetry-v2-py3.8-${{ hashFiles('./poetry.lock') }} + key: ${{ runner.os }}-poetry-v2-py3.9-${{ hashFiles('./poetry.lock') }} - name: git reset run: git reset --hard diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 9006700..c398b32 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -12,7 +12,7 @@ jobs: tox: strategy: matrix: - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11"] runs-on: ubuntu-latest if: github.repository == 'NHSDigital/nhs-aws-helpers' @@ -114,7 +114,7 @@ jobs: with: path: | .venv - key: ${{ runner.os }}-poetry-v2-py3.8-${{ hashFiles('./poetry.lock') }} + key: ${{ runner.os }}-poetry-v2-py3.9-${{ hashFiles('./poetry.lock') }} - name: git reset run: git reset --hard @@ -171,7 +171,7 @@ jobs: - name: archive reports if: success() || failure() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: reports path: reports/**/* @@ -231,7 +231,7 @@ jobs: with: path: | .venv - key: ${{ runner.os }}-poetry-v2-py3.8-${{ hashFiles('./poetry.lock') }} + key: ${{ runner.os }}-poetry-v2-py3.9-${{ hashFiles('./poetry.lock') }} - name: git reset run: git reset --hard diff --git a/.tool-versions b/.tool-versions index 32d40b7..32a48cf 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ poetry 1.8.5 -python 3.10.12 3.8.12 3.9.12 3.11.5 +python 3.10.12 3.9.12 3.11.5 diff --git a/.vscode/settings.json b/.vscode/settings.json index d742caf..1780e78 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,7 +2,7 @@ "editor.formatOnSave": true, "[python]": { "editor.codeActionsOnSave": { - "source.organizeImports": true + "source.organizeImports": "explicit" } }, "isort.args": [ diff --git a/nhs_aws_helpers/__init__.py b/nhs_aws_helpers/__init__.py index ba82d0a..8a2b590 100644 --- a/nhs_aws_helpers/__init__.py +++ b/nhs_aws_helpers/__init__.py @@ -7,22 +7,15 @@ import random import re import time +from collections.abc import AsyncGenerator, Generator, Iterable, Sequence from concurrent.futures import ThreadPoolExecutor, as_completed from functools import partial, reduce, wraps from typing import ( IO, Any, - AsyncGenerator, Callable, - Dict, - Generator, - Iterable, - List, Literal, Optional, - Sequence, - Tuple, - Type, TypeVar, Union, cast, @@ -86,7 +79,7 @@ def s3_build_uri(bucket: str, key: str) -> str: return f"s3://{bucket}/{key}" -def s3_split_path(s3uri: str) -> Tuple[str, str, str]: +def s3_split_path(s3uri: str) -> tuple[str, str, str]: match = s3re.match(s3uri) if not match: raise ValueError(f"Not a s3 uri: {s3uri}") @@ -94,7 +87,7 @@ def s3_split_path(s3uri: str) -> Tuple[str, str, str]: return scheme, bucket, key -_default_configs: Dict[str, Config] = {} +_default_configs: dict[str, Config] = {} _pre_configure: Optional[Callable[[str, str, Optional[Config]], Optional[Config]]] = None @@ -322,9 +315,9 @@ def secret_binary_value(name: str, session: Optional[Session] = None, config: Op def ssm_parameter( name: str, decrypt=False, session: Optional[Session] = None, config: Optional[Config] = None -) -> Union[str, List[str]]: +) -> Union[str, list[str]]: ssm = ssm_client(session=session, config=config) - value = cast(Union[str, List[str]], ssm.get_parameter(Name=name, WithDecryption=decrypt)["Parameter"]["Value"]) + value = cast(Union[str, list[str]], ssm.get_parameter(Name=name, WithDecryption=decrypt)["Parameter"]["Value"]) return value @@ -359,7 +352,7 @@ def s3_get_tags( session: Optional[Session] = None, config: Optional[Config] = None, client: Optional[S3Client] = None, -) -> Dict[str, str]: +) -> dict[str, str]: client = client or s3_resource(session=session, config=config).meta.client result = client.get_object_tagging(Bucket=bucket, Key=key) tags = {pair["Key"]: pair["Value"] for pair in result["TagSet"]} @@ -369,7 +362,7 @@ def s3_get_tags( def s3_replace_tags( bucket: str, key: str, - tags: Dict[str, str], + tags: dict[str, str], session: Optional[Session] = None, config: Optional[Config] = None, client: Optional[S3Client] = None, @@ -384,11 +377,11 @@ def s3_replace_tags( def s3_update_tags( bucket: str, key: str, - tags: Dict[str, str], + tags: dict[str, str], session: Optional[Session] = None, config: Optional[Config] = None, client: Optional[S3Client] = None, -) -> Dict[str, str]: +) -> dict[str, str]: client = client or s3_resource(session=session, config=config).meta.client result = client.get_object_tagging(Bucket=bucket, Key=key) @@ -407,7 +400,7 @@ def s3_get_all_keys( session: Optional[Session] = None, config: Optional[Config] = None, client: Optional[S3Client] = None, -) -> List[str]: +) -> list[str]: client = client or s3_resource(session=session, config=config).meta.client paginator = client.get_paginator("list_objects_v2") page_iterator = paginator.paginate(Bucket=bucket, Prefix=prefix) @@ -442,7 +435,7 @@ def s3_delete_keys( def s3_delete_versioned_keys( - keys: Iterable[Tuple[str, str]], bucket: str, session: Optional[Session] = None, config: Optional[Config] = None + keys: Iterable[tuple[str, str]], bucket: str, session: Optional[Session] = None, config: Optional[Config] = None ): # delete specific versions, rather than deleting "objects" and adding delete_marker buck = s3_bucket(bucket, session=session, config=config) @@ -512,7 +505,8 @@ def filter_items(items: Sequence[Union[DeleteMarkerEntryTypeDef, ObjectVersionTy for i in range(0, len(version_list), 1000): response = client.delete_objects( - Bucket=bucket, Delete={"Objects": version_list[i : i + 1000], "Quiet": True} # type: ignore[typeddict-item] + Bucket=bucket, + Delete={"Objects": version_list[i : i + 1000], "Quiet": True}, # type: ignore[typeddict-item] ) print(response) @@ -608,7 +602,7 @@ def s3_put(bucket: Bucket, key: str, body: Union[bytes, str], encoding: str = "u return obj -def s3_list_prefixes(s3_path: str, session: Optional[Session] = None, config: Optional[Config] = None) -> List[str]: +def s3_list_prefixes(s3_path: str, session: Optional[Session] = None, config: Optional[Config] = None) -> list[str]: _na, bucket, prefix = s3_split_path(s3_path) if not prefix.endswith("/"): @@ -619,7 +613,7 @@ def s3_list_prefixes(s3_path: str, session: Optional[Session] = None, config: Op return [o["Prefix"].replace(prefix, "").strip("/") for o in result.get("CommonPrefixes", [])] -def s3_list_folders(bucket_name: str, bucket_prefix: str, page_size: int = 100) -> List[str]: +def s3_list_folders(bucket_name: str, bucket_prefix: str, page_size: int = 100) -> list[str]: paginator = s3_client().get_paginator("list_objects") folders = [] iterator = paginator.paginate( @@ -656,7 +650,7 @@ def s3_get_size( def s3_upload_multipart_from_copy( - obj: Object, parts_keys: Sequence[str], executor_type: Type[ThreadPoolExecutor] = ThreadPoolExecutor, **kwargs + obj: Object, parts_keys: Sequence[str], executor_type: type[ThreadPoolExecutor] = ThreadPoolExecutor, **kwargs ): multipart_upload = obj.initiate_multipart_upload(**kwargs) @@ -889,7 +883,7 @@ async def _async_wrapper(*args, **kwargs): @dynamodb_retry_backoff() def get_items_batched( ddb_table_name: str, - keys: List[Dict[str, Any]], + keys: list[dict[str, Any]], client: Optional[DynamoDBClient] = None, session: Optional[Session] = None, config: Optional[Config] = None, @@ -905,12 +899,12 @@ def get_items_batched( def ddb_get_items( ddb_table_name: str, - keys: List[Dict[str, Any]], + keys: list[dict[str, Any]], client: Optional[DynamoDBClient] = None, session: Optional[Session] = None, config: Optional[Config] = None, **kwargs, -) -> List[Dict[str, Any]]: +) -> list[dict[str, Any]]: client = client or cast(DynamoDBClient, dynamodb(session=session, config=config).meta.client) result = [] remaining = keys @@ -1106,7 +1100,7 @@ async def async_stream_from_s3( _RE_CANCELLATION_REASONS = re.compile(r"^.+\[(\w+[^\]]*?)\]$") -def transaction_cancellation_reasons(err: ClientError) -> List[str]: +def transaction_cancellation_reasons(err: ClientError) -> list[str]: """ get cancellation reasons as strings .. e.g. ['None', 'ConditionalCheckFailed', 'None'] """ @@ -1121,7 +1115,7 @@ def transaction_cancellation_reasons(err: ClientError) -> List[str]: return [reason.strip() for reason in match.group(1).split(",")] -def transaction_cancelled_for_only_reasons(err: ClientError, *match_reason: str) -> List[str]: +def transaction_cancelled_for_only_reasons(err: ClientError, *match_reason: str) -> list[str]: """ returns all reasons ... if all reasons either match match_reason or 'None' """ @@ -1130,5 +1124,5 @@ def transaction_cancelled_for_only_reasons(err: ClientError, *match_reason: str) return reasons if all(reason in match_reasons for reason in reasons) else [] -def cancellation_reasons_if_conditional_check(err: ClientError) -> List[str]: +def cancellation_reasons_if_conditional_check(err: ClientError) -> list[str]: return transaction_cancelled_for_only_reasons(err, "ConditionalCheckFailed") diff --git a/nhs_aws_helpers/async_s3_object_writer.py b/nhs_aws_helpers/async_s3_object_writer.py index f68756a..7486c8f 100644 --- a/nhs_aws_helpers/async_s3_object_writer.py +++ b/nhs_aws_helpers/async_s3_object_writer.py @@ -1,6 +1,7 @@ import asyncio from asyncio import Task -from typing import Any, Final, Iterator, List, Mapping, Optional, Union +from collections.abc import Iterator, Mapping +from typing import Any, Final, Optional, Union from mypy_boto3_s3.service_resource import MultipartUpload, Object @@ -28,8 +29,8 @@ def __init__( self._encoding = encoding self._buffer = b"" self._bytes_written, self._position = (0, 0) - self._upload_tasks: List[Task] = [] - self._upload_errors: List[Exception] = [] + self._upload_tasks: list[Task] = [] + self._upload_errors: list[Exception] = [] self._buffer_size = buffer_size self._multipart_upload: Optional[MultipartUpload] = None self._name = name @@ -95,7 +96,7 @@ def read(self, num_bytes: int = ...) -> Union[str, bytes]: def readline(self, limit: int = ...) -> Union[str, bytes]: raise NotImplementedError - def readlines(self, hint: int = ...) -> List[Union[str, bytes]]: + def readlines(self, hint: int = ...) -> list[Union[str, bytes]]: raise NotImplementedError def seek(self, offset: int, whence: int = ...) -> int: @@ -107,7 +108,7 @@ def __next__(self) -> Union[str, bytes]: def __iter__(self) -> Iterator[Union[str, bytes]]: raise NotImplementedError - async def writelines(self, lines: List[Union[str, bytes]]) -> None: + async def writelines(self, lines: list[Union[str, bytes]]) -> None: for arg in lines: await self.write(arg) diff --git a/nhs_aws_helpers/dynamodb_model_store/base_model.py b/nhs_aws_helpers/dynamodb_model_store/base_model.py index c08523c..deccf7a 100644 --- a/nhs_aws_helpers/dynamodb_model_store/base_model.py +++ b/nhs_aws_helpers/dynamodb_model_store/base_model.py @@ -1,7 +1,8 @@ import inspect +from collections.abc import Mapping from dataclasses import fields, is_dataclass from functools import lru_cache -from typing import Any, Dict, Generic, List, Mapping, Tuple, Type, TypeVar, cast +from typing import Any, Generic, TypeVar, cast TModelKey = TypeVar("TModelKey", bound=Mapping[str, Any]) @@ -11,7 +12,7 @@ class serialised_property(property): class BaseModel(Generic[TModelKey]): - _model_key_type: Type[TModelKey] + _model_key_type: type[TModelKey] @serialised_property def model_type(self) -> str: @@ -21,7 +22,7 @@ def model_key(self) -> TModelKey: return cast(TModelKey, {k: getattr(self, k) for k in self.model_key_fields()}) @classmethod - def model_key_fields(cls) -> List[str]: + def model_key_fields(cls) -> list[str]: model_key_fields = _MODEL_KEY_FIELDS.get(cls._model_key_type) if not model_key_fields: model_key_fields = list(cls._model_key_type.__annotations__.keys()) @@ -31,16 +32,16 @@ def model_key_fields(cls) -> List[str]: return model_key_fields @classmethod - def model_key_from_item(cls, item: Dict[str, Any]) -> TModelKey: + def model_key_from_item(cls, item: dict[str, Any]) -> TModelKey: return cast(TModelKey, {k: item.get(k) for k in cls.model_key_fields()}) -_MODEL_KEY_FIELDS: Dict[type, List[str]] = {} +_MODEL_KEY_FIELDS: dict[type, list[str]] = {} @lru_cache -def model_properties_cache(model_type: Type[BaseModel]) -> List[Tuple[str, type, Mapping[str, Any]]]: - model_fields: List[Tuple[str, type, Mapping[str, Any]]] = [] +def model_properties_cache(model_type: type[BaseModel]) -> list[tuple[str, type, Mapping[str, Any]]]: + model_fields: list[tuple[str, type, Mapping[str, Any]]] = [] if is_dataclass(model_type): model_fields.extend([(field.name, field.type, field.metadata) for field in fields(model_type)]) diff --git a/nhs_aws_helpers/dynamodb_model_store/base_model_store.py b/nhs_aws_helpers/dynamodb_model_store/base_model_store.py index 9669729..a47c565 100644 --- a/nhs_aws_helpers/dynamodb_model_store/base_model_store.py +++ b/nhs_aws_helpers/dynamodb_model_store/base_model_store.py @@ -1,22 +1,16 @@ import asyncio import dataclasses import itertools +from collections.abc import AsyncGenerator, Mapping, Sequence from dataclasses import dataclass, fields, is_dataclass from datetime import date, datetime from enum import Enum from time import time from typing import ( Any, - AsyncGenerator, - Dict, Generic, - List, Literal, - Mapping, Optional, - Sequence, - Tuple, - Type, TypeVar, cast, get_args, @@ -54,8 +48,8 @@ @dataclass class PagedItems(Generic[TPageItem]): - items: List[TPageItem] - last_evaluated_key: Optional[Dict[str, Any]] + items: list[TPageItem] + last_evaluated_key: Optional[dict[str, Any]] def __post_init__(self): self.items = self.items or [] @@ -81,8 +75,8 @@ def __iadd__(self, other: "PagedItems") -> "PagedItems": class BaseModelStore(Generic[TBaseModel, TModelKey]): - _base_model_type: Type[TBaseModel] - _model_types: Dict[str, Type[TBaseModel]] = {} # noqa: RUF012 + _base_model_type: type[TBaseModel] + _model_types: dict[str, type[TBaseModel]] = {} # noqa: RUF012 def __new__(cls, *args, **kwargs): if ( @@ -108,7 +102,7 @@ def __init__( self._model_type_index_pk = model_type_index_pk @classmethod - def register_model_type(cls, model_type: Type[TBaseModel]): + def register_model_type(cls, model_type: type[TBaseModel]): cls._model_types[model_type.__name__] = model_type @property @@ -128,7 +122,7 @@ def client(self) -> DynamoDBClient: return self.service.meta.client @property - def table_key_fields(self) -> List[str]: + def table_key_fields(self) -> list[str]: return self._table_key_fields @classmethod @@ -182,13 +176,13 @@ def deserialise_value(cls, value_type: type, value: Any, **kwargs) -> Any: # no @classmethod def _before_deserialise_model( - cls, model_dict: Dict[str, Any], model_type: Type[TBaseModel], **kwargs - ) -> Dict[str, Any]: + cls, model_dict: dict[str, Any], model_type: type[TBaseModel], **kwargs + ) -> dict[str, Any]: return model_dict @classmethod def deserialise_model( - cls, model_dict: Dict[str, Any], model_type: Type[TBaseModel_co], **kwargs + cls, model_dict: dict[str, Any], model_type: type[TBaseModel_co], **kwargs ) -> Optional[TBaseModel_co]: if model_dict is None: return None @@ -196,11 +190,11 @@ def deserialise_model( if not is_dataclass(model_type): raise TypeError(f"type {model_type} is not a dataclass") - model_dict = cls._before_deserialise_model(model_dict, cast(Type[TBaseModel], model_type), **kwargs) + model_dict = cls._before_deserialise_model(model_dict, cast(type[TBaseModel], model_type), **kwargs) model_fields = fields(model_type) - deserialised: Dict[str, Any] = {} + deserialised: dict[str, Any] = {} for field in model_fields: value = model_dict.get(field.name) if value is None: @@ -251,7 +245,7 @@ def _serialise_field( return value @classmethod - def serialise_model(cls, model: Any, **kwargs) -> Optional[Dict[str, Any]]: + def serialise_model(cls, model: Any, **kwargs) -> Optional[dict[str, Any]]: if model is None: return None @@ -260,7 +254,7 @@ def serialise_model(cls, model: Any, **kwargs) -> Optional[Dict[str, Any]]: model_fields = model_properties_cache(model.__class__) - result: Dict[str, Any] = {} + result: dict[str, Any] = {} for field_name, field_type, metadata in model_fields: value = getattr(model, field_name) @@ -278,8 +272,8 @@ def serialise_model(cls, model: Any, **kwargs) -> Optional[Dict[str, Any]]: @dynamodb_retry_backoff() async def get_item_with_retry_info( self, key: TModelKey, **kwargs - ) -> Tuple[Optional[Dict[str, Any]], float, str, int]: - kwargs["Key"] = cast(Dict[str, str], key) + ) -> tuple[Optional[dict[str, Any]], float, str, int]: + kwargs["Key"] = cast(dict[str, str], key) started = time() response = await run_in_executor(self.table.get_item, **kwargs) @@ -288,19 +282,19 @@ async def get_item_with_retry_info( aws_request_id = response["ResponseMetadata"]["RequestId"] aws_retries = response["ResponseMetadata"]["RetryAttempts"] - item: Optional[Dict[str, Any]] = response.get("Item") + item: Optional[dict[str, Any]] = response.get("Item") if not item: return None, duration, aws_request_id, aws_retries return item, duration, aws_request_id, aws_retries - async def get_item(self, key: TModelKey, **kwargs) -> Optional[Dict[str, Any]]: + async def get_item(self, key: TModelKey, **kwargs) -> Optional[dict[str, Any]]: item, _, _, _ = await self.get_item_with_retry_info(key, **kwargs) return item async def get_model_with_retry_info( - self, key: TModelKey, model_type: Type[TBaseModel_co], **kwargs - ) -> Tuple[Optional[TBaseModel_co], float, str, int]: + self, key: TModelKey, model_type: type[TBaseModel_co], **kwargs + ) -> tuple[Optional[TBaseModel_co], float, str, int]: item, duration, aws_request_id, aws_retries = await self.get_item_with_retry_info(key, **kwargs) if not item: @@ -313,15 +307,15 @@ async def get_model_with_retry_info( aws_retries, ) - async def get_model(self, key: TModelKey, model_type: Type[TBaseModel_co], **kwargs) -> Optional[TBaseModel_co]: + async def get_model(self, key: TModelKey, model_type: type[TBaseModel_co], **kwargs) -> Optional[TBaseModel_co]: model, _, _, _ = await self.get_model_with_retry_info(key, model_type, **kwargs) return model async def transact_get_model( - self, key: TModelKey, model_type: Type[TBaseModel_co], **kwargs + self, key: TModelKey, model_type: type[TBaseModel_co], **kwargs ) -> Optional[TBaseModel_co]: - items = await self.transact_get_items(cast(List[TransactGetItemTypeDef], [{"Get": {"Key": key}}])) + items = await self.transact_get_items(cast(list[TransactGetItemTypeDef], [{"Get": {"Key": key}}])) if not items or not items[0]: return None @@ -331,7 +325,7 @@ async def transact_get_model( return cast(Optional[TBaseModel_co], self.deserialise_model(item, model_type, **kwargs)) @dynamodb_retry_backoff() - async def transact_get_items(self, get_items: Sequence[TransactGetItemTypeDef]) -> List[Optional[dict]]: + async def transact_get_items(self, get_items: Sequence[TransactGetItemTypeDef]) -> list[Optional[dict]]: get_items = list(get_items) for get_item in get_items: get_item["Get"]["TableName"] = self._table_name @@ -344,16 +338,16 @@ async def transact_get_items(self, get_items: Sequence[TransactGetItemTypeDef]) items = [resp.get("Item", None) for resp in responses] return items - def _model_key_tuple(self, key_or_item: Mapping[str, Any]) -> Tuple[str, ...]: + def _model_key_tuple(self, key_or_item: Mapping[str, Any]) -> tuple[str, ...]: return tuple(key_or_item[field] for field in self._base_model_type.model_key_fields()) - async def transact_get_models(self, keys: Sequence[TModelKey], **kwargs) -> List[Optional[TBaseModel]]: + async def transact_get_models(self, keys: Sequence[TModelKey], **kwargs) -> list[Optional[TBaseModel]]: keys = list(keys) key_indexes = {self._model_key_tuple(key): ix for ix, key in enumerate(keys)} records = await self.transact_get_items([cast(TransactGetItemTypeDef, {"Get": {"Key": key}}) for key in keys]) - models: List[Tuple[Tuple[str, ...], TBaseModel]] = [ + models: list[tuple[tuple[str, ...], TBaseModel]] = [ ( self._model_key_tuple(record), cast(TBaseModel, self.deserialise_model(record, self._model_types[record["model_type"]], **kwargs)), @@ -361,7 +355,7 @@ async def transact_get_models(self, keys: Sequence[TModelKey], **kwargs) -> List for record in records if record ] - results: List[Optional[TBaseModel]] = [None for _ in range(len(keys))] + results: list[Optional[TBaseModel]] = [None for _ in range(len(keys))] unexpected = [] @@ -378,7 +372,7 @@ async def transact_get_models(self, keys: Sequence[TModelKey], **kwargs) -> List return results @dynamodb_retry_backoff() - async def put_item(self, item: Dict[str, Any], **kwargs): + async def put_item(self, item: dict[str, Any], **kwargs): kwargs["Item"] = item await run_in_executor(self.table.put_item, **kwargs) @@ -389,7 +383,7 @@ async def put_model(self, model: TBaseModel, **kwargs): await self.put_item(item, **kwargs) @dynamodb_retry_backoff() - async def put_item_if_not_exists(self, item: Dict[str, Any], **kwargs) -> bool: + async def put_item_if_not_exists(self, item: dict[str, Any], **kwargs) -> bool: try: await self.put_item(item, ConditionExpression=Attr(self._partition_key).not_exists(), **kwargs) return True @@ -421,7 +415,7 @@ async def item_exists(self, key: TModelKey, consistent_read: bool = False, **kwa @dynamodb_retry_backoff() async def delete_item(self, key: TModelKey, **kwargs): - await run_in_executor(self.table.delete_item, Key=cast(Dict[str, Any], key), **kwargs) + await run_in_executor(self.table.delete_item, Key=cast(dict[str, Any], key), **kwargs) @dynamodb_retry_backoff() async def paginate( @@ -460,7 +454,7 @@ async def query(self, **kwargs) -> QueryOutputTableTypeDef: async def query_items(self, **kwargs) -> PagedItems[dict]: page = await self.query(**kwargs) - return PagedItems(page.get("Items", []), cast(Optional[Dict[str, Any]], page.get("LastEvaluatedKey", None))) + return PagedItems(page.get("Items", []), cast(Optional[dict[str, Any]], page.get("LastEvaluatedKey", None))) @dynamodb_retry_backoff() async def query_count(self, **kwargs) -> int: @@ -475,13 +469,13 @@ async def query_count(self, **kwargs) -> int: async def transact_write_items(self, transact_items: list, **kwargs): return await run_in_executor(self.client.transact_write_items, TransactItems=transact_items, **kwargs) - def _prepare_transaction(self, actions: List[Dict[str, Any]], table_name: str, **kwargs): + def _prepare_transaction(self, actions: list[dict[str, Any]], table_name: str, **kwargs): transact_items = [] for action in actions: for operation, item in action.items(): assert operation in ("Put", "Update", "Delete", "ConditionCheck"), f"unexpected_operation: {operation}" serialised = self.serialise_value(item, **kwargs) - content: Dict[str, Any] = {"TableName": table_name} + content: dict[str, Any] = {"TableName": table_name} if operation == "Put" and is_dataclass_instance(item): content["Item"] = serialised else: @@ -490,15 +484,15 @@ def _prepare_transaction(self, actions: List[Dict[str, Any]], table_name: str, * transact_items.append({operation: content}) return transact_items - async def transact_write(self, actions: List[Dict[str, Any]]): + async def transact_write(self, actions: list[dict[str, Any]]): transaction = self._prepare_transaction(actions=actions, table_name=self._table_name) return await self.transact_write_items(transaction) @dynamodb_retry_backoff() async def update_item_with_retry_info( self, key: TModelKey, **kwargs - ) -> Tuple[UpdateItemOutputTableTypeDef, float, str, int]: - kwargs["Key"] = cast(Dict[str, str], key) + ) -> tuple[UpdateItemOutputTableTypeDef, float, str, int]: + kwargs["Key"] = cast(dict[str, str], key) started = time() response = await run_in_executor(self.table.update_item, **kwargs) @@ -519,7 +513,7 @@ def batch_writer(self, flush_amount: int = 25) -> "_AsyncBatchWriter": flush_amount=flush_amount, ) - async def query_all_items(self, max_items: int = 0, **kwargs) -> List[dict]: + async def query_all_items(self, max_items: int = 0, **kwargs) -> list[dict]: result = [] async for items, _ in self.paginate_items("query", **kwargs): @@ -529,7 +523,7 @@ async def query_all_items(self, max_items: int = 0, **kwargs) -> List[dict]: return result - async def get_all_model_keys(self, model_type: Type[TBaseModel_co], max_keys: int = 0) -> List[TModelKey]: + async def get_all_model_keys(self, model_type: type[TBaseModel_co], max_keys: int = 0) -> list[TModelKey]: assert self._model_type_index_name assert self._model_type_index_pk results = await self.query_all_items( @@ -540,8 +534,8 @@ async def get_all_model_keys(self, model_type: Type[TBaseModel_co], max_keys: in return [model_type.model_key_from_item(res) for res in results] async def get_all_models( - self, model_type: Type[TBaseModel_co], max_concurrency=10, max_models: int = 0 - ) -> List[TBaseModel_co]: + self, model_type: type[TBaseModel_co], max_concurrency=10, max_models: int = 0 + ) -> list[TBaseModel_co]: model_keys = await self.get_all_model_keys(model_type=model_type, max_keys=max_models) return [ cast(TBaseModel_co, record) @@ -552,7 +546,7 @@ async def get_all_models( async def paginate_models( self, paginator_type: Literal["query", "scan", "list_backups", "list_tables"], - model_type: Type[TBaseModel_co], + model_type: type[TBaseModel_co], **kwargs, ) -> AsyncGenerator[PagedItems[TBaseModel_co], None]: async for items, last_evaluated_key in self.paginate_items(paginator_type, **kwargs): @@ -564,7 +558,7 @@ async def paginate_models( async def paginate_models_from_index( self, paginator_type: Literal["query", "scan", "list_backups", "list_tables"], - model_type: Type[TBaseModel_co], + model_type: type[TBaseModel_co], index_name: str, **kwargs, ) -> AsyncGenerator[PagedItems[TBaseModel_co], None]: @@ -576,14 +570,14 @@ async def paginate_models_from_index( last_evaluated_key=last_evaluated_key, ) - async def query_models(self, model_type: Type[TBaseModel_co], **kwargs) -> PagedItems[TBaseModel_co]: + async def query_models(self, model_type: type[TBaseModel_co], **kwargs) -> PagedItems[TBaseModel_co]: items, last_evaluated_key = await self.query_items(**kwargs) return PagedItems( items=[cast(TBaseModel_co, self.deserialise_model(item, model_type, **kwargs)) for item in items], last_evaluated_key=last_evaluated_key, ) - async def query_all_models(self, model_type: Type[TBaseModel_co], **kwargs) -> List[TBaseModel_co]: + async def query_all_models(self, model_type: type[TBaseModel_co], **kwargs) -> list[TBaseModel_co]: result = [] async for models, _ in self.paginate_models("query", model_type, **kwargs): @@ -592,16 +586,16 @@ async def query_all_models(self, model_type: Type[TBaseModel_co], **kwargs) -> L def _get_batch_results( self, response: BatchGetItemOutputServiceResourceTypeDef - ) -> Tuple[List[Dict[str, Any]], List[TModelKey]]: + ) -> tuple[list[dict[str, Any]], list[TModelKey]]: assert response["ResponseMetadata"]["HTTPStatusCode"] == 200 - results: List[Dict[str, Any]] = response.get("Responses", {}).get(self._table_name) or [] - unprocessed_keys: Dict[str, Any] = response.get("UnprocessedKeys", {}) - unprocessed = cast(List[TModelKey], unprocessed_keys.get(self._table_name, {}).get("Keys") or []) + results: list[dict[str, Any]] = response.get("Responses", {}).get(self._table_name) or [] + unprocessed_keys: dict[str, Any] = response.get("UnprocessedKeys", {}) + unprocessed = cast(list[TModelKey], unprocessed_keys.get(self._table_name, {}).get("Keys") or []) return results, unprocessed @dynamodb_retry_backoff() - async def _get_batch(self, keys: List[TModelKey], **kwargs) -> Tuple[List[Dict[str, Any]], List[TModelKey]]: + async def _get_batch(self, keys: list[TModelKey], **kwargs) -> tuple[list[dict[str, Any]], list[TModelKey]]: if not keys: return [], [] @@ -611,7 +605,7 @@ async def _get_batch(self, keys: List[TModelKey], **kwargs) -> Tuple[List[Dict[s response = await run_in_executor(self.service.batch_get_item, RequestItems={self._table_name: request}) return self._get_batch_results(response) - async def batch_get_item(self, keys: List[TModelKey], max_concurrency: int = 10, **kwargs) -> List[Dict[str, Any]]: + async def batch_get_item(self, keys: list[TModelKey], max_concurrency: int = 10, **kwargs) -> list[dict[str, Any]]: def _chunk(it, size): it = iter(it) return iter(lambda: tuple(itertools.islice(it, size)), ()) @@ -636,13 +630,13 @@ def _chunk(it, size): async def batch_get_item_ordered( self, keys: Sequence[TModelKey], max_concurrency: int = 10, **kwargs - ) -> List[Optional[dict]]: + ) -> list[Optional[dict]]: keys = list(keys) - key_indexes: Dict[Tuple[str, ...], int] = {self._model_key_tuple(key): ix for ix, key in enumerate(keys)} + key_indexes: dict[tuple[str, ...], int] = {self._model_key_tuple(key): ix for ix, key in enumerate(keys)} records = await self.batch_get_item(keys, max_concurrency=max_concurrency, **kwargs) - results: List[Optional[dict]] = [None for _ in range(len(keys))] + results: list[Optional[dict]] = [None for _ in range(len(keys))] unexpected = [] @@ -661,10 +655,10 @@ async def batch_get_item_ordered( async def batch_get_model( self, keys: Sequence[TModelKey], max_concurrency: int = 10, **kwargs - ) -> List[Optional[TBaseModel]]: + ) -> list[Optional[TBaseModel]]: ordered = await self.batch_get_item_ordered(keys, max_concurrency=max_concurrency) - models: List[Optional[TBaseModel]] = [ + models: list[Optional[TBaseModel]] = [ ( cast(TBaseModel, self.deserialise_model(record, self._model_types[record["model_type"]], **kwargs)) if record @@ -685,7 +679,7 @@ def __init__(self, store: BaseModelStore, flush_amount=25): self._store = store self._table_name = store.table.table_name self._client = store.client - self._items_buffer: List[WriteRequestOutputTypeDef] = [] + self._items_buffer: list[WriteRequestOutputTypeDef] = [] self._flush_amount = flush_amount self._overwrite_by_keys = store.table_key_fields diff --git a/nhs_aws_helpers/fixtures.py b/nhs_aws_helpers/fixtures.py index 0328150..14dad6d 100644 --- a/nhs_aws_helpers/fixtures.py +++ b/nhs_aws_helpers/fixtures.py @@ -1,5 +1,6 @@ import json -from typing import Any, Dict, Generator, Tuple +from collections.abc import Generator +from typing import Any import petname # type: ignore[import] import pytest @@ -90,11 +91,11 @@ def temp_versioned_s3_bucket_fixture(session_temp_s3_bucket: Bucket) -> Bucket: @pytest.fixture(name="temp_event_bus") -def temp_event_bus_fixture() -> Generator[Tuple[Queue, str], None, None]: +def temp_event_bus_fixture() -> Generator[tuple[Queue, str], None, None]: """ creates a temporary event bus and a Queue to listen to the event bus Returns: - Tuple[Queue, str]: the listening queue and event bus name + tuple[Queue, str]: the listening queue and event bus name """ events = events_client() sqs = sqs_resource() @@ -181,7 +182,7 @@ def clone_schema(table, on_demand_billing_mode: bool = True, provisioned_capacit } if on_demand_billing_mode: provisioned_capacity = 0 - billing: Dict[str, Any] = ( + billing: dict[str, Any] = ( { "BillingMode": "PAY_PER_REQUEST", } diff --git a/nhs_aws_helpers/s3_object_reader.py b/nhs_aws_helpers/s3_object_reader.py index 47a3126..ff64baa 100644 --- a/nhs_aws_helpers/s3_object_reader.py +++ b/nhs_aws_helpers/s3_object_reader.py @@ -1,6 +1,7 @@ import sys +from collections.abc import Iterable from io import SEEK_CUR, SEEK_END, SEEK_SET -from typing import IO, Any, Final, Iterable, Optional, Union, cast +from typing import IO, Any, Final, Optional, Union, cast from botocore.response import StreamingBody from mypy_boto3_s3.service_resource import Object diff --git a/nhs_aws_helpers/s3_object_writer.py b/nhs_aws_helpers/s3_object_writer.py index fba3419..94d383d 100644 --- a/nhs_aws_helpers/s3_object_writer.py +++ b/nhs_aws_helpers/s3_object_writer.py @@ -1,14 +1,10 @@ +from collections.abc import Iterable, Iterator, Mapping from concurrent.futures import Future, ThreadPoolExecutor from typing import ( IO, Any, AnyStr, - Dict, Final, - Iterable, - Iterator, - List, - Mapping, Optional, Union, ) @@ -39,10 +35,10 @@ def __init__( self._encoding = encoding self._buffer = b"" self._bytes_written, self._position = (0, 0) - self._parts: List[Dict[str, int]] = [] - self._upload_tasks: List[Future] = [] + self._parts: list[dict[str, int]] = [] + self._upload_tasks: list[Future] = [] self._thread_pool: Optional[ThreadPoolExecutor] = None - self._upload_errors: List[Exception] = [] + self._upload_errors: list[Exception] = [] self._buffer_size = buffer_size self._multipart_upload: Optional[MultipartUpload] = None self._max_multipart_concurrency = max_multipart_concurrency @@ -67,7 +63,7 @@ def read(self, n: int = ...) -> Union[str, bytes]: def readline(self, limit: int = ...) -> Union[str, bytes]: raise NotImplementedError - def readlines(self, hint: int = ...) -> List[Union[str, bytes]]: + def readlines(self, hint: int = ...) -> list[Union[str, bytes]]: raise NotImplementedError def seek(self, offset: int, whence: int = ...) -> int: diff --git a/poetry.lock b/poetry.lock index c490149..babc5ef 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,16 +1,5 @@ # This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. -[[package]] -name = "appnope" -version = "0.1.4" -description = "Disable App Nap on macOS >= 10.9" -optional = false -python-versions = ">=3.6" -files = [ - {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, - {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, -] - [[package]] name = "asttokens" version = "3.0.0" @@ -26,46 +15,35 @@ files = [ astroid = ["astroid (>=2,<4)"] test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -optional = false -python-versions = "*" -files = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, -] - [[package]] name = "black" -version = "24.8.0" +version = "24.10.0" description = "The uncompromising code formatter." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "black-24.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09cdeb74d494ec023ded657f7092ba518e8cf78fa8386155e4a03fdcc44679e6"}, - {file = "black-24.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81c6742da39f33b08e791da38410f32e27d632260e599df7245cccee2064afeb"}, - {file = "black-24.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:707a1ca89221bc8a1a64fb5e15ef39cd755633daa672a9db7498d1c19de66a42"}, - {file = "black-24.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d6417535d99c37cee4091a2f24eb2b6d5ec42b144d50f1f2e436d9fe1916fe1a"}, - {file = "black-24.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fb6e2c0b86bbd43dee042e48059c9ad7830abd5c94b0bc518c0eeec57c3eddc1"}, - {file = "black-24.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:837fd281f1908d0076844bc2b801ad2d369c78c45cf800cad7b61686051041af"}, - {file = "black-24.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62e8730977f0b77998029da7971fa896ceefa2c4c4933fcd593fa599ecbf97a4"}, - {file = "black-24.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:72901b4913cbac8972ad911dc4098d5753704d1f3c56e44ae8dce99eecb0e3af"}, - {file = "black-24.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7c046c1d1eeb7aea9335da62472481d3bbf3fd986e093cffd35f4385c94ae368"}, - {file = "black-24.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:649f6d84ccbae73ab767e206772cc2d7a393a001070a4c814a546afd0d423aed"}, - {file = "black-24.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b59b250fdba5f9a9cd9d0ece6e6d993d91ce877d121d161e4698af3eb9c1018"}, - {file = "black-24.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:6e55d30d44bed36593c3163b9bc63bf58b3b30e4611e4d88a0c3c239930ed5b2"}, - {file = "black-24.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:505289f17ceda596658ae81b61ebbe2d9b25aa78067035184ed0a9d855d18afd"}, - {file = "black-24.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b19c9ad992c7883ad84c9b22aaa73562a16b819c1d8db7a1a1a49fb7ec13c7d2"}, - {file = "black-24.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f13f7f386f86f8121d76599114bb8c17b69d962137fc70efe56137727c7047e"}, - {file = "black-24.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:f490dbd59680d809ca31efdae20e634f3fae27fba3ce0ba3208333b713bc3920"}, - {file = "black-24.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eab4dd44ce80dea27dc69db40dab62d4ca96112f87996bca68cd75639aeb2e4c"}, - {file = "black-24.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3c4285573d4897a7610054af5a890bde7c65cb466040c5f0c8b732812d7f0e5e"}, - {file = "black-24.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e84e33b37be070ba135176c123ae52a51f82306def9f7d063ee302ecab2cf47"}, - {file = "black-24.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:73bbf84ed136e45d451a260c6b73ed674652f90a2b3211d6a35e78054563a9bb"}, - {file = "black-24.8.0-py3-none-any.whl", hash = "sha256:972085c618ee94f402da1af548a4f218c754ea7e5dc70acb168bfaca4c2542ed"}, - {file = "black-24.8.0.tar.gz", hash = "sha256:2500945420b6784c38b9ee885af039f5e7471ef284ab03fa35ecdde4688cd83f"}, + {file = "black-24.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812"}, + {file = "black-24.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea"}, + {file = "black-24.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:649fff99a20bd06c6f727d2a27f401331dc0cc861fb69cde910fe95b01b5928f"}, + {file = "black-24.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:fe4d6476887de70546212c99ac9bd803d90b42fc4767f058a0baa895013fbb3e"}, + {file = "black-24.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5a2221696a8224e335c28816a9d331a6c2ae15a2ee34ec857dcf3e45dbfa99ad"}, + {file = "black-24.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9da3333530dbcecc1be13e69c250ed8dfa67f43c4005fb537bb426e19200d50"}, + {file = "black-24.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4007b1393d902b48b36958a216c20c4482f601569d19ed1df294a496eb366392"}, + {file = "black-24.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:394d4ddc64782e51153eadcaaca95144ac4c35e27ef9b0a42e121ae7e57a9175"}, + {file = "black-24.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5e39e0fae001df40f95bd8cc36b9165c5e2ea88900167bddf258bacef9bbdc3"}, + {file = "black-24.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65"}, + {file = "black-24.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14b3502784f09ce2443830e3133dacf2c0110d45191ed470ecb04d0f5f6fcb0f"}, + {file = "black-24.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:30d2c30dc5139211dda799758559d1b049f7f14c580c409d6ad925b74a4208a8"}, + {file = "black-24.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cbacacb19e922a1d75ef2b6ccaefcd6e93a2c05ede32f06a21386a04cedb981"}, + {file = "black-24.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f93102e0c5bb3907451063e08b9876dbeac810e7da5a8bfb7aeb5a9ef89066b"}, + {file = "black-24.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddacb691cdcdf77b96f549cf9591701d8db36b2f19519373d60d31746068dbf2"}, + {file = "black-24.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:680359d932801c76d2e9c9068d05c6b107f2584b2a5b88831c83962eb9984c1b"}, + {file = "black-24.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:17374989640fbca88b6a448129cd1745c5eb8d9547b464f281b251dd00155ccd"}, + {file = "black-24.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:63f626344343083322233f175aaf372d326de8436f5928c042639a4afbbf1d3f"}, + {file = "black-24.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfa1d0cb6200857f1923b602f978386a3a2758a65b52e0950299ea014be6800"}, + {file = "black-24.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:2cd9c95431d94adc56600710f8813ee27eea544dd118d45896bb734e9d7a0dc7"}, + {file = "black-24.10.0-py3-none-any.whl", hash = "sha256:3bb2b7a1f7b685f85b11fed1ef10f8a9148bceb49853e47a294a3dd963c1dd7d"}, + {file = "black-24.10.0.tar.gz", hash = "sha256:846ea64c97afe3bc677b761787993be4991810ecc7a4a937816dd6bddedc4875"}, ] [package.dependencies] @@ -79,479 +57,478 @@ typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +d = ["aiohttp (>=3.10)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "boto3" -version = "1.35.95" +version = "1.38.15" description = "The AWS SDK for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "boto3-1.35.95-py3-none-any.whl", hash = "sha256:c81223488607457dacb7829ee0c99803c664593b34a2b0f86c71d421e7c3469a"}, - {file = "boto3-1.35.95.tar.gz", hash = "sha256:d5671226819f6a78e31b1f37bd60f194afb8203254a543d06bdfb76de7d79236"}, + {file = "boto3-1.38.15-py3-none-any.whl", hash = "sha256:f2239b8c2816dd03a2a97297d33d5f7899f23be3a261db9a09ca691c32b7ddc2"}, + {file = "boto3-1.38.15.tar.gz", hash = "sha256:dca60f7a3ead91c05cf471f7750e54d63b92bfc0e61fa122e2e3f5140e020a8d"}, ] [package.dependencies] -botocore = ">=1.35.95,<1.36.0" +botocore = ">=1.38.15,<1.39.0" jmespath = ">=0.7.1,<2.0.0" -s3transfer = ">=0.10.0,<0.11.0" +s3transfer = ">=0.12.0,<0.13.0" [package.extras] crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "boto3-stubs" -version = "1.35.93" -description = "Type annotations for boto3 1.35.93 generated with mypy-boto3-builder 8.7.1" +version = "1.38.15" +description = "Type annotations for boto3 1.38.15 generated with mypy-boto3-builder 8.11.0" optional = false python-versions = ">=3.8" files = [ - {file = "boto3_stubs-1.35.93-py3-none-any.whl", hash = "sha256:86d1f4e49df51ff84ae258f718de20cfa3b4c108e7cff33b4a9ee5694a43d66a"}, - {file = "boto3_stubs-1.35.93.tar.gz", hash = "sha256:98202c8a9ba48a3b6e434a9cf9de4992d7cc93ee505f1fc481c57cd9c801623d"}, + {file = "boto3_stubs-1.38.15-py3-none-any.whl", hash = "sha256:b4c28839868f4a6b6d1004b2993f6054e33bc2c635eb6dd170ce93bb75842f4f"}, + {file = "boto3_stubs-1.38.15.tar.gz", hash = "sha256:0be0b5857d080de92c6b40b35950c62224c50858b26a530cdebfad9802cd467f"}, ] [package.dependencies] botocore-stubs = "*" -mypy-boto3-athena = {version = ">=1.35.0,<1.36.0", optional = true, markers = "extra == \"athena\""} -mypy-boto3-dynamodb = {version = ">=1.35.0,<1.36.0", optional = true, markers = "extra == \"dynamodb\""} -mypy-boto3-events = {version = ">=1.35.0,<1.36.0", optional = true, markers = "extra == \"events\""} -mypy-boto3-firehose = {version = ">=1.35.0,<1.36.0", optional = true, markers = "extra == \"firehose\""} -mypy-boto3-kms = {version = ">=1.35.0,<1.36.0", optional = true, markers = "extra == \"kms\""} -mypy-boto3-lambda = {version = ">=1.35.0,<1.36.0", optional = true, markers = "extra == \"lambda\""} -mypy-boto3-logs = {version = ">=1.35.0,<1.36.0", optional = true, markers = "extra == \"logs\""} -mypy-boto3-s3 = {version = ">=1.35.0,<1.36.0", optional = true, markers = "extra == \"s3\""} -mypy-boto3-secretsmanager = {version = ">=1.35.0,<1.36.0", optional = true, markers = "extra == \"secretsmanager\""} -mypy-boto3-ses = {version = ">=1.35.0,<1.36.0", optional = true, markers = "extra == \"ses\""} -mypy-boto3-sns = {version = ">=1.35.0,<1.36.0", optional = true, markers = "extra == \"sns\""} -mypy-boto3-sqs = {version = ">=1.35.0,<1.36.0", optional = true, markers = "extra == \"sqs\""} -mypy-boto3-ssm = {version = ">=1.35.0,<1.36.0", optional = true, markers = "extra == \"ssm\""} -mypy-boto3-stepfunctions = {version = ">=1.35.0,<1.36.0", optional = true, markers = "extra == \"stepfunctions\""} +mypy-boto3-athena = {version = ">=1.38.0,<1.39.0", optional = true, markers = "extra == \"athena\""} +mypy-boto3-dynamodb = {version = ">=1.38.0,<1.39.0", optional = true, markers = "extra == \"dynamodb\""} +mypy-boto3-events = {version = ">=1.38.0,<1.39.0", optional = true, markers = "extra == \"events\""} +mypy-boto3-firehose = {version = ">=1.38.0,<1.39.0", optional = true, markers = "extra == \"firehose\""} +mypy-boto3-kms = {version = ">=1.38.0,<1.39.0", optional = true, markers = "extra == \"kms\""} +mypy-boto3-lambda = {version = ">=1.38.0,<1.39.0", optional = true, markers = "extra == \"lambda\""} +mypy-boto3-logs = {version = ">=1.38.0,<1.39.0", optional = true, markers = "extra == \"logs\""} +mypy-boto3-s3 = {version = ">=1.38.0,<1.39.0", optional = true, markers = "extra == \"s3\""} +mypy-boto3-secretsmanager = {version = ">=1.38.0,<1.39.0", optional = true, markers = "extra == \"secretsmanager\""} +mypy-boto3-ses = {version = ">=1.38.0,<1.39.0", optional = true, markers = "extra == \"ses\""} +mypy-boto3-sns = {version = ">=1.38.0,<1.39.0", optional = true, markers = "extra == \"sns\""} +mypy-boto3-sqs = {version = ">=1.38.0,<1.39.0", optional = true, markers = "extra == \"sqs\""} +mypy-boto3-ssm = {version = ">=1.38.0,<1.39.0", optional = true, markers = "extra == \"ssm\""} +mypy-boto3-stepfunctions = {version = ">=1.38.0,<1.39.0", optional = true, markers = "extra == \"stepfunctions\""} types-s3transfer = "*" typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} [package.extras] -accessanalyzer = ["mypy-boto3-accessanalyzer (>=1.35.0,<1.36.0)"] -account = ["mypy-boto3-account (>=1.35.0,<1.36.0)"] -acm = ["mypy-boto3-acm (>=1.35.0,<1.36.0)"] -acm-pca = ["mypy-boto3-acm-pca (>=1.35.0,<1.36.0)"] -all = ["mypy-boto3-accessanalyzer (>=1.35.0,<1.36.0)", "mypy-boto3-account (>=1.35.0,<1.36.0)", "mypy-boto3-acm (>=1.35.0,<1.36.0)", "mypy-boto3-acm-pca (>=1.35.0,<1.36.0)", "mypy-boto3-amp (>=1.35.0,<1.36.0)", "mypy-boto3-amplify (>=1.35.0,<1.36.0)", "mypy-boto3-amplifybackend (>=1.35.0,<1.36.0)", "mypy-boto3-amplifyuibuilder (>=1.35.0,<1.36.0)", "mypy-boto3-apigateway (>=1.35.0,<1.36.0)", "mypy-boto3-apigatewaymanagementapi (>=1.35.0,<1.36.0)", "mypy-boto3-apigatewayv2 (>=1.35.0,<1.36.0)", "mypy-boto3-appconfig (>=1.35.0,<1.36.0)", "mypy-boto3-appconfigdata (>=1.35.0,<1.36.0)", "mypy-boto3-appfabric (>=1.35.0,<1.36.0)", "mypy-boto3-appflow (>=1.35.0,<1.36.0)", "mypy-boto3-appintegrations (>=1.35.0,<1.36.0)", "mypy-boto3-application-autoscaling (>=1.35.0,<1.36.0)", "mypy-boto3-application-insights (>=1.35.0,<1.36.0)", "mypy-boto3-application-signals (>=1.35.0,<1.36.0)", "mypy-boto3-applicationcostprofiler (>=1.35.0,<1.36.0)", "mypy-boto3-appmesh (>=1.35.0,<1.36.0)", "mypy-boto3-apprunner (>=1.35.0,<1.36.0)", "mypy-boto3-appstream (>=1.35.0,<1.36.0)", "mypy-boto3-appsync (>=1.35.0,<1.36.0)", "mypy-boto3-apptest (>=1.35.0,<1.36.0)", "mypy-boto3-arc-zonal-shift (>=1.35.0,<1.36.0)", "mypy-boto3-artifact (>=1.35.0,<1.36.0)", "mypy-boto3-athena (>=1.35.0,<1.36.0)", "mypy-boto3-auditmanager (>=1.35.0,<1.36.0)", "mypy-boto3-autoscaling (>=1.35.0,<1.36.0)", "mypy-boto3-autoscaling-plans (>=1.35.0,<1.36.0)", "mypy-boto3-b2bi (>=1.35.0,<1.36.0)", "mypy-boto3-backup (>=1.35.0,<1.36.0)", "mypy-boto3-backup-gateway (>=1.35.0,<1.36.0)", "mypy-boto3-backupsearch (>=1.35.0,<1.36.0)", "mypy-boto3-batch (>=1.35.0,<1.36.0)", "mypy-boto3-bcm-data-exports (>=1.35.0,<1.36.0)", "mypy-boto3-bcm-pricing-calculator (>=1.35.0,<1.36.0)", "mypy-boto3-bedrock (>=1.35.0,<1.36.0)", "mypy-boto3-bedrock-agent (>=1.35.0,<1.36.0)", "mypy-boto3-bedrock-agent-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-bedrock-data-automation (>=1.35.0,<1.36.0)", "mypy-boto3-bedrock-data-automation-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-bedrock-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-billing (>=1.35.0,<1.36.0)", "mypy-boto3-billingconductor (>=1.35.0,<1.36.0)", "mypy-boto3-braket (>=1.35.0,<1.36.0)", "mypy-boto3-budgets (>=1.35.0,<1.36.0)", "mypy-boto3-ce (>=1.35.0,<1.36.0)", "mypy-boto3-chatbot (>=1.35.0,<1.36.0)", "mypy-boto3-chime (>=1.35.0,<1.36.0)", "mypy-boto3-chime-sdk-identity (>=1.35.0,<1.36.0)", "mypy-boto3-chime-sdk-media-pipelines (>=1.35.0,<1.36.0)", "mypy-boto3-chime-sdk-meetings (>=1.35.0,<1.36.0)", "mypy-boto3-chime-sdk-messaging (>=1.35.0,<1.36.0)", "mypy-boto3-chime-sdk-voice (>=1.35.0,<1.36.0)", "mypy-boto3-cleanrooms (>=1.35.0,<1.36.0)", "mypy-boto3-cleanroomsml (>=1.35.0,<1.36.0)", "mypy-boto3-cloud9 (>=1.35.0,<1.36.0)", "mypy-boto3-cloudcontrol (>=1.35.0,<1.36.0)", "mypy-boto3-clouddirectory (>=1.35.0,<1.36.0)", "mypy-boto3-cloudformation (>=1.35.0,<1.36.0)", "mypy-boto3-cloudfront (>=1.35.0,<1.36.0)", "mypy-boto3-cloudfront-keyvaluestore (>=1.35.0,<1.36.0)", "mypy-boto3-cloudhsm (>=1.35.0,<1.36.0)", "mypy-boto3-cloudhsmv2 (>=1.35.0,<1.36.0)", "mypy-boto3-cloudsearch (>=1.35.0,<1.36.0)", "mypy-boto3-cloudsearchdomain (>=1.35.0,<1.36.0)", "mypy-boto3-cloudtrail (>=1.35.0,<1.36.0)", "mypy-boto3-cloudtrail-data (>=1.35.0,<1.36.0)", "mypy-boto3-cloudwatch (>=1.35.0,<1.36.0)", "mypy-boto3-codeartifact (>=1.35.0,<1.36.0)", "mypy-boto3-codebuild (>=1.35.0,<1.36.0)", "mypy-boto3-codecatalyst (>=1.35.0,<1.36.0)", "mypy-boto3-codecommit (>=1.35.0,<1.36.0)", "mypy-boto3-codeconnections (>=1.35.0,<1.36.0)", "mypy-boto3-codedeploy (>=1.35.0,<1.36.0)", "mypy-boto3-codeguru-reviewer (>=1.35.0,<1.36.0)", "mypy-boto3-codeguru-security (>=1.35.0,<1.36.0)", "mypy-boto3-codeguruprofiler (>=1.35.0,<1.36.0)", "mypy-boto3-codepipeline (>=1.35.0,<1.36.0)", "mypy-boto3-codestar-connections (>=1.35.0,<1.36.0)", "mypy-boto3-codestar-notifications (>=1.35.0,<1.36.0)", "mypy-boto3-cognito-identity (>=1.35.0,<1.36.0)", "mypy-boto3-cognito-idp (>=1.35.0,<1.36.0)", "mypy-boto3-cognito-sync (>=1.35.0,<1.36.0)", "mypy-boto3-comprehend (>=1.35.0,<1.36.0)", "mypy-boto3-comprehendmedical (>=1.35.0,<1.36.0)", "mypy-boto3-compute-optimizer (>=1.35.0,<1.36.0)", "mypy-boto3-config (>=1.35.0,<1.36.0)", "mypy-boto3-connect (>=1.35.0,<1.36.0)", "mypy-boto3-connect-contact-lens (>=1.35.0,<1.36.0)", "mypy-boto3-connectcampaigns (>=1.35.0,<1.36.0)", "mypy-boto3-connectcampaignsv2 (>=1.35.0,<1.36.0)", "mypy-boto3-connectcases (>=1.35.0,<1.36.0)", "mypy-boto3-connectparticipant (>=1.35.0,<1.36.0)", "mypy-boto3-controlcatalog (>=1.35.0,<1.36.0)", "mypy-boto3-controltower (>=1.35.0,<1.36.0)", "mypy-boto3-cost-optimization-hub (>=1.35.0,<1.36.0)", "mypy-boto3-cur (>=1.35.0,<1.36.0)", "mypy-boto3-customer-profiles (>=1.35.0,<1.36.0)", "mypy-boto3-databrew (>=1.35.0,<1.36.0)", "mypy-boto3-dataexchange (>=1.35.0,<1.36.0)", "mypy-boto3-datapipeline (>=1.35.0,<1.36.0)", "mypy-boto3-datasync (>=1.35.0,<1.36.0)", "mypy-boto3-datazone (>=1.35.0,<1.36.0)", "mypy-boto3-dax (>=1.35.0,<1.36.0)", "mypy-boto3-deadline (>=1.35.0,<1.36.0)", "mypy-boto3-detective (>=1.35.0,<1.36.0)", "mypy-boto3-devicefarm (>=1.35.0,<1.36.0)", "mypy-boto3-devops-guru (>=1.35.0,<1.36.0)", "mypy-boto3-directconnect (>=1.35.0,<1.36.0)", "mypy-boto3-discovery (>=1.35.0,<1.36.0)", "mypy-boto3-dlm (>=1.35.0,<1.36.0)", "mypy-boto3-dms (>=1.35.0,<1.36.0)", "mypy-boto3-docdb (>=1.35.0,<1.36.0)", "mypy-boto3-docdb-elastic (>=1.35.0,<1.36.0)", "mypy-boto3-drs (>=1.35.0,<1.36.0)", "mypy-boto3-ds (>=1.35.0,<1.36.0)", "mypy-boto3-ds-data (>=1.35.0,<1.36.0)", "mypy-boto3-dsql (>=1.35.0,<1.36.0)", "mypy-boto3-dynamodb (>=1.35.0,<1.36.0)", "mypy-boto3-dynamodbstreams (>=1.35.0,<1.36.0)", "mypy-boto3-ebs (>=1.35.0,<1.36.0)", "mypy-boto3-ec2 (>=1.35.0,<1.36.0)", "mypy-boto3-ec2-instance-connect (>=1.35.0,<1.36.0)", "mypy-boto3-ecr (>=1.35.0,<1.36.0)", "mypy-boto3-ecr-public (>=1.35.0,<1.36.0)", "mypy-boto3-ecs (>=1.35.0,<1.36.0)", "mypy-boto3-efs (>=1.35.0,<1.36.0)", "mypy-boto3-eks (>=1.35.0,<1.36.0)", "mypy-boto3-eks-auth (>=1.35.0,<1.36.0)", "mypy-boto3-elastic-inference (>=1.35.0,<1.36.0)", "mypy-boto3-elasticache (>=1.35.0,<1.36.0)", "mypy-boto3-elasticbeanstalk (>=1.35.0,<1.36.0)", "mypy-boto3-elastictranscoder (>=1.35.0,<1.36.0)", "mypy-boto3-elb (>=1.35.0,<1.36.0)", "mypy-boto3-elbv2 (>=1.35.0,<1.36.0)", "mypy-boto3-emr (>=1.35.0,<1.36.0)", "mypy-boto3-emr-containers (>=1.35.0,<1.36.0)", "mypy-boto3-emr-serverless (>=1.35.0,<1.36.0)", "mypy-boto3-entityresolution (>=1.35.0,<1.36.0)", "mypy-boto3-es (>=1.35.0,<1.36.0)", "mypy-boto3-events (>=1.35.0,<1.36.0)", "mypy-boto3-evidently (>=1.35.0,<1.36.0)", "mypy-boto3-finspace (>=1.35.0,<1.36.0)", "mypy-boto3-finspace-data (>=1.35.0,<1.36.0)", "mypy-boto3-firehose (>=1.35.0,<1.36.0)", "mypy-boto3-fis (>=1.35.0,<1.36.0)", "mypy-boto3-fms (>=1.35.0,<1.36.0)", "mypy-boto3-forecast (>=1.35.0,<1.36.0)", "mypy-boto3-forecastquery (>=1.35.0,<1.36.0)", "mypy-boto3-frauddetector (>=1.35.0,<1.36.0)", "mypy-boto3-freetier (>=1.35.0,<1.36.0)", "mypy-boto3-fsx (>=1.35.0,<1.36.0)", "mypy-boto3-gamelift (>=1.35.0,<1.36.0)", "mypy-boto3-geo-maps (>=1.35.0,<1.36.0)", "mypy-boto3-geo-places (>=1.35.0,<1.36.0)", "mypy-boto3-geo-routes (>=1.35.0,<1.36.0)", "mypy-boto3-glacier (>=1.35.0,<1.36.0)", "mypy-boto3-globalaccelerator (>=1.35.0,<1.36.0)", "mypy-boto3-glue (>=1.35.0,<1.36.0)", "mypy-boto3-grafana (>=1.35.0,<1.36.0)", "mypy-boto3-greengrass (>=1.35.0,<1.36.0)", "mypy-boto3-greengrassv2 (>=1.35.0,<1.36.0)", "mypy-boto3-groundstation (>=1.35.0,<1.36.0)", "mypy-boto3-guardduty (>=1.35.0,<1.36.0)", "mypy-boto3-health (>=1.35.0,<1.36.0)", "mypy-boto3-healthlake (>=1.35.0,<1.36.0)", "mypy-boto3-iam (>=1.35.0,<1.36.0)", "mypy-boto3-identitystore (>=1.35.0,<1.36.0)", "mypy-boto3-imagebuilder (>=1.35.0,<1.36.0)", "mypy-boto3-importexport (>=1.35.0,<1.36.0)", "mypy-boto3-inspector (>=1.35.0,<1.36.0)", "mypy-boto3-inspector-scan (>=1.35.0,<1.36.0)", "mypy-boto3-inspector2 (>=1.35.0,<1.36.0)", "mypy-boto3-internetmonitor (>=1.35.0,<1.36.0)", "mypy-boto3-invoicing (>=1.35.0,<1.36.0)", "mypy-boto3-iot (>=1.35.0,<1.36.0)", "mypy-boto3-iot-data (>=1.35.0,<1.36.0)", "mypy-boto3-iot-jobs-data (>=1.35.0,<1.36.0)", "mypy-boto3-iot1click-devices (>=1.35.0,<1.36.0)", "mypy-boto3-iot1click-projects (>=1.35.0,<1.36.0)", "mypy-boto3-iotanalytics (>=1.35.0,<1.36.0)", "mypy-boto3-iotdeviceadvisor (>=1.35.0,<1.36.0)", "mypy-boto3-iotevents (>=1.35.0,<1.36.0)", "mypy-boto3-iotevents-data (>=1.35.0,<1.36.0)", "mypy-boto3-iotfleethub (>=1.35.0,<1.36.0)", "mypy-boto3-iotfleetwise (>=1.35.0,<1.36.0)", "mypy-boto3-iotsecuretunneling (>=1.35.0,<1.36.0)", "mypy-boto3-iotsitewise (>=1.35.0,<1.36.0)", "mypy-boto3-iotthingsgraph (>=1.35.0,<1.36.0)", "mypy-boto3-iottwinmaker (>=1.35.0,<1.36.0)", "mypy-boto3-iotwireless (>=1.35.0,<1.36.0)", "mypy-boto3-ivs (>=1.35.0,<1.36.0)", "mypy-boto3-ivs-realtime (>=1.35.0,<1.36.0)", "mypy-boto3-ivschat (>=1.35.0,<1.36.0)", "mypy-boto3-kafka (>=1.35.0,<1.36.0)", "mypy-boto3-kafkaconnect (>=1.35.0,<1.36.0)", "mypy-boto3-kendra (>=1.35.0,<1.36.0)", "mypy-boto3-kendra-ranking (>=1.35.0,<1.36.0)", "mypy-boto3-keyspaces (>=1.35.0,<1.36.0)", "mypy-boto3-kinesis (>=1.35.0,<1.36.0)", "mypy-boto3-kinesis-video-archived-media (>=1.35.0,<1.36.0)", "mypy-boto3-kinesis-video-media (>=1.35.0,<1.36.0)", "mypy-boto3-kinesis-video-signaling (>=1.35.0,<1.36.0)", "mypy-boto3-kinesis-video-webrtc-storage (>=1.35.0,<1.36.0)", "mypy-boto3-kinesisanalytics (>=1.35.0,<1.36.0)", "mypy-boto3-kinesisanalyticsv2 (>=1.35.0,<1.36.0)", "mypy-boto3-kinesisvideo (>=1.35.0,<1.36.0)", "mypy-boto3-kms (>=1.35.0,<1.36.0)", "mypy-boto3-lakeformation (>=1.35.0,<1.36.0)", "mypy-boto3-lambda (>=1.35.0,<1.36.0)", "mypy-boto3-launch-wizard (>=1.35.0,<1.36.0)", "mypy-boto3-lex-models (>=1.35.0,<1.36.0)", "mypy-boto3-lex-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-lexv2-models (>=1.35.0,<1.36.0)", "mypy-boto3-lexv2-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-license-manager (>=1.35.0,<1.36.0)", "mypy-boto3-license-manager-linux-subscriptions (>=1.35.0,<1.36.0)", "mypy-boto3-license-manager-user-subscriptions (>=1.35.0,<1.36.0)", "mypy-boto3-lightsail (>=1.35.0,<1.36.0)", "mypy-boto3-location (>=1.35.0,<1.36.0)", "mypy-boto3-logs (>=1.35.0,<1.36.0)", "mypy-boto3-lookoutequipment (>=1.35.0,<1.36.0)", "mypy-boto3-lookoutmetrics (>=1.35.0,<1.36.0)", "mypy-boto3-lookoutvision (>=1.35.0,<1.36.0)", "mypy-boto3-m2 (>=1.35.0,<1.36.0)", "mypy-boto3-machinelearning (>=1.35.0,<1.36.0)", "mypy-boto3-macie2 (>=1.35.0,<1.36.0)", "mypy-boto3-mailmanager (>=1.35.0,<1.36.0)", "mypy-boto3-managedblockchain (>=1.35.0,<1.36.0)", "mypy-boto3-managedblockchain-query (>=1.35.0,<1.36.0)", "mypy-boto3-marketplace-agreement (>=1.35.0,<1.36.0)", "mypy-boto3-marketplace-catalog (>=1.35.0,<1.36.0)", "mypy-boto3-marketplace-deployment (>=1.35.0,<1.36.0)", "mypy-boto3-marketplace-entitlement (>=1.35.0,<1.36.0)", "mypy-boto3-marketplace-reporting (>=1.35.0,<1.36.0)", "mypy-boto3-marketplacecommerceanalytics (>=1.35.0,<1.36.0)", "mypy-boto3-mediaconnect (>=1.35.0,<1.36.0)", "mypy-boto3-mediaconvert (>=1.35.0,<1.36.0)", "mypy-boto3-medialive (>=1.35.0,<1.36.0)", "mypy-boto3-mediapackage (>=1.35.0,<1.36.0)", "mypy-boto3-mediapackage-vod (>=1.35.0,<1.36.0)", "mypy-boto3-mediapackagev2 (>=1.35.0,<1.36.0)", "mypy-boto3-mediastore (>=1.35.0,<1.36.0)", "mypy-boto3-mediastore-data (>=1.35.0,<1.36.0)", "mypy-boto3-mediatailor (>=1.35.0,<1.36.0)", "mypy-boto3-medical-imaging (>=1.35.0,<1.36.0)", "mypy-boto3-memorydb (>=1.35.0,<1.36.0)", "mypy-boto3-meteringmarketplace (>=1.35.0,<1.36.0)", "mypy-boto3-mgh (>=1.35.0,<1.36.0)", "mypy-boto3-mgn (>=1.35.0,<1.36.0)", "mypy-boto3-migration-hub-refactor-spaces (>=1.35.0,<1.36.0)", "mypy-boto3-migrationhub-config (>=1.35.0,<1.36.0)", "mypy-boto3-migrationhuborchestrator (>=1.35.0,<1.36.0)", "mypy-boto3-migrationhubstrategy (>=1.35.0,<1.36.0)", "mypy-boto3-mq (>=1.35.0,<1.36.0)", "mypy-boto3-mturk (>=1.35.0,<1.36.0)", "mypy-boto3-mwaa (>=1.35.0,<1.36.0)", "mypy-boto3-neptune (>=1.35.0,<1.36.0)", "mypy-boto3-neptune-graph (>=1.35.0,<1.36.0)", "mypy-boto3-neptunedata (>=1.35.0,<1.36.0)", "mypy-boto3-network-firewall (>=1.35.0,<1.36.0)", "mypy-boto3-networkflowmonitor (>=1.35.0,<1.36.0)", "mypy-boto3-networkmanager (>=1.35.0,<1.36.0)", "mypy-boto3-networkmonitor (>=1.35.0,<1.36.0)", "mypy-boto3-notifications (>=1.35.0,<1.36.0)", "mypy-boto3-notificationscontacts (>=1.35.0,<1.36.0)", "mypy-boto3-oam (>=1.35.0,<1.36.0)", "mypy-boto3-observabilityadmin (>=1.35.0,<1.36.0)", "mypy-boto3-omics (>=1.35.0,<1.36.0)", "mypy-boto3-opensearch (>=1.35.0,<1.36.0)", "mypy-boto3-opensearchserverless (>=1.35.0,<1.36.0)", "mypy-boto3-opsworks (>=1.35.0,<1.36.0)", "mypy-boto3-opsworkscm (>=1.35.0,<1.36.0)", "mypy-boto3-organizations (>=1.35.0,<1.36.0)", "mypy-boto3-osis (>=1.35.0,<1.36.0)", "mypy-boto3-outposts (>=1.35.0,<1.36.0)", "mypy-boto3-panorama (>=1.35.0,<1.36.0)", "mypy-boto3-partnercentral-selling (>=1.35.0,<1.36.0)", "mypy-boto3-payment-cryptography (>=1.35.0,<1.36.0)", "mypy-boto3-payment-cryptography-data (>=1.35.0,<1.36.0)", "mypy-boto3-pca-connector-ad (>=1.35.0,<1.36.0)", "mypy-boto3-pca-connector-scep (>=1.35.0,<1.36.0)", "mypy-boto3-pcs (>=1.35.0,<1.36.0)", "mypy-boto3-personalize (>=1.35.0,<1.36.0)", "mypy-boto3-personalize-events (>=1.35.0,<1.36.0)", "mypy-boto3-personalize-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-pi (>=1.35.0,<1.36.0)", "mypy-boto3-pinpoint (>=1.35.0,<1.36.0)", "mypy-boto3-pinpoint-email (>=1.35.0,<1.36.0)", "mypy-boto3-pinpoint-sms-voice (>=1.35.0,<1.36.0)", "mypy-boto3-pinpoint-sms-voice-v2 (>=1.35.0,<1.36.0)", "mypy-boto3-pipes (>=1.35.0,<1.36.0)", "mypy-boto3-polly (>=1.35.0,<1.36.0)", "mypy-boto3-pricing (>=1.35.0,<1.36.0)", "mypy-boto3-privatenetworks (>=1.35.0,<1.36.0)", "mypy-boto3-proton (>=1.35.0,<1.36.0)", "mypy-boto3-qapps (>=1.35.0,<1.36.0)", "mypy-boto3-qbusiness (>=1.35.0,<1.36.0)", "mypy-boto3-qconnect (>=1.35.0,<1.36.0)", "mypy-boto3-qldb (>=1.35.0,<1.36.0)", "mypy-boto3-qldb-session (>=1.35.0,<1.36.0)", "mypy-boto3-quicksight (>=1.35.0,<1.36.0)", "mypy-boto3-ram (>=1.35.0,<1.36.0)", "mypy-boto3-rbin (>=1.35.0,<1.36.0)", "mypy-boto3-rds (>=1.35.0,<1.36.0)", "mypy-boto3-rds-data (>=1.35.0,<1.36.0)", "mypy-boto3-redshift (>=1.35.0,<1.36.0)", "mypy-boto3-redshift-data (>=1.35.0,<1.36.0)", "mypy-boto3-redshift-serverless (>=1.35.0,<1.36.0)", "mypy-boto3-rekognition (>=1.35.0,<1.36.0)", "mypy-boto3-repostspace (>=1.35.0,<1.36.0)", "mypy-boto3-resiliencehub (>=1.35.0,<1.36.0)", "mypy-boto3-resource-explorer-2 (>=1.35.0,<1.36.0)", "mypy-boto3-resource-groups (>=1.35.0,<1.36.0)", "mypy-boto3-resourcegroupstaggingapi (>=1.35.0,<1.36.0)", "mypy-boto3-robomaker (>=1.35.0,<1.36.0)", "mypy-boto3-rolesanywhere (>=1.35.0,<1.36.0)", "mypy-boto3-route53 (>=1.35.0,<1.36.0)", "mypy-boto3-route53-recovery-cluster (>=1.35.0,<1.36.0)", "mypy-boto3-route53-recovery-control-config (>=1.35.0,<1.36.0)", "mypy-boto3-route53-recovery-readiness (>=1.35.0,<1.36.0)", "mypy-boto3-route53domains (>=1.35.0,<1.36.0)", "mypy-boto3-route53profiles (>=1.35.0,<1.36.0)", "mypy-boto3-route53resolver (>=1.35.0,<1.36.0)", "mypy-boto3-rum (>=1.35.0,<1.36.0)", "mypy-boto3-s3 (>=1.35.0,<1.36.0)", "mypy-boto3-s3control (>=1.35.0,<1.36.0)", "mypy-boto3-s3outposts (>=1.35.0,<1.36.0)", "mypy-boto3-s3tables (>=1.35.0,<1.36.0)", "mypy-boto3-sagemaker (>=1.35.0,<1.36.0)", "mypy-boto3-sagemaker-a2i-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-sagemaker-edge (>=1.35.0,<1.36.0)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-sagemaker-geospatial (>=1.35.0,<1.36.0)", "mypy-boto3-sagemaker-metrics (>=1.35.0,<1.36.0)", "mypy-boto3-sagemaker-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-savingsplans (>=1.35.0,<1.36.0)", "mypy-boto3-scheduler (>=1.35.0,<1.36.0)", "mypy-boto3-schemas (>=1.35.0,<1.36.0)", "mypy-boto3-sdb (>=1.35.0,<1.36.0)", "mypy-boto3-secretsmanager (>=1.35.0,<1.36.0)", "mypy-boto3-security-ir (>=1.35.0,<1.36.0)", "mypy-boto3-securityhub (>=1.35.0,<1.36.0)", "mypy-boto3-securitylake (>=1.35.0,<1.36.0)", "mypy-boto3-serverlessrepo (>=1.35.0,<1.36.0)", "mypy-boto3-service-quotas (>=1.35.0,<1.36.0)", "mypy-boto3-servicecatalog (>=1.35.0,<1.36.0)", "mypy-boto3-servicecatalog-appregistry (>=1.35.0,<1.36.0)", "mypy-boto3-servicediscovery (>=1.35.0,<1.36.0)", "mypy-boto3-ses (>=1.35.0,<1.36.0)", "mypy-boto3-sesv2 (>=1.35.0,<1.36.0)", "mypy-boto3-shield (>=1.35.0,<1.36.0)", "mypy-boto3-signer (>=1.35.0,<1.36.0)", "mypy-boto3-simspaceweaver (>=1.35.0,<1.36.0)", "mypy-boto3-sms (>=1.35.0,<1.36.0)", "mypy-boto3-sms-voice (>=1.35.0,<1.36.0)", "mypy-boto3-snow-device-management (>=1.35.0,<1.36.0)", "mypy-boto3-snowball (>=1.35.0,<1.36.0)", "mypy-boto3-sns (>=1.35.0,<1.36.0)", "mypy-boto3-socialmessaging (>=1.35.0,<1.36.0)", "mypy-boto3-sqs (>=1.35.0,<1.36.0)", "mypy-boto3-ssm (>=1.35.0,<1.36.0)", "mypy-boto3-ssm-contacts (>=1.35.0,<1.36.0)", "mypy-boto3-ssm-incidents (>=1.35.0,<1.36.0)", "mypy-boto3-ssm-quicksetup (>=1.35.0,<1.36.0)", "mypy-boto3-ssm-sap (>=1.35.0,<1.36.0)", "mypy-boto3-sso (>=1.35.0,<1.36.0)", "mypy-boto3-sso-admin (>=1.35.0,<1.36.0)", "mypy-boto3-sso-oidc (>=1.35.0,<1.36.0)", "mypy-boto3-stepfunctions (>=1.35.0,<1.36.0)", "mypy-boto3-storagegateway (>=1.35.0,<1.36.0)", "mypy-boto3-sts (>=1.35.0,<1.36.0)", "mypy-boto3-supplychain (>=1.35.0,<1.36.0)", "mypy-boto3-support (>=1.35.0,<1.36.0)", "mypy-boto3-support-app (>=1.35.0,<1.36.0)", "mypy-boto3-swf (>=1.35.0,<1.36.0)", "mypy-boto3-synthetics (>=1.35.0,<1.36.0)", "mypy-boto3-taxsettings (>=1.35.0,<1.36.0)", "mypy-boto3-textract (>=1.35.0,<1.36.0)", "mypy-boto3-timestream-influxdb (>=1.35.0,<1.36.0)", "mypy-boto3-timestream-query (>=1.35.0,<1.36.0)", "mypy-boto3-timestream-write (>=1.35.0,<1.36.0)", "mypy-boto3-tnb (>=1.35.0,<1.36.0)", "mypy-boto3-transcribe (>=1.35.0,<1.36.0)", "mypy-boto3-transfer (>=1.35.0,<1.36.0)", "mypy-boto3-translate (>=1.35.0,<1.36.0)", "mypy-boto3-trustedadvisor (>=1.35.0,<1.36.0)", "mypy-boto3-verifiedpermissions (>=1.35.0,<1.36.0)", "mypy-boto3-voice-id (>=1.35.0,<1.36.0)", "mypy-boto3-vpc-lattice (>=1.35.0,<1.36.0)", "mypy-boto3-waf (>=1.35.0,<1.36.0)", "mypy-boto3-waf-regional (>=1.35.0,<1.36.0)", "mypy-boto3-wafv2 (>=1.35.0,<1.36.0)", "mypy-boto3-wellarchitected (>=1.35.0,<1.36.0)", "mypy-boto3-wisdom (>=1.35.0,<1.36.0)", "mypy-boto3-workdocs (>=1.35.0,<1.36.0)", "mypy-boto3-workmail (>=1.35.0,<1.36.0)", "mypy-boto3-workmailmessageflow (>=1.35.0,<1.36.0)", "mypy-boto3-workspaces (>=1.35.0,<1.36.0)", "mypy-boto3-workspaces-thin-client (>=1.35.0,<1.36.0)", "mypy-boto3-workspaces-web (>=1.35.0,<1.36.0)", "mypy-boto3-xray (>=1.35.0,<1.36.0)"] -amp = ["mypy-boto3-amp (>=1.35.0,<1.36.0)"] -amplify = ["mypy-boto3-amplify (>=1.35.0,<1.36.0)"] -amplifybackend = ["mypy-boto3-amplifybackend (>=1.35.0,<1.36.0)"] -amplifyuibuilder = ["mypy-boto3-amplifyuibuilder (>=1.35.0,<1.36.0)"] -apigateway = ["mypy-boto3-apigateway (>=1.35.0,<1.36.0)"] -apigatewaymanagementapi = ["mypy-boto3-apigatewaymanagementapi (>=1.35.0,<1.36.0)"] -apigatewayv2 = ["mypy-boto3-apigatewayv2 (>=1.35.0,<1.36.0)"] -appconfig = ["mypy-boto3-appconfig (>=1.35.0,<1.36.0)"] -appconfigdata = ["mypy-boto3-appconfigdata (>=1.35.0,<1.36.0)"] -appfabric = ["mypy-boto3-appfabric (>=1.35.0,<1.36.0)"] -appflow = ["mypy-boto3-appflow (>=1.35.0,<1.36.0)"] -appintegrations = ["mypy-boto3-appintegrations (>=1.35.0,<1.36.0)"] -application-autoscaling = ["mypy-boto3-application-autoscaling (>=1.35.0,<1.36.0)"] -application-insights = ["mypy-boto3-application-insights (>=1.35.0,<1.36.0)"] -application-signals = ["mypy-boto3-application-signals (>=1.35.0,<1.36.0)"] -applicationcostprofiler = ["mypy-boto3-applicationcostprofiler (>=1.35.0,<1.36.0)"] -appmesh = ["mypy-boto3-appmesh (>=1.35.0,<1.36.0)"] -apprunner = ["mypy-boto3-apprunner (>=1.35.0,<1.36.0)"] -appstream = ["mypy-boto3-appstream (>=1.35.0,<1.36.0)"] -appsync = ["mypy-boto3-appsync (>=1.35.0,<1.36.0)"] -apptest = ["mypy-boto3-apptest (>=1.35.0,<1.36.0)"] -arc-zonal-shift = ["mypy-boto3-arc-zonal-shift (>=1.35.0,<1.36.0)"] -artifact = ["mypy-boto3-artifact (>=1.35.0,<1.36.0)"] -athena = ["mypy-boto3-athena (>=1.35.0,<1.36.0)"] -auditmanager = ["mypy-boto3-auditmanager (>=1.35.0,<1.36.0)"] -autoscaling = ["mypy-boto3-autoscaling (>=1.35.0,<1.36.0)"] -autoscaling-plans = ["mypy-boto3-autoscaling-plans (>=1.35.0,<1.36.0)"] -b2bi = ["mypy-boto3-b2bi (>=1.35.0,<1.36.0)"] -backup = ["mypy-boto3-backup (>=1.35.0,<1.36.0)"] -backup-gateway = ["mypy-boto3-backup-gateway (>=1.35.0,<1.36.0)"] -backupsearch = ["mypy-boto3-backupsearch (>=1.35.0,<1.36.0)"] -batch = ["mypy-boto3-batch (>=1.35.0,<1.36.0)"] -bcm-data-exports = ["mypy-boto3-bcm-data-exports (>=1.35.0,<1.36.0)"] -bcm-pricing-calculator = ["mypy-boto3-bcm-pricing-calculator (>=1.35.0,<1.36.0)"] -bedrock = ["mypy-boto3-bedrock (>=1.35.0,<1.36.0)"] -bedrock-agent = ["mypy-boto3-bedrock-agent (>=1.35.0,<1.36.0)"] -bedrock-agent-runtime = ["mypy-boto3-bedrock-agent-runtime (>=1.35.0,<1.36.0)"] -bedrock-data-automation = ["mypy-boto3-bedrock-data-automation (>=1.35.0,<1.36.0)"] -bedrock-data-automation-runtime = ["mypy-boto3-bedrock-data-automation-runtime (>=1.35.0,<1.36.0)"] -bedrock-runtime = ["mypy-boto3-bedrock-runtime (>=1.35.0,<1.36.0)"] -billing = ["mypy-boto3-billing (>=1.35.0,<1.36.0)"] -billingconductor = ["mypy-boto3-billingconductor (>=1.35.0,<1.36.0)"] -boto3 = ["boto3 (==1.35.93)"] -braket = ["mypy-boto3-braket (>=1.35.0,<1.36.0)"] -budgets = ["mypy-boto3-budgets (>=1.35.0,<1.36.0)"] -ce = ["mypy-boto3-ce (>=1.35.0,<1.36.0)"] -chatbot = ["mypy-boto3-chatbot (>=1.35.0,<1.36.0)"] -chime = ["mypy-boto3-chime (>=1.35.0,<1.36.0)"] -chime-sdk-identity = ["mypy-boto3-chime-sdk-identity (>=1.35.0,<1.36.0)"] -chime-sdk-media-pipelines = ["mypy-boto3-chime-sdk-media-pipelines (>=1.35.0,<1.36.0)"] -chime-sdk-meetings = ["mypy-boto3-chime-sdk-meetings (>=1.35.0,<1.36.0)"] -chime-sdk-messaging = ["mypy-boto3-chime-sdk-messaging (>=1.35.0,<1.36.0)"] -chime-sdk-voice = ["mypy-boto3-chime-sdk-voice (>=1.35.0,<1.36.0)"] -cleanrooms = ["mypy-boto3-cleanrooms (>=1.35.0,<1.36.0)"] -cleanroomsml = ["mypy-boto3-cleanroomsml (>=1.35.0,<1.36.0)"] -cloud9 = ["mypy-boto3-cloud9 (>=1.35.0,<1.36.0)"] -cloudcontrol = ["mypy-boto3-cloudcontrol (>=1.35.0,<1.36.0)"] -clouddirectory = ["mypy-boto3-clouddirectory (>=1.35.0,<1.36.0)"] -cloudformation = ["mypy-boto3-cloudformation (>=1.35.0,<1.36.0)"] -cloudfront = ["mypy-boto3-cloudfront (>=1.35.0,<1.36.0)"] -cloudfront-keyvaluestore = ["mypy-boto3-cloudfront-keyvaluestore (>=1.35.0,<1.36.0)"] -cloudhsm = ["mypy-boto3-cloudhsm (>=1.35.0,<1.36.0)"] -cloudhsmv2 = ["mypy-boto3-cloudhsmv2 (>=1.35.0,<1.36.0)"] -cloudsearch = ["mypy-boto3-cloudsearch (>=1.35.0,<1.36.0)"] -cloudsearchdomain = ["mypy-boto3-cloudsearchdomain (>=1.35.0,<1.36.0)"] -cloudtrail = ["mypy-boto3-cloudtrail (>=1.35.0,<1.36.0)"] -cloudtrail-data = ["mypy-boto3-cloudtrail-data (>=1.35.0,<1.36.0)"] -cloudwatch = ["mypy-boto3-cloudwatch (>=1.35.0,<1.36.0)"] -codeartifact = ["mypy-boto3-codeartifact (>=1.35.0,<1.36.0)"] -codebuild = ["mypy-boto3-codebuild (>=1.35.0,<1.36.0)"] -codecatalyst = ["mypy-boto3-codecatalyst (>=1.35.0,<1.36.0)"] -codecommit = ["mypy-boto3-codecommit (>=1.35.0,<1.36.0)"] -codeconnections = ["mypy-boto3-codeconnections (>=1.35.0,<1.36.0)"] -codedeploy = ["mypy-boto3-codedeploy (>=1.35.0,<1.36.0)"] -codeguru-reviewer = ["mypy-boto3-codeguru-reviewer (>=1.35.0,<1.36.0)"] -codeguru-security = ["mypy-boto3-codeguru-security (>=1.35.0,<1.36.0)"] -codeguruprofiler = ["mypy-boto3-codeguruprofiler (>=1.35.0,<1.36.0)"] -codepipeline = ["mypy-boto3-codepipeline (>=1.35.0,<1.36.0)"] -codestar-connections = ["mypy-boto3-codestar-connections (>=1.35.0,<1.36.0)"] -codestar-notifications = ["mypy-boto3-codestar-notifications (>=1.35.0,<1.36.0)"] -cognito-identity = ["mypy-boto3-cognito-identity (>=1.35.0,<1.36.0)"] -cognito-idp = ["mypy-boto3-cognito-idp (>=1.35.0,<1.36.0)"] -cognito-sync = ["mypy-boto3-cognito-sync (>=1.35.0,<1.36.0)"] -comprehend = ["mypy-boto3-comprehend (>=1.35.0,<1.36.0)"] -comprehendmedical = ["mypy-boto3-comprehendmedical (>=1.35.0,<1.36.0)"] -compute-optimizer = ["mypy-boto3-compute-optimizer (>=1.35.0,<1.36.0)"] -config = ["mypy-boto3-config (>=1.35.0,<1.36.0)"] -connect = ["mypy-boto3-connect (>=1.35.0,<1.36.0)"] -connect-contact-lens = ["mypy-boto3-connect-contact-lens (>=1.35.0,<1.36.0)"] -connectcampaigns = ["mypy-boto3-connectcampaigns (>=1.35.0,<1.36.0)"] -connectcampaignsv2 = ["mypy-boto3-connectcampaignsv2 (>=1.35.0,<1.36.0)"] -connectcases = ["mypy-boto3-connectcases (>=1.35.0,<1.36.0)"] -connectparticipant = ["mypy-boto3-connectparticipant (>=1.35.0,<1.36.0)"] -controlcatalog = ["mypy-boto3-controlcatalog (>=1.35.0,<1.36.0)"] -controltower = ["mypy-boto3-controltower (>=1.35.0,<1.36.0)"] -cost-optimization-hub = ["mypy-boto3-cost-optimization-hub (>=1.35.0,<1.36.0)"] -cur = ["mypy-boto3-cur (>=1.35.0,<1.36.0)"] -customer-profiles = ["mypy-boto3-customer-profiles (>=1.35.0,<1.36.0)"] -databrew = ["mypy-boto3-databrew (>=1.35.0,<1.36.0)"] -dataexchange = ["mypy-boto3-dataexchange (>=1.35.0,<1.36.0)"] -datapipeline = ["mypy-boto3-datapipeline (>=1.35.0,<1.36.0)"] -datasync = ["mypy-boto3-datasync (>=1.35.0,<1.36.0)"] -datazone = ["mypy-boto3-datazone (>=1.35.0,<1.36.0)"] -dax = ["mypy-boto3-dax (>=1.35.0,<1.36.0)"] -deadline = ["mypy-boto3-deadline (>=1.35.0,<1.36.0)"] -detective = ["mypy-boto3-detective (>=1.35.0,<1.36.0)"] -devicefarm = ["mypy-boto3-devicefarm (>=1.35.0,<1.36.0)"] -devops-guru = ["mypy-boto3-devops-guru (>=1.35.0,<1.36.0)"] -directconnect = ["mypy-boto3-directconnect (>=1.35.0,<1.36.0)"] -discovery = ["mypy-boto3-discovery (>=1.35.0,<1.36.0)"] -dlm = ["mypy-boto3-dlm (>=1.35.0,<1.36.0)"] -dms = ["mypy-boto3-dms (>=1.35.0,<1.36.0)"] -docdb = ["mypy-boto3-docdb (>=1.35.0,<1.36.0)"] -docdb-elastic = ["mypy-boto3-docdb-elastic (>=1.35.0,<1.36.0)"] -drs = ["mypy-boto3-drs (>=1.35.0,<1.36.0)"] -ds = ["mypy-boto3-ds (>=1.35.0,<1.36.0)"] -ds-data = ["mypy-boto3-ds-data (>=1.35.0,<1.36.0)"] -dsql = ["mypy-boto3-dsql (>=1.35.0,<1.36.0)"] -dynamodb = ["mypy-boto3-dynamodb (>=1.35.0,<1.36.0)"] -dynamodbstreams = ["mypy-boto3-dynamodbstreams (>=1.35.0,<1.36.0)"] -ebs = ["mypy-boto3-ebs (>=1.35.0,<1.36.0)"] -ec2 = ["mypy-boto3-ec2 (>=1.35.0,<1.36.0)"] -ec2-instance-connect = ["mypy-boto3-ec2-instance-connect (>=1.35.0,<1.36.0)"] -ecr = ["mypy-boto3-ecr (>=1.35.0,<1.36.0)"] -ecr-public = ["mypy-boto3-ecr-public (>=1.35.0,<1.36.0)"] -ecs = ["mypy-boto3-ecs (>=1.35.0,<1.36.0)"] -efs = ["mypy-boto3-efs (>=1.35.0,<1.36.0)"] -eks = ["mypy-boto3-eks (>=1.35.0,<1.36.0)"] -eks-auth = ["mypy-boto3-eks-auth (>=1.35.0,<1.36.0)"] -elastic-inference = ["mypy-boto3-elastic-inference (>=1.35.0,<1.36.0)"] -elasticache = ["mypy-boto3-elasticache (>=1.35.0,<1.36.0)"] -elasticbeanstalk = ["mypy-boto3-elasticbeanstalk (>=1.35.0,<1.36.0)"] -elastictranscoder = ["mypy-boto3-elastictranscoder (>=1.35.0,<1.36.0)"] -elb = ["mypy-boto3-elb (>=1.35.0,<1.36.0)"] -elbv2 = ["mypy-boto3-elbv2 (>=1.35.0,<1.36.0)"] -emr = ["mypy-boto3-emr (>=1.35.0,<1.36.0)"] -emr-containers = ["mypy-boto3-emr-containers (>=1.35.0,<1.36.0)"] -emr-serverless = ["mypy-boto3-emr-serverless (>=1.35.0,<1.36.0)"] -entityresolution = ["mypy-boto3-entityresolution (>=1.35.0,<1.36.0)"] -es = ["mypy-boto3-es (>=1.35.0,<1.36.0)"] -essential = ["mypy-boto3-cloudformation (>=1.35.0,<1.36.0)", "mypy-boto3-dynamodb (>=1.35.0,<1.36.0)", "mypy-boto3-ec2 (>=1.35.0,<1.36.0)", "mypy-boto3-lambda (>=1.35.0,<1.36.0)", "mypy-boto3-rds (>=1.35.0,<1.36.0)", "mypy-boto3-s3 (>=1.35.0,<1.36.0)", "mypy-boto3-sqs (>=1.35.0,<1.36.0)"] -events = ["mypy-boto3-events (>=1.35.0,<1.36.0)"] -evidently = ["mypy-boto3-evidently (>=1.35.0,<1.36.0)"] -finspace = ["mypy-boto3-finspace (>=1.35.0,<1.36.0)"] -finspace-data = ["mypy-boto3-finspace-data (>=1.35.0,<1.36.0)"] -firehose = ["mypy-boto3-firehose (>=1.35.0,<1.36.0)"] -fis = ["mypy-boto3-fis (>=1.35.0,<1.36.0)"] -fms = ["mypy-boto3-fms (>=1.35.0,<1.36.0)"] -forecast = ["mypy-boto3-forecast (>=1.35.0,<1.36.0)"] -forecastquery = ["mypy-boto3-forecastquery (>=1.35.0,<1.36.0)"] -frauddetector = ["mypy-boto3-frauddetector (>=1.35.0,<1.36.0)"] -freetier = ["mypy-boto3-freetier (>=1.35.0,<1.36.0)"] -fsx = ["mypy-boto3-fsx (>=1.35.0,<1.36.0)"] -full = ["boto3-stubs-full (>=1.35.0,<1.36.0)"] -gamelift = ["mypy-boto3-gamelift (>=1.35.0,<1.36.0)"] -geo-maps = ["mypy-boto3-geo-maps (>=1.35.0,<1.36.0)"] -geo-places = ["mypy-boto3-geo-places (>=1.35.0,<1.36.0)"] -geo-routes = ["mypy-boto3-geo-routes (>=1.35.0,<1.36.0)"] -glacier = ["mypy-boto3-glacier (>=1.35.0,<1.36.0)"] -globalaccelerator = ["mypy-boto3-globalaccelerator (>=1.35.0,<1.36.0)"] -glue = ["mypy-boto3-glue (>=1.35.0,<1.36.0)"] -grafana = ["mypy-boto3-grafana (>=1.35.0,<1.36.0)"] -greengrass = ["mypy-boto3-greengrass (>=1.35.0,<1.36.0)"] -greengrassv2 = ["mypy-boto3-greengrassv2 (>=1.35.0,<1.36.0)"] -groundstation = ["mypy-boto3-groundstation (>=1.35.0,<1.36.0)"] -guardduty = ["mypy-boto3-guardduty (>=1.35.0,<1.36.0)"] -health = ["mypy-boto3-health (>=1.35.0,<1.36.0)"] -healthlake = ["mypy-boto3-healthlake (>=1.35.0,<1.36.0)"] -iam = ["mypy-boto3-iam (>=1.35.0,<1.36.0)"] -identitystore = ["mypy-boto3-identitystore (>=1.35.0,<1.36.0)"] -imagebuilder = ["mypy-boto3-imagebuilder (>=1.35.0,<1.36.0)"] -importexport = ["mypy-boto3-importexport (>=1.35.0,<1.36.0)"] -inspector = ["mypy-boto3-inspector (>=1.35.0,<1.36.0)"] -inspector-scan = ["mypy-boto3-inspector-scan (>=1.35.0,<1.36.0)"] -inspector2 = ["mypy-boto3-inspector2 (>=1.35.0,<1.36.0)"] -internetmonitor = ["mypy-boto3-internetmonitor (>=1.35.0,<1.36.0)"] -invoicing = ["mypy-boto3-invoicing (>=1.35.0,<1.36.0)"] -iot = ["mypy-boto3-iot (>=1.35.0,<1.36.0)"] -iot-data = ["mypy-boto3-iot-data (>=1.35.0,<1.36.0)"] -iot-jobs-data = ["mypy-boto3-iot-jobs-data (>=1.35.0,<1.36.0)"] -iot1click-devices = ["mypy-boto3-iot1click-devices (>=1.35.0,<1.36.0)"] -iot1click-projects = ["mypy-boto3-iot1click-projects (>=1.35.0,<1.36.0)"] -iotanalytics = ["mypy-boto3-iotanalytics (>=1.35.0,<1.36.0)"] -iotdeviceadvisor = ["mypy-boto3-iotdeviceadvisor (>=1.35.0,<1.36.0)"] -iotevents = ["mypy-boto3-iotevents (>=1.35.0,<1.36.0)"] -iotevents-data = ["mypy-boto3-iotevents-data (>=1.35.0,<1.36.0)"] -iotfleethub = ["mypy-boto3-iotfleethub (>=1.35.0,<1.36.0)"] -iotfleetwise = ["mypy-boto3-iotfleetwise (>=1.35.0,<1.36.0)"] -iotsecuretunneling = ["mypy-boto3-iotsecuretunneling (>=1.35.0,<1.36.0)"] -iotsitewise = ["mypy-boto3-iotsitewise (>=1.35.0,<1.36.0)"] -iotthingsgraph = ["mypy-boto3-iotthingsgraph (>=1.35.0,<1.36.0)"] -iottwinmaker = ["mypy-boto3-iottwinmaker (>=1.35.0,<1.36.0)"] -iotwireless = ["mypy-boto3-iotwireless (>=1.35.0,<1.36.0)"] -ivs = ["mypy-boto3-ivs (>=1.35.0,<1.36.0)"] -ivs-realtime = ["mypy-boto3-ivs-realtime (>=1.35.0,<1.36.0)"] -ivschat = ["mypy-boto3-ivschat (>=1.35.0,<1.36.0)"] -kafka = ["mypy-boto3-kafka (>=1.35.0,<1.36.0)"] -kafkaconnect = ["mypy-boto3-kafkaconnect (>=1.35.0,<1.36.0)"] -kendra = ["mypy-boto3-kendra (>=1.35.0,<1.36.0)"] -kendra-ranking = ["mypy-boto3-kendra-ranking (>=1.35.0,<1.36.0)"] -keyspaces = ["mypy-boto3-keyspaces (>=1.35.0,<1.36.0)"] -kinesis = ["mypy-boto3-kinesis (>=1.35.0,<1.36.0)"] -kinesis-video-archived-media = ["mypy-boto3-kinesis-video-archived-media (>=1.35.0,<1.36.0)"] -kinesis-video-media = ["mypy-boto3-kinesis-video-media (>=1.35.0,<1.36.0)"] -kinesis-video-signaling = ["mypy-boto3-kinesis-video-signaling (>=1.35.0,<1.36.0)"] -kinesis-video-webrtc-storage = ["mypy-boto3-kinesis-video-webrtc-storage (>=1.35.0,<1.36.0)"] -kinesisanalytics = ["mypy-boto3-kinesisanalytics (>=1.35.0,<1.36.0)"] -kinesisanalyticsv2 = ["mypy-boto3-kinesisanalyticsv2 (>=1.35.0,<1.36.0)"] -kinesisvideo = ["mypy-boto3-kinesisvideo (>=1.35.0,<1.36.0)"] -kms = ["mypy-boto3-kms (>=1.35.0,<1.36.0)"] -lakeformation = ["mypy-boto3-lakeformation (>=1.35.0,<1.36.0)"] -lambda = ["mypy-boto3-lambda (>=1.35.0,<1.36.0)"] -launch-wizard = ["mypy-boto3-launch-wizard (>=1.35.0,<1.36.0)"] -lex-models = ["mypy-boto3-lex-models (>=1.35.0,<1.36.0)"] -lex-runtime = ["mypy-boto3-lex-runtime (>=1.35.0,<1.36.0)"] -lexv2-models = ["mypy-boto3-lexv2-models (>=1.35.0,<1.36.0)"] -lexv2-runtime = ["mypy-boto3-lexv2-runtime (>=1.35.0,<1.36.0)"] -license-manager = ["mypy-boto3-license-manager (>=1.35.0,<1.36.0)"] -license-manager-linux-subscriptions = ["mypy-boto3-license-manager-linux-subscriptions (>=1.35.0,<1.36.0)"] -license-manager-user-subscriptions = ["mypy-boto3-license-manager-user-subscriptions (>=1.35.0,<1.36.0)"] -lightsail = ["mypy-boto3-lightsail (>=1.35.0,<1.36.0)"] -location = ["mypy-boto3-location (>=1.35.0,<1.36.0)"] -logs = ["mypy-boto3-logs (>=1.35.0,<1.36.0)"] -lookoutequipment = ["mypy-boto3-lookoutequipment (>=1.35.0,<1.36.0)"] -lookoutmetrics = ["mypy-boto3-lookoutmetrics (>=1.35.0,<1.36.0)"] -lookoutvision = ["mypy-boto3-lookoutvision (>=1.35.0,<1.36.0)"] -m2 = ["mypy-boto3-m2 (>=1.35.0,<1.36.0)"] -machinelearning = ["mypy-boto3-machinelearning (>=1.35.0,<1.36.0)"] -macie2 = ["mypy-boto3-macie2 (>=1.35.0,<1.36.0)"] -mailmanager = ["mypy-boto3-mailmanager (>=1.35.0,<1.36.0)"] -managedblockchain = ["mypy-boto3-managedblockchain (>=1.35.0,<1.36.0)"] -managedblockchain-query = ["mypy-boto3-managedblockchain-query (>=1.35.0,<1.36.0)"] -marketplace-agreement = ["mypy-boto3-marketplace-agreement (>=1.35.0,<1.36.0)"] -marketplace-catalog = ["mypy-boto3-marketplace-catalog (>=1.35.0,<1.36.0)"] -marketplace-deployment = ["mypy-boto3-marketplace-deployment (>=1.35.0,<1.36.0)"] -marketplace-entitlement = ["mypy-boto3-marketplace-entitlement (>=1.35.0,<1.36.0)"] -marketplace-reporting = ["mypy-boto3-marketplace-reporting (>=1.35.0,<1.36.0)"] -marketplacecommerceanalytics = ["mypy-boto3-marketplacecommerceanalytics (>=1.35.0,<1.36.0)"] -mediaconnect = ["mypy-boto3-mediaconnect (>=1.35.0,<1.36.0)"] -mediaconvert = ["mypy-boto3-mediaconvert (>=1.35.0,<1.36.0)"] -medialive = ["mypy-boto3-medialive (>=1.35.0,<1.36.0)"] -mediapackage = ["mypy-boto3-mediapackage (>=1.35.0,<1.36.0)"] -mediapackage-vod = ["mypy-boto3-mediapackage-vod (>=1.35.0,<1.36.0)"] -mediapackagev2 = ["mypy-boto3-mediapackagev2 (>=1.35.0,<1.36.0)"] -mediastore = ["mypy-boto3-mediastore (>=1.35.0,<1.36.0)"] -mediastore-data = ["mypy-boto3-mediastore-data (>=1.35.0,<1.36.0)"] -mediatailor = ["mypy-boto3-mediatailor (>=1.35.0,<1.36.0)"] -medical-imaging = ["mypy-boto3-medical-imaging (>=1.35.0,<1.36.0)"] -memorydb = ["mypy-boto3-memorydb (>=1.35.0,<1.36.0)"] -meteringmarketplace = ["mypy-boto3-meteringmarketplace (>=1.35.0,<1.36.0)"] -mgh = ["mypy-boto3-mgh (>=1.35.0,<1.36.0)"] -mgn = ["mypy-boto3-mgn (>=1.35.0,<1.36.0)"] -migration-hub-refactor-spaces = ["mypy-boto3-migration-hub-refactor-spaces (>=1.35.0,<1.36.0)"] -migrationhub-config = ["mypy-boto3-migrationhub-config (>=1.35.0,<1.36.0)"] -migrationhuborchestrator = ["mypy-boto3-migrationhuborchestrator (>=1.35.0,<1.36.0)"] -migrationhubstrategy = ["mypy-boto3-migrationhubstrategy (>=1.35.0,<1.36.0)"] -mq = ["mypy-boto3-mq (>=1.35.0,<1.36.0)"] -mturk = ["mypy-boto3-mturk (>=1.35.0,<1.36.0)"] -mwaa = ["mypy-boto3-mwaa (>=1.35.0,<1.36.0)"] -neptune = ["mypy-boto3-neptune (>=1.35.0,<1.36.0)"] -neptune-graph = ["mypy-boto3-neptune-graph (>=1.35.0,<1.36.0)"] -neptunedata = ["mypy-boto3-neptunedata (>=1.35.0,<1.36.0)"] -network-firewall = ["mypy-boto3-network-firewall (>=1.35.0,<1.36.0)"] -networkflowmonitor = ["mypy-boto3-networkflowmonitor (>=1.35.0,<1.36.0)"] -networkmanager = ["mypy-boto3-networkmanager (>=1.35.0,<1.36.0)"] -networkmonitor = ["mypy-boto3-networkmonitor (>=1.35.0,<1.36.0)"] -notifications = ["mypy-boto3-notifications (>=1.35.0,<1.36.0)"] -notificationscontacts = ["mypy-boto3-notificationscontacts (>=1.35.0,<1.36.0)"] -oam = ["mypy-boto3-oam (>=1.35.0,<1.36.0)"] -observabilityadmin = ["mypy-boto3-observabilityadmin (>=1.35.0,<1.36.0)"] -omics = ["mypy-boto3-omics (>=1.35.0,<1.36.0)"] -opensearch = ["mypy-boto3-opensearch (>=1.35.0,<1.36.0)"] -opensearchserverless = ["mypy-boto3-opensearchserverless (>=1.35.0,<1.36.0)"] -opsworks = ["mypy-boto3-opsworks (>=1.35.0,<1.36.0)"] -opsworkscm = ["mypy-boto3-opsworkscm (>=1.35.0,<1.36.0)"] -organizations = ["mypy-boto3-organizations (>=1.35.0,<1.36.0)"] -osis = ["mypy-boto3-osis (>=1.35.0,<1.36.0)"] -outposts = ["mypy-boto3-outposts (>=1.35.0,<1.36.0)"] -panorama = ["mypy-boto3-panorama (>=1.35.0,<1.36.0)"] -partnercentral-selling = ["mypy-boto3-partnercentral-selling (>=1.35.0,<1.36.0)"] -payment-cryptography = ["mypy-boto3-payment-cryptography (>=1.35.0,<1.36.0)"] -payment-cryptography-data = ["mypy-boto3-payment-cryptography-data (>=1.35.0,<1.36.0)"] -pca-connector-ad = ["mypy-boto3-pca-connector-ad (>=1.35.0,<1.36.0)"] -pca-connector-scep = ["mypy-boto3-pca-connector-scep (>=1.35.0,<1.36.0)"] -pcs = ["mypy-boto3-pcs (>=1.35.0,<1.36.0)"] -personalize = ["mypy-boto3-personalize (>=1.35.0,<1.36.0)"] -personalize-events = ["mypy-boto3-personalize-events (>=1.35.0,<1.36.0)"] -personalize-runtime = ["mypy-boto3-personalize-runtime (>=1.35.0,<1.36.0)"] -pi = ["mypy-boto3-pi (>=1.35.0,<1.36.0)"] -pinpoint = ["mypy-boto3-pinpoint (>=1.35.0,<1.36.0)"] -pinpoint-email = ["mypy-boto3-pinpoint-email (>=1.35.0,<1.36.0)"] -pinpoint-sms-voice = ["mypy-boto3-pinpoint-sms-voice (>=1.35.0,<1.36.0)"] -pinpoint-sms-voice-v2 = ["mypy-boto3-pinpoint-sms-voice-v2 (>=1.35.0,<1.36.0)"] -pipes = ["mypy-boto3-pipes (>=1.35.0,<1.36.0)"] -polly = ["mypy-boto3-polly (>=1.35.0,<1.36.0)"] -pricing = ["mypy-boto3-pricing (>=1.35.0,<1.36.0)"] -privatenetworks = ["mypy-boto3-privatenetworks (>=1.35.0,<1.36.0)"] -proton = ["mypy-boto3-proton (>=1.35.0,<1.36.0)"] -qapps = ["mypy-boto3-qapps (>=1.35.0,<1.36.0)"] -qbusiness = ["mypy-boto3-qbusiness (>=1.35.0,<1.36.0)"] -qconnect = ["mypy-boto3-qconnect (>=1.35.0,<1.36.0)"] -qldb = ["mypy-boto3-qldb (>=1.35.0,<1.36.0)"] -qldb-session = ["mypy-boto3-qldb-session (>=1.35.0,<1.36.0)"] -quicksight = ["mypy-boto3-quicksight (>=1.35.0,<1.36.0)"] -ram = ["mypy-boto3-ram (>=1.35.0,<1.36.0)"] -rbin = ["mypy-boto3-rbin (>=1.35.0,<1.36.0)"] -rds = ["mypy-boto3-rds (>=1.35.0,<1.36.0)"] -rds-data = ["mypy-boto3-rds-data (>=1.35.0,<1.36.0)"] -redshift = ["mypy-boto3-redshift (>=1.35.0,<1.36.0)"] -redshift-data = ["mypy-boto3-redshift-data (>=1.35.0,<1.36.0)"] -redshift-serverless = ["mypy-boto3-redshift-serverless (>=1.35.0,<1.36.0)"] -rekognition = ["mypy-boto3-rekognition (>=1.35.0,<1.36.0)"] -repostspace = ["mypy-boto3-repostspace (>=1.35.0,<1.36.0)"] -resiliencehub = ["mypy-boto3-resiliencehub (>=1.35.0,<1.36.0)"] -resource-explorer-2 = ["mypy-boto3-resource-explorer-2 (>=1.35.0,<1.36.0)"] -resource-groups = ["mypy-boto3-resource-groups (>=1.35.0,<1.36.0)"] -resourcegroupstaggingapi = ["mypy-boto3-resourcegroupstaggingapi (>=1.35.0,<1.36.0)"] -robomaker = ["mypy-boto3-robomaker (>=1.35.0,<1.36.0)"] -rolesanywhere = ["mypy-boto3-rolesanywhere (>=1.35.0,<1.36.0)"] -route53 = ["mypy-boto3-route53 (>=1.35.0,<1.36.0)"] -route53-recovery-cluster = ["mypy-boto3-route53-recovery-cluster (>=1.35.0,<1.36.0)"] -route53-recovery-control-config = ["mypy-boto3-route53-recovery-control-config (>=1.35.0,<1.36.0)"] -route53-recovery-readiness = ["mypy-boto3-route53-recovery-readiness (>=1.35.0,<1.36.0)"] -route53domains = ["mypy-boto3-route53domains (>=1.35.0,<1.36.0)"] -route53profiles = ["mypy-boto3-route53profiles (>=1.35.0,<1.36.0)"] -route53resolver = ["mypy-boto3-route53resolver (>=1.35.0,<1.36.0)"] -rum = ["mypy-boto3-rum (>=1.35.0,<1.36.0)"] -s3 = ["mypy-boto3-s3 (>=1.35.0,<1.36.0)"] -s3control = ["mypy-boto3-s3control (>=1.35.0,<1.36.0)"] -s3outposts = ["mypy-boto3-s3outposts (>=1.35.0,<1.36.0)"] -s3tables = ["mypy-boto3-s3tables (>=1.35.0,<1.36.0)"] -sagemaker = ["mypy-boto3-sagemaker (>=1.35.0,<1.36.0)"] -sagemaker-a2i-runtime = ["mypy-boto3-sagemaker-a2i-runtime (>=1.35.0,<1.36.0)"] -sagemaker-edge = ["mypy-boto3-sagemaker-edge (>=1.35.0,<1.36.0)"] -sagemaker-featurestore-runtime = ["mypy-boto3-sagemaker-featurestore-runtime (>=1.35.0,<1.36.0)"] -sagemaker-geospatial = ["mypy-boto3-sagemaker-geospatial (>=1.35.0,<1.36.0)"] -sagemaker-metrics = ["mypy-boto3-sagemaker-metrics (>=1.35.0,<1.36.0)"] -sagemaker-runtime = ["mypy-boto3-sagemaker-runtime (>=1.35.0,<1.36.0)"] -savingsplans = ["mypy-boto3-savingsplans (>=1.35.0,<1.36.0)"] -scheduler = ["mypy-boto3-scheduler (>=1.35.0,<1.36.0)"] -schemas = ["mypy-boto3-schemas (>=1.35.0,<1.36.0)"] -sdb = ["mypy-boto3-sdb (>=1.35.0,<1.36.0)"] -secretsmanager = ["mypy-boto3-secretsmanager (>=1.35.0,<1.36.0)"] -security-ir = ["mypy-boto3-security-ir (>=1.35.0,<1.36.0)"] -securityhub = ["mypy-boto3-securityhub (>=1.35.0,<1.36.0)"] -securitylake = ["mypy-boto3-securitylake (>=1.35.0,<1.36.0)"] -serverlessrepo = ["mypy-boto3-serverlessrepo (>=1.35.0,<1.36.0)"] -service-quotas = ["mypy-boto3-service-quotas (>=1.35.0,<1.36.0)"] -servicecatalog = ["mypy-boto3-servicecatalog (>=1.35.0,<1.36.0)"] -servicecatalog-appregistry = ["mypy-boto3-servicecatalog-appregistry (>=1.35.0,<1.36.0)"] -servicediscovery = ["mypy-boto3-servicediscovery (>=1.35.0,<1.36.0)"] -ses = ["mypy-boto3-ses (>=1.35.0,<1.36.0)"] -sesv2 = ["mypy-boto3-sesv2 (>=1.35.0,<1.36.0)"] -shield = ["mypy-boto3-shield (>=1.35.0,<1.36.0)"] -signer = ["mypy-boto3-signer (>=1.35.0,<1.36.0)"] -simspaceweaver = ["mypy-boto3-simspaceweaver (>=1.35.0,<1.36.0)"] -sms = ["mypy-boto3-sms (>=1.35.0,<1.36.0)"] -sms-voice = ["mypy-boto3-sms-voice (>=1.35.0,<1.36.0)"] -snow-device-management = ["mypy-boto3-snow-device-management (>=1.35.0,<1.36.0)"] -snowball = ["mypy-boto3-snowball (>=1.35.0,<1.36.0)"] -sns = ["mypy-boto3-sns (>=1.35.0,<1.36.0)"] -socialmessaging = ["mypy-boto3-socialmessaging (>=1.35.0,<1.36.0)"] -sqs = ["mypy-boto3-sqs (>=1.35.0,<1.36.0)"] -ssm = ["mypy-boto3-ssm (>=1.35.0,<1.36.0)"] -ssm-contacts = ["mypy-boto3-ssm-contacts (>=1.35.0,<1.36.0)"] -ssm-incidents = ["mypy-boto3-ssm-incidents (>=1.35.0,<1.36.0)"] -ssm-quicksetup = ["mypy-boto3-ssm-quicksetup (>=1.35.0,<1.36.0)"] -ssm-sap = ["mypy-boto3-ssm-sap (>=1.35.0,<1.36.0)"] -sso = ["mypy-boto3-sso (>=1.35.0,<1.36.0)"] -sso-admin = ["mypy-boto3-sso-admin (>=1.35.0,<1.36.0)"] -sso-oidc = ["mypy-boto3-sso-oidc (>=1.35.0,<1.36.0)"] -stepfunctions = ["mypy-boto3-stepfunctions (>=1.35.0,<1.36.0)"] -storagegateway = ["mypy-boto3-storagegateway (>=1.35.0,<1.36.0)"] -sts = ["mypy-boto3-sts (>=1.35.0,<1.36.0)"] -supplychain = ["mypy-boto3-supplychain (>=1.35.0,<1.36.0)"] -support = ["mypy-boto3-support (>=1.35.0,<1.36.0)"] -support-app = ["mypy-boto3-support-app (>=1.35.0,<1.36.0)"] -swf = ["mypy-boto3-swf (>=1.35.0,<1.36.0)"] -synthetics = ["mypy-boto3-synthetics (>=1.35.0,<1.36.0)"] -taxsettings = ["mypy-boto3-taxsettings (>=1.35.0,<1.36.0)"] -textract = ["mypy-boto3-textract (>=1.35.0,<1.36.0)"] -timestream-influxdb = ["mypy-boto3-timestream-influxdb (>=1.35.0,<1.36.0)"] -timestream-query = ["mypy-boto3-timestream-query (>=1.35.0,<1.36.0)"] -timestream-write = ["mypy-boto3-timestream-write (>=1.35.0,<1.36.0)"] -tnb = ["mypy-boto3-tnb (>=1.35.0,<1.36.0)"] -transcribe = ["mypy-boto3-transcribe (>=1.35.0,<1.36.0)"] -transfer = ["mypy-boto3-transfer (>=1.35.0,<1.36.0)"] -translate = ["mypy-boto3-translate (>=1.35.0,<1.36.0)"] -trustedadvisor = ["mypy-boto3-trustedadvisor (>=1.35.0,<1.36.0)"] -verifiedpermissions = ["mypy-boto3-verifiedpermissions (>=1.35.0,<1.36.0)"] -voice-id = ["mypy-boto3-voice-id (>=1.35.0,<1.36.0)"] -vpc-lattice = ["mypy-boto3-vpc-lattice (>=1.35.0,<1.36.0)"] -waf = ["mypy-boto3-waf (>=1.35.0,<1.36.0)"] -waf-regional = ["mypy-boto3-waf-regional (>=1.35.0,<1.36.0)"] -wafv2 = ["mypy-boto3-wafv2 (>=1.35.0,<1.36.0)"] -wellarchitected = ["mypy-boto3-wellarchitected (>=1.35.0,<1.36.0)"] -wisdom = ["mypy-boto3-wisdom (>=1.35.0,<1.36.0)"] -workdocs = ["mypy-boto3-workdocs (>=1.35.0,<1.36.0)"] -workmail = ["mypy-boto3-workmail (>=1.35.0,<1.36.0)"] -workmailmessageflow = ["mypy-boto3-workmailmessageflow (>=1.35.0,<1.36.0)"] -workspaces = ["mypy-boto3-workspaces (>=1.35.0,<1.36.0)"] -workspaces-thin-client = ["mypy-boto3-workspaces-thin-client (>=1.35.0,<1.36.0)"] -workspaces-web = ["mypy-boto3-workspaces-web (>=1.35.0,<1.36.0)"] -xray = ["mypy-boto3-xray (>=1.35.0,<1.36.0)"] +accessanalyzer = ["mypy-boto3-accessanalyzer (>=1.38.0,<1.39.0)"] +account = ["mypy-boto3-account (>=1.38.0,<1.39.0)"] +acm = ["mypy-boto3-acm (>=1.38.0,<1.39.0)"] +acm-pca = ["mypy-boto3-acm-pca (>=1.38.0,<1.39.0)"] +all = ["mypy-boto3-accessanalyzer (>=1.38.0,<1.39.0)", "mypy-boto3-account (>=1.38.0,<1.39.0)", "mypy-boto3-acm (>=1.38.0,<1.39.0)", "mypy-boto3-acm-pca (>=1.38.0,<1.39.0)", "mypy-boto3-amp (>=1.38.0,<1.39.0)", "mypy-boto3-amplify (>=1.38.0,<1.39.0)", "mypy-boto3-amplifybackend (>=1.38.0,<1.39.0)", "mypy-boto3-amplifyuibuilder (>=1.38.0,<1.39.0)", "mypy-boto3-apigateway (>=1.38.0,<1.39.0)", "mypy-boto3-apigatewaymanagementapi (>=1.38.0,<1.39.0)", "mypy-boto3-apigatewayv2 (>=1.38.0,<1.39.0)", "mypy-boto3-appconfig (>=1.38.0,<1.39.0)", "mypy-boto3-appconfigdata (>=1.38.0,<1.39.0)", "mypy-boto3-appfabric (>=1.38.0,<1.39.0)", "mypy-boto3-appflow (>=1.38.0,<1.39.0)", "mypy-boto3-appintegrations (>=1.38.0,<1.39.0)", "mypy-boto3-application-autoscaling (>=1.38.0,<1.39.0)", "mypy-boto3-application-insights (>=1.38.0,<1.39.0)", "mypy-boto3-application-signals (>=1.38.0,<1.39.0)", "mypy-boto3-applicationcostprofiler (>=1.38.0,<1.39.0)", "mypy-boto3-appmesh (>=1.38.0,<1.39.0)", "mypy-boto3-apprunner (>=1.38.0,<1.39.0)", "mypy-boto3-appstream (>=1.38.0,<1.39.0)", "mypy-boto3-appsync (>=1.38.0,<1.39.0)", "mypy-boto3-apptest (>=1.38.0,<1.39.0)", "mypy-boto3-arc-zonal-shift (>=1.38.0,<1.39.0)", "mypy-boto3-artifact (>=1.38.0,<1.39.0)", "mypy-boto3-athena (>=1.38.0,<1.39.0)", "mypy-boto3-auditmanager (>=1.38.0,<1.39.0)", "mypy-boto3-autoscaling (>=1.38.0,<1.39.0)", "mypy-boto3-autoscaling-plans (>=1.38.0,<1.39.0)", "mypy-boto3-b2bi (>=1.38.0,<1.39.0)", "mypy-boto3-backup (>=1.38.0,<1.39.0)", "mypy-boto3-backup-gateway (>=1.38.0,<1.39.0)", "mypy-boto3-backupsearch (>=1.38.0,<1.39.0)", "mypy-boto3-batch (>=1.38.0,<1.39.0)", "mypy-boto3-bcm-data-exports (>=1.38.0,<1.39.0)", "mypy-boto3-bcm-pricing-calculator (>=1.38.0,<1.39.0)", "mypy-boto3-bedrock (>=1.38.0,<1.39.0)", "mypy-boto3-bedrock-agent (>=1.38.0,<1.39.0)", "mypy-boto3-bedrock-agent-runtime (>=1.38.0,<1.39.0)", "mypy-boto3-bedrock-data-automation (>=1.38.0,<1.39.0)", "mypy-boto3-bedrock-data-automation-runtime (>=1.38.0,<1.39.0)", "mypy-boto3-bedrock-runtime (>=1.38.0,<1.39.0)", "mypy-boto3-billing (>=1.38.0,<1.39.0)", "mypy-boto3-billingconductor (>=1.38.0,<1.39.0)", "mypy-boto3-braket (>=1.38.0,<1.39.0)", "mypy-boto3-budgets (>=1.38.0,<1.39.0)", "mypy-boto3-ce (>=1.38.0,<1.39.0)", "mypy-boto3-chatbot (>=1.38.0,<1.39.0)", "mypy-boto3-chime (>=1.38.0,<1.39.0)", "mypy-boto3-chime-sdk-identity (>=1.38.0,<1.39.0)", "mypy-boto3-chime-sdk-media-pipelines (>=1.38.0,<1.39.0)", "mypy-boto3-chime-sdk-meetings (>=1.38.0,<1.39.0)", "mypy-boto3-chime-sdk-messaging (>=1.38.0,<1.39.0)", "mypy-boto3-chime-sdk-voice (>=1.38.0,<1.39.0)", "mypy-boto3-cleanrooms (>=1.38.0,<1.39.0)", "mypy-boto3-cleanroomsml (>=1.38.0,<1.39.0)", "mypy-boto3-cloud9 (>=1.38.0,<1.39.0)", "mypy-boto3-cloudcontrol (>=1.38.0,<1.39.0)", "mypy-boto3-clouddirectory (>=1.38.0,<1.39.0)", "mypy-boto3-cloudformation (>=1.38.0,<1.39.0)", "mypy-boto3-cloudfront (>=1.38.0,<1.39.0)", "mypy-boto3-cloudfront-keyvaluestore (>=1.38.0,<1.39.0)", "mypy-boto3-cloudhsm (>=1.38.0,<1.39.0)", "mypy-boto3-cloudhsmv2 (>=1.38.0,<1.39.0)", "mypy-boto3-cloudsearch (>=1.38.0,<1.39.0)", "mypy-boto3-cloudsearchdomain (>=1.38.0,<1.39.0)", "mypy-boto3-cloudtrail (>=1.38.0,<1.39.0)", "mypy-boto3-cloudtrail-data (>=1.38.0,<1.39.0)", "mypy-boto3-cloudwatch (>=1.38.0,<1.39.0)", "mypy-boto3-codeartifact (>=1.38.0,<1.39.0)", "mypy-boto3-codebuild (>=1.38.0,<1.39.0)", "mypy-boto3-codecatalyst (>=1.38.0,<1.39.0)", "mypy-boto3-codecommit (>=1.38.0,<1.39.0)", "mypy-boto3-codeconnections (>=1.38.0,<1.39.0)", "mypy-boto3-codedeploy (>=1.38.0,<1.39.0)", "mypy-boto3-codeguru-reviewer (>=1.38.0,<1.39.0)", "mypy-boto3-codeguru-security (>=1.38.0,<1.39.0)", "mypy-boto3-codeguruprofiler (>=1.38.0,<1.39.0)", "mypy-boto3-codepipeline (>=1.38.0,<1.39.0)", "mypy-boto3-codestar-connections (>=1.38.0,<1.39.0)", "mypy-boto3-codestar-notifications (>=1.38.0,<1.39.0)", "mypy-boto3-cognito-identity (>=1.38.0,<1.39.0)", "mypy-boto3-cognito-idp (>=1.38.0,<1.39.0)", "mypy-boto3-cognito-sync (>=1.38.0,<1.39.0)", "mypy-boto3-comprehend (>=1.38.0,<1.39.0)", "mypy-boto3-comprehendmedical (>=1.38.0,<1.39.0)", "mypy-boto3-compute-optimizer (>=1.38.0,<1.39.0)", "mypy-boto3-config (>=1.38.0,<1.39.0)", "mypy-boto3-connect (>=1.38.0,<1.39.0)", "mypy-boto3-connect-contact-lens (>=1.38.0,<1.39.0)", "mypy-boto3-connectcampaigns (>=1.38.0,<1.39.0)", "mypy-boto3-connectcampaignsv2 (>=1.38.0,<1.39.0)", "mypy-boto3-connectcases (>=1.38.0,<1.39.0)", "mypy-boto3-connectparticipant (>=1.38.0,<1.39.0)", "mypy-boto3-controlcatalog (>=1.38.0,<1.39.0)", "mypy-boto3-controltower (>=1.38.0,<1.39.0)", "mypy-boto3-cost-optimization-hub (>=1.38.0,<1.39.0)", "mypy-boto3-cur (>=1.38.0,<1.39.0)", "mypy-boto3-customer-profiles (>=1.38.0,<1.39.0)", "mypy-boto3-databrew (>=1.38.0,<1.39.0)", "mypy-boto3-dataexchange (>=1.38.0,<1.39.0)", "mypy-boto3-datapipeline (>=1.38.0,<1.39.0)", "mypy-boto3-datasync (>=1.38.0,<1.39.0)", "mypy-boto3-datazone (>=1.38.0,<1.39.0)", "mypy-boto3-dax (>=1.38.0,<1.39.0)", "mypy-boto3-deadline (>=1.38.0,<1.39.0)", "mypy-boto3-detective (>=1.38.0,<1.39.0)", "mypy-boto3-devicefarm (>=1.38.0,<1.39.0)", "mypy-boto3-devops-guru (>=1.38.0,<1.39.0)", "mypy-boto3-directconnect (>=1.38.0,<1.39.0)", "mypy-boto3-discovery (>=1.38.0,<1.39.0)", "mypy-boto3-dlm (>=1.38.0,<1.39.0)", "mypy-boto3-dms (>=1.38.0,<1.39.0)", "mypy-boto3-docdb (>=1.38.0,<1.39.0)", "mypy-boto3-docdb-elastic (>=1.38.0,<1.39.0)", "mypy-boto3-drs (>=1.38.0,<1.39.0)", "mypy-boto3-ds (>=1.38.0,<1.39.0)", "mypy-boto3-ds-data (>=1.38.0,<1.39.0)", "mypy-boto3-dsql (>=1.38.0,<1.39.0)", "mypy-boto3-dynamodb (>=1.38.0,<1.39.0)", "mypy-boto3-dynamodbstreams (>=1.38.0,<1.39.0)", "mypy-boto3-ebs (>=1.38.0,<1.39.0)", "mypy-boto3-ec2 (>=1.38.0,<1.39.0)", "mypy-boto3-ec2-instance-connect (>=1.38.0,<1.39.0)", "mypy-boto3-ecr (>=1.38.0,<1.39.0)", "mypy-boto3-ecr-public (>=1.38.0,<1.39.0)", "mypy-boto3-ecs (>=1.38.0,<1.39.0)", "mypy-boto3-efs (>=1.38.0,<1.39.0)", "mypy-boto3-eks (>=1.38.0,<1.39.0)", "mypy-boto3-eks-auth (>=1.38.0,<1.39.0)", "mypy-boto3-elasticache (>=1.38.0,<1.39.0)", "mypy-boto3-elasticbeanstalk (>=1.38.0,<1.39.0)", "mypy-boto3-elastictranscoder (>=1.38.0,<1.39.0)", "mypy-boto3-elb (>=1.38.0,<1.39.0)", "mypy-boto3-elbv2 (>=1.38.0,<1.39.0)", "mypy-boto3-emr (>=1.38.0,<1.39.0)", "mypy-boto3-emr-containers (>=1.38.0,<1.39.0)", "mypy-boto3-emr-serverless (>=1.38.0,<1.39.0)", "mypy-boto3-entityresolution (>=1.38.0,<1.39.0)", "mypy-boto3-es (>=1.38.0,<1.39.0)", "mypy-boto3-events (>=1.38.0,<1.39.0)", "mypy-boto3-evidently (>=1.38.0,<1.39.0)", "mypy-boto3-finspace (>=1.38.0,<1.39.0)", "mypy-boto3-finspace-data (>=1.38.0,<1.39.0)", "mypy-boto3-firehose (>=1.38.0,<1.39.0)", "mypy-boto3-fis (>=1.38.0,<1.39.0)", "mypy-boto3-fms (>=1.38.0,<1.39.0)", "mypy-boto3-forecast (>=1.38.0,<1.39.0)", "mypy-boto3-forecastquery (>=1.38.0,<1.39.0)", "mypy-boto3-frauddetector (>=1.38.0,<1.39.0)", "mypy-boto3-freetier (>=1.38.0,<1.39.0)", "mypy-boto3-fsx (>=1.38.0,<1.39.0)", "mypy-boto3-gamelift (>=1.38.0,<1.39.0)", "mypy-boto3-gameliftstreams (>=1.38.0,<1.39.0)", "mypy-boto3-geo-maps (>=1.38.0,<1.39.0)", "mypy-boto3-geo-places (>=1.38.0,<1.39.0)", "mypy-boto3-geo-routes (>=1.38.0,<1.39.0)", "mypy-boto3-glacier (>=1.38.0,<1.39.0)", "mypy-boto3-globalaccelerator (>=1.38.0,<1.39.0)", "mypy-boto3-glue (>=1.38.0,<1.39.0)", "mypy-boto3-grafana (>=1.38.0,<1.39.0)", "mypy-boto3-greengrass (>=1.38.0,<1.39.0)", "mypy-boto3-greengrassv2 (>=1.38.0,<1.39.0)", "mypy-boto3-groundstation (>=1.38.0,<1.39.0)", "mypy-boto3-guardduty (>=1.38.0,<1.39.0)", "mypy-boto3-health (>=1.38.0,<1.39.0)", "mypy-boto3-healthlake (>=1.38.0,<1.39.0)", "mypy-boto3-iam (>=1.38.0,<1.39.0)", "mypy-boto3-identitystore (>=1.38.0,<1.39.0)", "mypy-boto3-imagebuilder (>=1.38.0,<1.39.0)", "mypy-boto3-importexport (>=1.38.0,<1.39.0)", "mypy-boto3-inspector (>=1.38.0,<1.39.0)", "mypy-boto3-inspector-scan (>=1.38.0,<1.39.0)", "mypy-boto3-inspector2 (>=1.38.0,<1.39.0)", "mypy-boto3-internetmonitor (>=1.38.0,<1.39.0)", "mypy-boto3-invoicing (>=1.38.0,<1.39.0)", "mypy-boto3-iot (>=1.38.0,<1.39.0)", "mypy-boto3-iot-data (>=1.38.0,<1.39.0)", "mypy-boto3-iot-jobs-data (>=1.38.0,<1.39.0)", "mypy-boto3-iot-managed-integrations (>=1.38.0,<1.39.0)", "mypy-boto3-iotanalytics (>=1.38.0,<1.39.0)", "mypy-boto3-iotdeviceadvisor (>=1.38.0,<1.39.0)", "mypy-boto3-iotevents (>=1.38.0,<1.39.0)", "mypy-boto3-iotevents-data (>=1.38.0,<1.39.0)", "mypy-boto3-iotfleethub (>=1.38.0,<1.39.0)", "mypy-boto3-iotfleetwise (>=1.38.0,<1.39.0)", "mypy-boto3-iotsecuretunneling (>=1.38.0,<1.39.0)", "mypy-boto3-iotsitewise (>=1.38.0,<1.39.0)", "mypy-boto3-iotthingsgraph (>=1.38.0,<1.39.0)", "mypy-boto3-iottwinmaker (>=1.38.0,<1.39.0)", "mypy-boto3-iotwireless (>=1.38.0,<1.39.0)", "mypy-boto3-ivs (>=1.38.0,<1.39.0)", "mypy-boto3-ivs-realtime (>=1.38.0,<1.39.0)", "mypy-boto3-ivschat (>=1.38.0,<1.39.0)", "mypy-boto3-kafka (>=1.38.0,<1.39.0)", "mypy-boto3-kafkaconnect (>=1.38.0,<1.39.0)", "mypy-boto3-kendra (>=1.38.0,<1.39.0)", "mypy-boto3-kendra-ranking (>=1.38.0,<1.39.0)", "mypy-boto3-keyspaces (>=1.38.0,<1.39.0)", "mypy-boto3-kinesis (>=1.38.0,<1.39.0)", "mypy-boto3-kinesis-video-archived-media (>=1.38.0,<1.39.0)", "mypy-boto3-kinesis-video-media (>=1.38.0,<1.39.0)", "mypy-boto3-kinesis-video-signaling (>=1.38.0,<1.39.0)", "mypy-boto3-kinesis-video-webrtc-storage (>=1.38.0,<1.39.0)", "mypy-boto3-kinesisanalytics (>=1.38.0,<1.39.0)", "mypy-boto3-kinesisanalyticsv2 (>=1.38.0,<1.39.0)", "mypy-boto3-kinesisvideo (>=1.38.0,<1.39.0)", "mypy-boto3-kms (>=1.38.0,<1.39.0)", "mypy-boto3-lakeformation (>=1.38.0,<1.39.0)", "mypy-boto3-lambda (>=1.38.0,<1.39.0)", "mypy-boto3-launch-wizard (>=1.38.0,<1.39.0)", "mypy-boto3-lex-models (>=1.38.0,<1.39.0)", "mypy-boto3-lex-runtime (>=1.38.0,<1.39.0)", "mypy-boto3-lexv2-models (>=1.38.0,<1.39.0)", "mypy-boto3-lexv2-runtime (>=1.38.0,<1.39.0)", "mypy-boto3-license-manager (>=1.38.0,<1.39.0)", "mypy-boto3-license-manager-linux-subscriptions (>=1.38.0,<1.39.0)", "mypy-boto3-license-manager-user-subscriptions (>=1.38.0,<1.39.0)", "mypy-boto3-lightsail (>=1.38.0,<1.39.0)", "mypy-boto3-location (>=1.38.0,<1.39.0)", "mypy-boto3-logs (>=1.38.0,<1.39.0)", "mypy-boto3-lookoutequipment (>=1.38.0,<1.39.0)", "mypy-boto3-lookoutmetrics (>=1.38.0,<1.39.0)", "mypy-boto3-lookoutvision (>=1.38.0,<1.39.0)", "mypy-boto3-m2 (>=1.38.0,<1.39.0)", "mypy-boto3-machinelearning (>=1.38.0,<1.39.0)", "mypy-boto3-macie2 (>=1.38.0,<1.39.0)", "mypy-boto3-mailmanager (>=1.38.0,<1.39.0)", "mypy-boto3-managedblockchain (>=1.38.0,<1.39.0)", "mypy-boto3-managedblockchain-query (>=1.38.0,<1.39.0)", "mypy-boto3-marketplace-agreement (>=1.38.0,<1.39.0)", "mypy-boto3-marketplace-catalog (>=1.38.0,<1.39.0)", "mypy-boto3-marketplace-deployment (>=1.38.0,<1.39.0)", "mypy-boto3-marketplace-entitlement (>=1.38.0,<1.39.0)", "mypy-boto3-marketplace-reporting (>=1.38.0,<1.39.0)", "mypy-boto3-marketplacecommerceanalytics (>=1.38.0,<1.39.0)", "mypy-boto3-mediaconnect (>=1.38.0,<1.39.0)", "mypy-boto3-mediaconvert (>=1.38.0,<1.39.0)", "mypy-boto3-medialive (>=1.38.0,<1.39.0)", "mypy-boto3-mediapackage (>=1.38.0,<1.39.0)", "mypy-boto3-mediapackage-vod (>=1.38.0,<1.39.0)", "mypy-boto3-mediapackagev2 (>=1.38.0,<1.39.0)", "mypy-boto3-mediastore (>=1.38.0,<1.39.0)", "mypy-boto3-mediastore-data (>=1.38.0,<1.39.0)", "mypy-boto3-mediatailor (>=1.38.0,<1.39.0)", "mypy-boto3-medical-imaging (>=1.38.0,<1.39.0)", "mypy-boto3-memorydb (>=1.38.0,<1.39.0)", "mypy-boto3-meteringmarketplace (>=1.38.0,<1.39.0)", "mypy-boto3-mgh (>=1.38.0,<1.39.0)", "mypy-boto3-mgn (>=1.38.0,<1.39.0)", "mypy-boto3-migration-hub-refactor-spaces (>=1.38.0,<1.39.0)", "mypy-boto3-migrationhub-config (>=1.38.0,<1.39.0)", "mypy-boto3-migrationhuborchestrator (>=1.38.0,<1.39.0)", "mypy-boto3-migrationhubstrategy (>=1.38.0,<1.39.0)", "mypy-boto3-mq (>=1.38.0,<1.39.0)", "mypy-boto3-mturk (>=1.38.0,<1.39.0)", "mypy-boto3-mwaa (>=1.38.0,<1.39.0)", "mypy-boto3-neptune (>=1.38.0,<1.39.0)", "mypy-boto3-neptune-graph (>=1.38.0,<1.39.0)", "mypy-boto3-neptunedata (>=1.38.0,<1.39.0)", "mypy-boto3-network-firewall (>=1.38.0,<1.39.0)", "mypy-boto3-networkflowmonitor (>=1.38.0,<1.39.0)", "mypy-boto3-networkmanager (>=1.38.0,<1.39.0)", "mypy-boto3-networkmonitor (>=1.38.0,<1.39.0)", "mypy-boto3-notifications (>=1.38.0,<1.39.0)", "mypy-boto3-notificationscontacts (>=1.38.0,<1.39.0)", "mypy-boto3-oam (>=1.38.0,<1.39.0)", "mypy-boto3-observabilityadmin (>=1.38.0,<1.39.0)", "mypy-boto3-omics (>=1.38.0,<1.39.0)", "mypy-boto3-opensearch (>=1.38.0,<1.39.0)", "mypy-boto3-opensearchserverless (>=1.38.0,<1.39.0)", "mypy-boto3-opsworks (>=1.38.0,<1.39.0)", "mypy-boto3-opsworkscm (>=1.38.0,<1.39.0)", "mypy-boto3-organizations (>=1.38.0,<1.39.0)", "mypy-boto3-osis (>=1.38.0,<1.39.0)", "mypy-boto3-outposts (>=1.38.0,<1.39.0)", "mypy-boto3-panorama (>=1.38.0,<1.39.0)", "mypy-boto3-partnercentral-selling (>=1.38.0,<1.39.0)", "mypy-boto3-payment-cryptography (>=1.38.0,<1.39.0)", "mypy-boto3-payment-cryptography-data (>=1.38.0,<1.39.0)", "mypy-boto3-pca-connector-ad (>=1.38.0,<1.39.0)", "mypy-boto3-pca-connector-scep (>=1.38.0,<1.39.0)", "mypy-boto3-pcs (>=1.38.0,<1.39.0)", "mypy-boto3-personalize (>=1.38.0,<1.39.0)", "mypy-boto3-personalize-events (>=1.38.0,<1.39.0)", "mypy-boto3-personalize-runtime (>=1.38.0,<1.39.0)", "mypy-boto3-pi (>=1.38.0,<1.39.0)", "mypy-boto3-pinpoint (>=1.38.0,<1.39.0)", "mypy-boto3-pinpoint-email (>=1.38.0,<1.39.0)", "mypy-boto3-pinpoint-sms-voice (>=1.38.0,<1.39.0)", "mypy-boto3-pinpoint-sms-voice-v2 (>=1.38.0,<1.39.0)", "mypy-boto3-pipes (>=1.38.0,<1.39.0)", "mypy-boto3-polly (>=1.38.0,<1.39.0)", "mypy-boto3-pricing (>=1.38.0,<1.39.0)", "mypy-boto3-privatenetworks (>=1.38.0,<1.39.0)", "mypy-boto3-proton (>=1.38.0,<1.39.0)", "mypy-boto3-qapps (>=1.38.0,<1.39.0)", "mypy-boto3-qbusiness (>=1.38.0,<1.39.0)", "mypy-boto3-qconnect (>=1.38.0,<1.39.0)", "mypy-boto3-qldb (>=1.38.0,<1.39.0)", "mypy-boto3-qldb-session (>=1.38.0,<1.39.0)", "mypy-boto3-quicksight (>=1.38.0,<1.39.0)", "mypy-boto3-ram (>=1.38.0,<1.39.0)", "mypy-boto3-rbin (>=1.38.0,<1.39.0)", "mypy-boto3-rds (>=1.38.0,<1.39.0)", "mypy-boto3-rds-data (>=1.38.0,<1.39.0)", "mypy-boto3-redshift (>=1.38.0,<1.39.0)", "mypy-boto3-redshift-data (>=1.38.0,<1.39.0)", "mypy-boto3-redshift-serverless (>=1.38.0,<1.39.0)", "mypy-boto3-rekognition (>=1.38.0,<1.39.0)", "mypy-boto3-repostspace (>=1.38.0,<1.39.0)", "mypy-boto3-resiliencehub (>=1.38.0,<1.39.0)", "mypy-boto3-resource-explorer-2 (>=1.38.0,<1.39.0)", "mypy-boto3-resource-groups (>=1.38.0,<1.39.0)", "mypy-boto3-resourcegroupstaggingapi (>=1.38.0,<1.39.0)", "mypy-boto3-robomaker (>=1.38.0,<1.39.0)", "mypy-boto3-rolesanywhere (>=1.38.0,<1.39.0)", "mypy-boto3-route53 (>=1.38.0,<1.39.0)", "mypy-boto3-route53-recovery-cluster (>=1.38.0,<1.39.0)", "mypy-boto3-route53-recovery-control-config (>=1.38.0,<1.39.0)", "mypy-boto3-route53-recovery-readiness (>=1.38.0,<1.39.0)", "mypy-boto3-route53domains (>=1.38.0,<1.39.0)", "mypy-boto3-route53profiles (>=1.38.0,<1.39.0)", "mypy-boto3-route53resolver (>=1.38.0,<1.39.0)", "mypy-boto3-rum (>=1.38.0,<1.39.0)", "mypy-boto3-s3 (>=1.38.0,<1.39.0)", "mypy-boto3-s3control (>=1.38.0,<1.39.0)", "mypy-boto3-s3outposts (>=1.38.0,<1.39.0)", "mypy-boto3-s3tables (>=1.38.0,<1.39.0)", "mypy-boto3-sagemaker (>=1.38.0,<1.39.0)", "mypy-boto3-sagemaker-a2i-runtime (>=1.38.0,<1.39.0)", "mypy-boto3-sagemaker-edge (>=1.38.0,<1.39.0)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.38.0,<1.39.0)", "mypy-boto3-sagemaker-geospatial (>=1.38.0,<1.39.0)", "mypy-boto3-sagemaker-metrics (>=1.38.0,<1.39.0)", "mypy-boto3-sagemaker-runtime (>=1.38.0,<1.39.0)", "mypy-boto3-savingsplans (>=1.38.0,<1.39.0)", "mypy-boto3-scheduler (>=1.38.0,<1.39.0)", "mypy-boto3-schemas (>=1.38.0,<1.39.0)", "mypy-boto3-sdb (>=1.38.0,<1.39.0)", "mypy-boto3-secretsmanager (>=1.38.0,<1.39.0)", "mypy-boto3-security-ir (>=1.38.0,<1.39.0)", "mypy-boto3-securityhub (>=1.38.0,<1.39.0)", "mypy-boto3-securitylake (>=1.38.0,<1.39.0)", "mypy-boto3-serverlessrepo (>=1.38.0,<1.39.0)", "mypy-boto3-service-quotas (>=1.38.0,<1.39.0)", "mypy-boto3-servicecatalog (>=1.38.0,<1.39.0)", "mypy-boto3-servicecatalog-appregistry (>=1.38.0,<1.39.0)", "mypy-boto3-servicediscovery (>=1.38.0,<1.39.0)", "mypy-boto3-ses (>=1.38.0,<1.39.0)", "mypy-boto3-sesv2 (>=1.38.0,<1.39.0)", "mypy-boto3-shield (>=1.38.0,<1.39.0)", "mypy-boto3-signer (>=1.38.0,<1.39.0)", "mypy-boto3-simspaceweaver (>=1.38.0,<1.39.0)", "mypy-boto3-sms (>=1.38.0,<1.39.0)", "mypy-boto3-snow-device-management (>=1.38.0,<1.39.0)", "mypy-boto3-snowball (>=1.38.0,<1.39.0)", "mypy-boto3-sns (>=1.38.0,<1.39.0)", "mypy-boto3-socialmessaging (>=1.38.0,<1.39.0)", "mypy-boto3-sqs (>=1.38.0,<1.39.0)", "mypy-boto3-ssm (>=1.38.0,<1.39.0)", "mypy-boto3-ssm-contacts (>=1.38.0,<1.39.0)", "mypy-boto3-ssm-guiconnect (>=1.38.0,<1.39.0)", "mypy-boto3-ssm-incidents (>=1.38.0,<1.39.0)", "mypy-boto3-ssm-quicksetup (>=1.38.0,<1.39.0)", "mypy-boto3-ssm-sap (>=1.38.0,<1.39.0)", "mypy-boto3-sso (>=1.38.0,<1.39.0)", "mypy-boto3-sso-admin (>=1.38.0,<1.39.0)", "mypy-boto3-sso-oidc (>=1.38.0,<1.39.0)", "mypy-boto3-stepfunctions (>=1.38.0,<1.39.0)", "mypy-boto3-storagegateway (>=1.38.0,<1.39.0)", "mypy-boto3-sts (>=1.38.0,<1.39.0)", "mypy-boto3-supplychain (>=1.38.0,<1.39.0)", "mypy-boto3-support (>=1.38.0,<1.39.0)", "mypy-boto3-support-app (>=1.38.0,<1.39.0)", "mypy-boto3-swf (>=1.38.0,<1.39.0)", "mypy-boto3-synthetics (>=1.38.0,<1.39.0)", "mypy-boto3-taxsettings (>=1.38.0,<1.39.0)", "mypy-boto3-textract (>=1.38.0,<1.39.0)", "mypy-boto3-timestream-influxdb (>=1.38.0,<1.39.0)", "mypy-boto3-timestream-query (>=1.38.0,<1.39.0)", "mypy-boto3-timestream-write (>=1.38.0,<1.39.0)", "mypy-boto3-tnb (>=1.38.0,<1.39.0)", "mypy-boto3-transcribe (>=1.38.0,<1.39.0)", "mypy-boto3-transfer (>=1.38.0,<1.39.0)", "mypy-boto3-translate (>=1.38.0,<1.39.0)", "mypy-boto3-trustedadvisor (>=1.38.0,<1.39.0)", "mypy-boto3-verifiedpermissions (>=1.38.0,<1.39.0)", "mypy-boto3-voice-id (>=1.38.0,<1.39.0)", "mypy-boto3-vpc-lattice (>=1.38.0,<1.39.0)", "mypy-boto3-waf (>=1.38.0,<1.39.0)", "mypy-boto3-waf-regional (>=1.38.0,<1.39.0)", "mypy-boto3-wafv2 (>=1.38.0,<1.39.0)", "mypy-boto3-wellarchitected (>=1.38.0,<1.39.0)", "mypy-boto3-wisdom (>=1.38.0,<1.39.0)", "mypy-boto3-workdocs (>=1.38.0,<1.39.0)", "mypy-boto3-workmail (>=1.38.0,<1.39.0)", "mypy-boto3-workmailmessageflow (>=1.38.0,<1.39.0)", "mypy-boto3-workspaces (>=1.38.0,<1.39.0)", "mypy-boto3-workspaces-thin-client (>=1.38.0,<1.39.0)", "mypy-boto3-workspaces-web (>=1.38.0,<1.39.0)", "mypy-boto3-xray (>=1.38.0,<1.39.0)"] +amp = ["mypy-boto3-amp (>=1.38.0,<1.39.0)"] +amplify = ["mypy-boto3-amplify (>=1.38.0,<1.39.0)"] +amplifybackend = ["mypy-boto3-amplifybackend (>=1.38.0,<1.39.0)"] +amplifyuibuilder = ["mypy-boto3-amplifyuibuilder (>=1.38.0,<1.39.0)"] +apigateway = ["mypy-boto3-apigateway (>=1.38.0,<1.39.0)"] +apigatewaymanagementapi = ["mypy-boto3-apigatewaymanagementapi (>=1.38.0,<1.39.0)"] +apigatewayv2 = ["mypy-boto3-apigatewayv2 (>=1.38.0,<1.39.0)"] +appconfig = ["mypy-boto3-appconfig (>=1.38.0,<1.39.0)"] +appconfigdata = ["mypy-boto3-appconfigdata (>=1.38.0,<1.39.0)"] +appfabric = ["mypy-boto3-appfabric (>=1.38.0,<1.39.0)"] +appflow = ["mypy-boto3-appflow (>=1.38.0,<1.39.0)"] +appintegrations = ["mypy-boto3-appintegrations (>=1.38.0,<1.39.0)"] +application-autoscaling = ["mypy-boto3-application-autoscaling (>=1.38.0,<1.39.0)"] +application-insights = ["mypy-boto3-application-insights (>=1.38.0,<1.39.0)"] +application-signals = ["mypy-boto3-application-signals (>=1.38.0,<1.39.0)"] +applicationcostprofiler = ["mypy-boto3-applicationcostprofiler (>=1.38.0,<1.39.0)"] +appmesh = ["mypy-boto3-appmesh (>=1.38.0,<1.39.0)"] +apprunner = ["mypy-boto3-apprunner (>=1.38.0,<1.39.0)"] +appstream = ["mypy-boto3-appstream (>=1.38.0,<1.39.0)"] +appsync = ["mypy-boto3-appsync (>=1.38.0,<1.39.0)"] +apptest = ["mypy-boto3-apptest (>=1.38.0,<1.39.0)"] +arc-zonal-shift = ["mypy-boto3-arc-zonal-shift (>=1.38.0,<1.39.0)"] +artifact = ["mypy-boto3-artifact (>=1.38.0,<1.39.0)"] +athena = ["mypy-boto3-athena (>=1.38.0,<1.39.0)"] +auditmanager = ["mypy-boto3-auditmanager (>=1.38.0,<1.39.0)"] +autoscaling = ["mypy-boto3-autoscaling (>=1.38.0,<1.39.0)"] +autoscaling-plans = ["mypy-boto3-autoscaling-plans (>=1.38.0,<1.39.0)"] +b2bi = ["mypy-boto3-b2bi (>=1.38.0,<1.39.0)"] +backup = ["mypy-boto3-backup (>=1.38.0,<1.39.0)"] +backup-gateway = ["mypy-boto3-backup-gateway (>=1.38.0,<1.39.0)"] +backupsearch = ["mypy-boto3-backupsearch (>=1.38.0,<1.39.0)"] +batch = ["mypy-boto3-batch (>=1.38.0,<1.39.0)"] +bcm-data-exports = ["mypy-boto3-bcm-data-exports (>=1.38.0,<1.39.0)"] +bcm-pricing-calculator = ["mypy-boto3-bcm-pricing-calculator (>=1.38.0,<1.39.0)"] +bedrock = ["mypy-boto3-bedrock (>=1.38.0,<1.39.0)"] +bedrock-agent = ["mypy-boto3-bedrock-agent (>=1.38.0,<1.39.0)"] +bedrock-agent-runtime = ["mypy-boto3-bedrock-agent-runtime (>=1.38.0,<1.39.0)"] +bedrock-data-automation = ["mypy-boto3-bedrock-data-automation (>=1.38.0,<1.39.0)"] +bedrock-data-automation-runtime = ["mypy-boto3-bedrock-data-automation-runtime (>=1.38.0,<1.39.0)"] +bedrock-runtime = ["mypy-boto3-bedrock-runtime (>=1.38.0,<1.39.0)"] +billing = ["mypy-boto3-billing (>=1.38.0,<1.39.0)"] +billingconductor = ["mypy-boto3-billingconductor (>=1.38.0,<1.39.0)"] +boto3 = ["boto3 (==1.38.15)"] +braket = ["mypy-boto3-braket (>=1.38.0,<1.39.0)"] +budgets = ["mypy-boto3-budgets (>=1.38.0,<1.39.0)"] +ce = ["mypy-boto3-ce (>=1.38.0,<1.39.0)"] +chatbot = ["mypy-boto3-chatbot (>=1.38.0,<1.39.0)"] +chime = ["mypy-boto3-chime (>=1.38.0,<1.39.0)"] +chime-sdk-identity = ["mypy-boto3-chime-sdk-identity (>=1.38.0,<1.39.0)"] +chime-sdk-media-pipelines = ["mypy-boto3-chime-sdk-media-pipelines (>=1.38.0,<1.39.0)"] +chime-sdk-meetings = ["mypy-boto3-chime-sdk-meetings (>=1.38.0,<1.39.0)"] +chime-sdk-messaging = ["mypy-boto3-chime-sdk-messaging (>=1.38.0,<1.39.0)"] +chime-sdk-voice = ["mypy-boto3-chime-sdk-voice (>=1.38.0,<1.39.0)"] +cleanrooms = ["mypy-boto3-cleanrooms (>=1.38.0,<1.39.0)"] +cleanroomsml = ["mypy-boto3-cleanroomsml (>=1.38.0,<1.39.0)"] +cloud9 = ["mypy-boto3-cloud9 (>=1.38.0,<1.39.0)"] +cloudcontrol = ["mypy-boto3-cloudcontrol (>=1.38.0,<1.39.0)"] +clouddirectory = ["mypy-boto3-clouddirectory (>=1.38.0,<1.39.0)"] +cloudformation = ["mypy-boto3-cloudformation (>=1.38.0,<1.39.0)"] +cloudfront = ["mypy-boto3-cloudfront (>=1.38.0,<1.39.0)"] +cloudfront-keyvaluestore = ["mypy-boto3-cloudfront-keyvaluestore (>=1.38.0,<1.39.0)"] +cloudhsm = ["mypy-boto3-cloudhsm (>=1.38.0,<1.39.0)"] +cloudhsmv2 = ["mypy-boto3-cloudhsmv2 (>=1.38.0,<1.39.0)"] +cloudsearch = ["mypy-boto3-cloudsearch (>=1.38.0,<1.39.0)"] +cloudsearchdomain = ["mypy-boto3-cloudsearchdomain (>=1.38.0,<1.39.0)"] +cloudtrail = ["mypy-boto3-cloudtrail (>=1.38.0,<1.39.0)"] +cloudtrail-data = ["mypy-boto3-cloudtrail-data (>=1.38.0,<1.39.0)"] +cloudwatch = ["mypy-boto3-cloudwatch (>=1.38.0,<1.39.0)"] +codeartifact = ["mypy-boto3-codeartifact (>=1.38.0,<1.39.0)"] +codebuild = ["mypy-boto3-codebuild (>=1.38.0,<1.39.0)"] +codecatalyst = ["mypy-boto3-codecatalyst (>=1.38.0,<1.39.0)"] +codecommit = ["mypy-boto3-codecommit (>=1.38.0,<1.39.0)"] +codeconnections = ["mypy-boto3-codeconnections (>=1.38.0,<1.39.0)"] +codedeploy = ["mypy-boto3-codedeploy (>=1.38.0,<1.39.0)"] +codeguru-reviewer = ["mypy-boto3-codeguru-reviewer (>=1.38.0,<1.39.0)"] +codeguru-security = ["mypy-boto3-codeguru-security (>=1.38.0,<1.39.0)"] +codeguruprofiler = ["mypy-boto3-codeguruprofiler (>=1.38.0,<1.39.0)"] +codepipeline = ["mypy-boto3-codepipeline (>=1.38.0,<1.39.0)"] +codestar-connections = ["mypy-boto3-codestar-connections (>=1.38.0,<1.39.0)"] +codestar-notifications = ["mypy-boto3-codestar-notifications (>=1.38.0,<1.39.0)"] +cognito-identity = ["mypy-boto3-cognito-identity (>=1.38.0,<1.39.0)"] +cognito-idp = ["mypy-boto3-cognito-idp (>=1.38.0,<1.39.0)"] +cognito-sync = ["mypy-boto3-cognito-sync (>=1.38.0,<1.39.0)"] +comprehend = ["mypy-boto3-comprehend (>=1.38.0,<1.39.0)"] +comprehendmedical = ["mypy-boto3-comprehendmedical (>=1.38.0,<1.39.0)"] +compute-optimizer = ["mypy-boto3-compute-optimizer (>=1.38.0,<1.39.0)"] +config = ["mypy-boto3-config (>=1.38.0,<1.39.0)"] +connect = ["mypy-boto3-connect (>=1.38.0,<1.39.0)"] +connect-contact-lens = ["mypy-boto3-connect-contact-lens (>=1.38.0,<1.39.0)"] +connectcampaigns = ["mypy-boto3-connectcampaigns (>=1.38.0,<1.39.0)"] +connectcampaignsv2 = ["mypy-boto3-connectcampaignsv2 (>=1.38.0,<1.39.0)"] +connectcases = ["mypy-boto3-connectcases (>=1.38.0,<1.39.0)"] +connectparticipant = ["mypy-boto3-connectparticipant (>=1.38.0,<1.39.0)"] +controlcatalog = ["mypy-boto3-controlcatalog (>=1.38.0,<1.39.0)"] +controltower = ["mypy-boto3-controltower (>=1.38.0,<1.39.0)"] +cost-optimization-hub = ["mypy-boto3-cost-optimization-hub (>=1.38.0,<1.39.0)"] +cur = ["mypy-boto3-cur (>=1.38.0,<1.39.0)"] +customer-profiles = ["mypy-boto3-customer-profiles (>=1.38.0,<1.39.0)"] +databrew = ["mypy-boto3-databrew (>=1.38.0,<1.39.0)"] +dataexchange = ["mypy-boto3-dataexchange (>=1.38.0,<1.39.0)"] +datapipeline = ["mypy-boto3-datapipeline (>=1.38.0,<1.39.0)"] +datasync = ["mypy-boto3-datasync (>=1.38.0,<1.39.0)"] +datazone = ["mypy-boto3-datazone (>=1.38.0,<1.39.0)"] +dax = ["mypy-boto3-dax (>=1.38.0,<1.39.0)"] +deadline = ["mypy-boto3-deadline (>=1.38.0,<1.39.0)"] +detective = ["mypy-boto3-detective (>=1.38.0,<1.39.0)"] +devicefarm = ["mypy-boto3-devicefarm (>=1.38.0,<1.39.0)"] +devops-guru = ["mypy-boto3-devops-guru (>=1.38.0,<1.39.0)"] +directconnect = ["mypy-boto3-directconnect (>=1.38.0,<1.39.0)"] +discovery = ["mypy-boto3-discovery (>=1.38.0,<1.39.0)"] +dlm = ["mypy-boto3-dlm (>=1.38.0,<1.39.0)"] +dms = ["mypy-boto3-dms (>=1.38.0,<1.39.0)"] +docdb = ["mypy-boto3-docdb (>=1.38.0,<1.39.0)"] +docdb-elastic = ["mypy-boto3-docdb-elastic (>=1.38.0,<1.39.0)"] +drs = ["mypy-boto3-drs (>=1.38.0,<1.39.0)"] +ds = ["mypy-boto3-ds (>=1.38.0,<1.39.0)"] +ds-data = ["mypy-boto3-ds-data (>=1.38.0,<1.39.0)"] +dsql = ["mypy-boto3-dsql (>=1.38.0,<1.39.0)"] +dynamodb = ["mypy-boto3-dynamodb (>=1.38.0,<1.39.0)"] +dynamodbstreams = ["mypy-boto3-dynamodbstreams (>=1.38.0,<1.39.0)"] +ebs = ["mypy-boto3-ebs (>=1.38.0,<1.39.0)"] +ec2 = ["mypy-boto3-ec2 (>=1.38.0,<1.39.0)"] +ec2-instance-connect = ["mypy-boto3-ec2-instance-connect (>=1.38.0,<1.39.0)"] +ecr = ["mypy-boto3-ecr (>=1.38.0,<1.39.0)"] +ecr-public = ["mypy-boto3-ecr-public (>=1.38.0,<1.39.0)"] +ecs = ["mypy-boto3-ecs (>=1.38.0,<1.39.0)"] +efs = ["mypy-boto3-efs (>=1.38.0,<1.39.0)"] +eks = ["mypy-boto3-eks (>=1.38.0,<1.39.0)"] +eks-auth = ["mypy-boto3-eks-auth (>=1.38.0,<1.39.0)"] +elasticache = ["mypy-boto3-elasticache (>=1.38.0,<1.39.0)"] +elasticbeanstalk = ["mypy-boto3-elasticbeanstalk (>=1.38.0,<1.39.0)"] +elastictranscoder = ["mypy-boto3-elastictranscoder (>=1.38.0,<1.39.0)"] +elb = ["mypy-boto3-elb (>=1.38.0,<1.39.0)"] +elbv2 = ["mypy-boto3-elbv2 (>=1.38.0,<1.39.0)"] +emr = ["mypy-boto3-emr (>=1.38.0,<1.39.0)"] +emr-containers = ["mypy-boto3-emr-containers (>=1.38.0,<1.39.0)"] +emr-serverless = ["mypy-boto3-emr-serverless (>=1.38.0,<1.39.0)"] +entityresolution = ["mypy-boto3-entityresolution (>=1.38.0,<1.39.0)"] +es = ["mypy-boto3-es (>=1.38.0,<1.39.0)"] +essential = ["mypy-boto3-cloudformation (>=1.38.0,<1.39.0)", "mypy-boto3-dynamodb (>=1.38.0,<1.39.0)", "mypy-boto3-ec2 (>=1.38.0,<1.39.0)", "mypy-boto3-lambda (>=1.38.0,<1.39.0)", "mypy-boto3-rds (>=1.38.0,<1.39.0)", "mypy-boto3-s3 (>=1.38.0,<1.39.0)", "mypy-boto3-sqs (>=1.38.0,<1.39.0)"] +events = ["mypy-boto3-events (>=1.38.0,<1.39.0)"] +evidently = ["mypy-boto3-evidently (>=1.38.0,<1.39.0)"] +finspace = ["mypy-boto3-finspace (>=1.38.0,<1.39.0)"] +finspace-data = ["mypy-boto3-finspace-data (>=1.38.0,<1.39.0)"] +firehose = ["mypy-boto3-firehose (>=1.38.0,<1.39.0)"] +fis = ["mypy-boto3-fis (>=1.38.0,<1.39.0)"] +fms = ["mypy-boto3-fms (>=1.38.0,<1.39.0)"] +forecast = ["mypy-boto3-forecast (>=1.38.0,<1.39.0)"] +forecastquery = ["mypy-boto3-forecastquery (>=1.38.0,<1.39.0)"] +frauddetector = ["mypy-boto3-frauddetector (>=1.38.0,<1.39.0)"] +freetier = ["mypy-boto3-freetier (>=1.38.0,<1.39.0)"] +fsx = ["mypy-boto3-fsx (>=1.38.0,<1.39.0)"] +full = ["boto3-stubs-full (>=1.38.0,<1.39.0)"] +gamelift = ["mypy-boto3-gamelift (>=1.38.0,<1.39.0)"] +gameliftstreams = ["mypy-boto3-gameliftstreams (>=1.38.0,<1.39.0)"] +geo-maps = ["mypy-boto3-geo-maps (>=1.38.0,<1.39.0)"] +geo-places = ["mypy-boto3-geo-places (>=1.38.0,<1.39.0)"] +geo-routes = ["mypy-boto3-geo-routes (>=1.38.0,<1.39.0)"] +glacier = ["mypy-boto3-glacier (>=1.38.0,<1.39.0)"] +globalaccelerator = ["mypy-boto3-globalaccelerator (>=1.38.0,<1.39.0)"] +glue = ["mypy-boto3-glue (>=1.38.0,<1.39.0)"] +grafana = ["mypy-boto3-grafana (>=1.38.0,<1.39.0)"] +greengrass = ["mypy-boto3-greengrass (>=1.38.0,<1.39.0)"] +greengrassv2 = ["mypy-boto3-greengrassv2 (>=1.38.0,<1.39.0)"] +groundstation = ["mypy-boto3-groundstation (>=1.38.0,<1.39.0)"] +guardduty = ["mypy-boto3-guardduty (>=1.38.0,<1.39.0)"] +health = ["mypy-boto3-health (>=1.38.0,<1.39.0)"] +healthlake = ["mypy-boto3-healthlake (>=1.38.0,<1.39.0)"] +iam = ["mypy-boto3-iam (>=1.38.0,<1.39.0)"] +identitystore = ["mypy-boto3-identitystore (>=1.38.0,<1.39.0)"] +imagebuilder = ["mypy-boto3-imagebuilder (>=1.38.0,<1.39.0)"] +importexport = ["mypy-boto3-importexport (>=1.38.0,<1.39.0)"] +inspector = ["mypy-boto3-inspector (>=1.38.0,<1.39.0)"] +inspector-scan = ["mypy-boto3-inspector-scan (>=1.38.0,<1.39.0)"] +inspector2 = ["mypy-boto3-inspector2 (>=1.38.0,<1.39.0)"] +internetmonitor = ["mypy-boto3-internetmonitor (>=1.38.0,<1.39.0)"] +invoicing = ["mypy-boto3-invoicing (>=1.38.0,<1.39.0)"] +iot = ["mypy-boto3-iot (>=1.38.0,<1.39.0)"] +iot-data = ["mypy-boto3-iot-data (>=1.38.0,<1.39.0)"] +iot-jobs-data = ["mypy-boto3-iot-jobs-data (>=1.38.0,<1.39.0)"] +iot-managed-integrations = ["mypy-boto3-iot-managed-integrations (>=1.38.0,<1.39.0)"] +iotanalytics = ["mypy-boto3-iotanalytics (>=1.38.0,<1.39.0)"] +iotdeviceadvisor = ["mypy-boto3-iotdeviceadvisor (>=1.38.0,<1.39.0)"] +iotevents = ["mypy-boto3-iotevents (>=1.38.0,<1.39.0)"] +iotevents-data = ["mypy-boto3-iotevents-data (>=1.38.0,<1.39.0)"] +iotfleethub = ["mypy-boto3-iotfleethub (>=1.38.0,<1.39.0)"] +iotfleetwise = ["mypy-boto3-iotfleetwise (>=1.38.0,<1.39.0)"] +iotsecuretunneling = ["mypy-boto3-iotsecuretunneling (>=1.38.0,<1.39.0)"] +iotsitewise = ["mypy-boto3-iotsitewise (>=1.38.0,<1.39.0)"] +iotthingsgraph = ["mypy-boto3-iotthingsgraph (>=1.38.0,<1.39.0)"] +iottwinmaker = ["mypy-boto3-iottwinmaker (>=1.38.0,<1.39.0)"] +iotwireless = ["mypy-boto3-iotwireless (>=1.38.0,<1.39.0)"] +ivs = ["mypy-boto3-ivs (>=1.38.0,<1.39.0)"] +ivs-realtime = ["mypy-boto3-ivs-realtime (>=1.38.0,<1.39.0)"] +ivschat = ["mypy-boto3-ivschat (>=1.38.0,<1.39.0)"] +kafka = ["mypy-boto3-kafka (>=1.38.0,<1.39.0)"] +kafkaconnect = ["mypy-boto3-kafkaconnect (>=1.38.0,<1.39.0)"] +kendra = ["mypy-boto3-kendra (>=1.38.0,<1.39.0)"] +kendra-ranking = ["mypy-boto3-kendra-ranking (>=1.38.0,<1.39.0)"] +keyspaces = ["mypy-boto3-keyspaces (>=1.38.0,<1.39.0)"] +kinesis = ["mypy-boto3-kinesis (>=1.38.0,<1.39.0)"] +kinesis-video-archived-media = ["mypy-boto3-kinesis-video-archived-media (>=1.38.0,<1.39.0)"] +kinesis-video-media = ["mypy-boto3-kinesis-video-media (>=1.38.0,<1.39.0)"] +kinesis-video-signaling = ["mypy-boto3-kinesis-video-signaling (>=1.38.0,<1.39.0)"] +kinesis-video-webrtc-storage = ["mypy-boto3-kinesis-video-webrtc-storage (>=1.38.0,<1.39.0)"] +kinesisanalytics = ["mypy-boto3-kinesisanalytics (>=1.38.0,<1.39.0)"] +kinesisanalyticsv2 = ["mypy-boto3-kinesisanalyticsv2 (>=1.38.0,<1.39.0)"] +kinesisvideo = ["mypy-boto3-kinesisvideo (>=1.38.0,<1.39.0)"] +kms = ["mypy-boto3-kms (>=1.38.0,<1.39.0)"] +lakeformation = ["mypy-boto3-lakeformation (>=1.38.0,<1.39.0)"] +lambda = ["mypy-boto3-lambda (>=1.38.0,<1.39.0)"] +launch-wizard = ["mypy-boto3-launch-wizard (>=1.38.0,<1.39.0)"] +lex-models = ["mypy-boto3-lex-models (>=1.38.0,<1.39.0)"] +lex-runtime = ["mypy-boto3-lex-runtime (>=1.38.0,<1.39.0)"] +lexv2-models = ["mypy-boto3-lexv2-models (>=1.38.0,<1.39.0)"] +lexv2-runtime = ["mypy-boto3-lexv2-runtime (>=1.38.0,<1.39.0)"] +license-manager = ["mypy-boto3-license-manager (>=1.38.0,<1.39.0)"] +license-manager-linux-subscriptions = ["mypy-boto3-license-manager-linux-subscriptions (>=1.38.0,<1.39.0)"] +license-manager-user-subscriptions = ["mypy-boto3-license-manager-user-subscriptions (>=1.38.0,<1.39.0)"] +lightsail = ["mypy-boto3-lightsail (>=1.38.0,<1.39.0)"] +location = ["mypy-boto3-location (>=1.38.0,<1.39.0)"] +logs = ["mypy-boto3-logs (>=1.38.0,<1.39.0)"] +lookoutequipment = ["mypy-boto3-lookoutequipment (>=1.38.0,<1.39.0)"] +lookoutmetrics = ["mypy-boto3-lookoutmetrics (>=1.38.0,<1.39.0)"] +lookoutvision = ["mypy-boto3-lookoutvision (>=1.38.0,<1.39.0)"] +m2 = ["mypy-boto3-m2 (>=1.38.0,<1.39.0)"] +machinelearning = ["mypy-boto3-machinelearning (>=1.38.0,<1.39.0)"] +macie2 = ["mypy-boto3-macie2 (>=1.38.0,<1.39.0)"] +mailmanager = ["mypy-boto3-mailmanager (>=1.38.0,<1.39.0)"] +managedblockchain = ["mypy-boto3-managedblockchain (>=1.38.0,<1.39.0)"] +managedblockchain-query = ["mypy-boto3-managedblockchain-query (>=1.38.0,<1.39.0)"] +marketplace-agreement = ["mypy-boto3-marketplace-agreement (>=1.38.0,<1.39.0)"] +marketplace-catalog = ["mypy-boto3-marketplace-catalog (>=1.38.0,<1.39.0)"] +marketplace-deployment = ["mypy-boto3-marketplace-deployment (>=1.38.0,<1.39.0)"] +marketplace-entitlement = ["mypy-boto3-marketplace-entitlement (>=1.38.0,<1.39.0)"] +marketplace-reporting = ["mypy-boto3-marketplace-reporting (>=1.38.0,<1.39.0)"] +marketplacecommerceanalytics = ["mypy-boto3-marketplacecommerceanalytics (>=1.38.0,<1.39.0)"] +mediaconnect = ["mypy-boto3-mediaconnect (>=1.38.0,<1.39.0)"] +mediaconvert = ["mypy-boto3-mediaconvert (>=1.38.0,<1.39.0)"] +medialive = ["mypy-boto3-medialive (>=1.38.0,<1.39.0)"] +mediapackage = ["mypy-boto3-mediapackage (>=1.38.0,<1.39.0)"] +mediapackage-vod = ["mypy-boto3-mediapackage-vod (>=1.38.0,<1.39.0)"] +mediapackagev2 = ["mypy-boto3-mediapackagev2 (>=1.38.0,<1.39.0)"] +mediastore = ["mypy-boto3-mediastore (>=1.38.0,<1.39.0)"] +mediastore-data = ["mypy-boto3-mediastore-data (>=1.38.0,<1.39.0)"] +mediatailor = ["mypy-boto3-mediatailor (>=1.38.0,<1.39.0)"] +medical-imaging = ["mypy-boto3-medical-imaging (>=1.38.0,<1.39.0)"] +memorydb = ["mypy-boto3-memorydb (>=1.38.0,<1.39.0)"] +meteringmarketplace = ["mypy-boto3-meteringmarketplace (>=1.38.0,<1.39.0)"] +mgh = ["mypy-boto3-mgh (>=1.38.0,<1.39.0)"] +mgn = ["mypy-boto3-mgn (>=1.38.0,<1.39.0)"] +migration-hub-refactor-spaces = ["mypy-boto3-migration-hub-refactor-spaces (>=1.38.0,<1.39.0)"] +migrationhub-config = ["mypy-boto3-migrationhub-config (>=1.38.0,<1.39.0)"] +migrationhuborchestrator = ["mypy-boto3-migrationhuborchestrator (>=1.38.0,<1.39.0)"] +migrationhubstrategy = ["mypy-boto3-migrationhubstrategy (>=1.38.0,<1.39.0)"] +mq = ["mypy-boto3-mq (>=1.38.0,<1.39.0)"] +mturk = ["mypy-boto3-mturk (>=1.38.0,<1.39.0)"] +mwaa = ["mypy-boto3-mwaa (>=1.38.0,<1.39.0)"] +neptune = ["mypy-boto3-neptune (>=1.38.0,<1.39.0)"] +neptune-graph = ["mypy-boto3-neptune-graph (>=1.38.0,<1.39.0)"] +neptunedata = ["mypy-boto3-neptunedata (>=1.38.0,<1.39.0)"] +network-firewall = ["mypy-boto3-network-firewall (>=1.38.0,<1.39.0)"] +networkflowmonitor = ["mypy-boto3-networkflowmonitor (>=1.38.0,<1.39.0)"] +networkmanager = ["mypy-boto3-networkmanager (>=1.38.0,<1.39.0)"] +networkmonitor = ["mypy-boto3-networkmonitor (>=1.38.0,<1.39.0)"] +notifications = ["mypy-boto3-notifications (>=1.38.0,<1.39.0)"] +notificationscontacts = ["mypy-boto3-notificationscontacts (>=1.38.0,<1.39.0)"] +oam = ["mypy-boto3-oam (>=1.38.0,<1.39.0)"] +observabilityadmin = ["mypy-boto3-observabilityadmin (>=1.38.0,<1.39.0)"] +omics = ["mypy-boto3-omics (>=1.38.0,<1.39.0)"] +opensearch = ["mypy-boto3-opensearch (>=1.38.0,<1.39.0)"] +opensearchserverless = ["mypy-boto3-opensearchserverless (>=1.38.0,<1.39.0)"] +opsworks = ["mypy-boto3-opsworks (>=1.38.0,<1.39.0)"] +opsworkscm = ["mypy-boto3-opsworkscm (>=1.38.0,<1.39.0)"] +organizations = ["mypy-boto3-organizations (>=1.38.0,<1.39.0)"] +osis = ["mypy-boto3-osis (>=1.38.0,<1.39.0)"] +outposts = ["mypy-boto3-outposts (>=1.38.0,<1.39.0)"] +panorama = ["mypy-boto3-panorama (>=1.38.0,<1.39.0)"] +partnercentral-selling = ["mypy-boto3-partnercentral-selling (>=1.38.0,<1.39.0)"] +payment-cryptography = ["mypy-boto3-payment-cryptography (>=1.38.0,<1.39.0)"] +payment-cryptography-data = ["mypy-boto3-payment-cryptography-data (>=1.38.0,<1.39.0)"] +pca-connector-ad = ["mypy-boto3-pca-connector-ad (>=1.38.0,<1.39.0)"] +pca-connector-scep = ["mypy-boto3-pca-connector-scep (>=1.38.0,<1.39.0)"] +pcs = ["mypy-boto3-pcs (>=1.38.0,<1.39.0)"] +personalize = ["mypy-boto3-personalize (>=1.38.0,<1.39.0)"] +personalize-events = ["mypy-boto3-personalize-events (>=1.38.0,<1.39.0)"] +personalize-runtime = ["mypy-boto3-personalize-runtime (>=1.38.0,<1.39.0)"] +pi = ["mypy-boto3-pi (>=1.38.0,<1.39.0)"] +pinpoint = ["mypy-boto3-pinpoint (>=1.38.0,<1.39.0)"] +pinpoint-email = ["mypy-boto3-pinpoint-email (>=1.38.0,<1.39.0)"] +pinpoint-sms-voice = ["mypy-boto3-pinpoint-sms-voice (>=1.38.0,<1.39.0)"] +pinpoint-sms-voice-v2 = ["mypy-boto3-pinpoint-sms-voice-v2 (>=1.38.0,<1.39.0)"] +pipes = ["mypy-boto3-pipes (>=1.38.0,<1.39.0)"] +polly = ["mypy-boto3-polly (>=1.38.0,<1.39.0)"] +pricing = ["mypy-boto3-pricing (>=1.38.0,<1.39.0)"] +privatenetworks = ["mypy-boto3-privatenetworks (>=1.38.0,<1.39.0)"] +proton = ["mypy-boto3-proton (>=1.38.0,<1.39.0)"] +qapps = ["mypy-boto3-qapps (>=1.38.0,<1.39.0)"] +qbusiness = ["mypy-boto3-qbusiness (>=1.38.0,<1.39.0)"] +qconnect = ["mypy-boto3-qconnect (>=1.38.0,<1.39.0)"] +qldb = ["mypy-boto3-qldb (>=1.38.0,<1.39.0)"] +qldb-session = ["mypy-boto3-qldb-session (>=1.38.0,<1.39.0)"] +quicksight = ["mypy-boto3-quicksight (>=1.38.0,<1.39.0)"] +ram = ["mypy-boto3-ram (>=1.38.0,<1.39.0)"] +rbin = ["mypy-boto3-rbin (>=1.38.0,<1.39.0)"] +rds = ["mypy-boto3-rds (>=1.38.0,<1.39.0)"] +rds-data = ["mypy-boto3-rds-data (>=1.38.0,<1.39.0)"] +redshift = ["mypy-boto3-redshift (>=1.38.0,<1.39.0)"] +redshift-data = ["mypy-boto3-redshift-data (>=1.38.0,<1.39.0)"] +redshift-serverless = ["mypy-boto3-redshift-serverless (>=1.38.0,<1.39.0)"] +rekognition = ["mypy-boto3-rekognition (>=1.38.0,<1.39.0)"] +repostspace = ["mypy-boto3-repostspace (>=1.38.0,<1.39.0)"] +resiliencehub = ["mypy-boto3-resiliencehub (>=1.38.0,<1.39.0)"] +resource-explorer-2 = ["mypy-boto3-resource-explorer-2 (>=1.38.0,<1.39.0)"] +resource-groups = ["mypy-boto3-resource-groups (>=1.38.0,<1.39.0)"] +resourcegroupstaggingapi = ["mypy-boto3-resourcegroupstaggingapi (>=1.38.0,<1.39.0)"] +robomaker = ["mypy-boto3-robomaker (>=1.38.0,<1.39.0)"] +rolesanywhere = ["mypy-boto3-rolesanywhere (>=1.38.0,<1.39.0)"] +route53 = ["mypy-boto3-route53 (>=1.38.0,<1.39.0)"] +route53-recovery-cluster = ["mypy-boto3-route53-recovery-cluster (>=1.38.0,<1.39.0)"] +route53-recovery-control-config = ["mypy-boto3-route53-recovery-control-config (>=1.38.0,<1.39.0)"] +route53-recovery-readiness = ["mypy-boto3-route53-recovery-readiness (>=1.38.0,<1.39.0)"] +route53domains = ["mypy-boto3-route53domains (>=1.38.0,<1.39.0)"] +route53profiles = ["mypy-boto3-route53profiles (>=1.38.0,<1.39.0)"] +route53resolver = ["mypy-boto3-route53resolver (>=1.38.0,<1.39.0)"] +rum = ["mypy-boto3-rum (>=1.38.0,<1.39.0)"] +s3 = ["mypy-boto3-s3 (>=1.38.0,<1.39.0)"] +s3control = ["mypy-boto3-s3control (>=1.38.0,<1.39.0)"] +s3outposts = ["mypy-boto3-s3outposts (>=1.38.0,<1.39.0)"] +s3tables = ["mypy-boto3-s3tables (>=1.38.0,<1.39.0)"] +sagemaker = ["mypy-boto3-sagemaker (>=1.38.0,<1.39.0)"] +sagemaker-a2i-runtime = ["mypy-boto3-sagemaker-a2i-runtime (>=1.38.0,<1.39.0)"] +sagemaker-edge = ["mypy-boto3-sagemaker-edge (>=1.38.0,<1.39.0)"] +sagemaker-featurestore-runtime = ["mypy-boto3-sagemaker-featurestore-runtime (>=1.38.0,<1.39.0)"] +sagemaker-geospatial = ["mypy-boto3-sagemaker-geospatial (>=1.38.0,<1.39.0)"] +sagemaker-metrics = ["mypy-boto3-sagemaker-metrics (>=1.38.0,<1.39.0)"] +sagemaker-runtime = ["mypy-boto3-sagemaker-runtime (>=1.38.0,<1.39.0)"] +savingsplans = ["mypy-boto3-savingsplans (>=1.38.0,<1.39.0)"] +scheduler = ["mypy-boto3-scheduler (>=1.38.0,<1.39.0)"] +schemas = ["mypy-boto3-schemas (>=1.38.0,<1.39.0)"] +sdb = ["mypy-boto3-sdb (>=1.38.0,<1.39.0)"] +secretsmanager = ["mypy-boto3-secretsmanager (>=1.38.0,<1.39.0)"] +security-ir = ["mypy-boto3-security-ir (>=1.38.0,<1.39.0)"] +securityhub = ["mypy-boto3-securityhub (>=1.38.0,<1.39.0)"] +securitylake = ["mypy-boto3-securitylake (>=1.38.0,<1.39.0)"] +serverlessrepo = ["mypy-boto3-serverlessrepo (>=1.38.0,<1.39.0)"] +service-quotas = ["mypy-boto3-service-quotas (>=1.38.0,<1.39.0)"] +servicecatalog = ["mypy-boto3-servicecatalog (>=1.38.0,<1.39.0)"] +servicecatalog-appregistry = ["mypy-boto3-servicecatalog-appregistry (>=1.38.0,<1.39.0)"] +servicediscovery = ["mypy-boto3-servicediscovery (>=1.38.0,<1.39.0)"] +ses = ["mypy-boto3-ses (>=1.38.0,<1.39.0)"] +sesv2 = ["mypy-boto3-sesv2 (>=1.38.0,<1.39.0)"] +shield = ["mypy-boto3-shield (>=1.38.0,<1.39.0)"] +signer = ["mypy-boto3-signer (>=1.38.0,<1.39.0)"] +simspaceweaver = ["mypy-boto3-simspaceweaver (>=1.38.0,<1.39.0)"] +sms = ["mypy-boto3-sms (>=1.38.0,<1.39.0)"] +snow-device-management = ["mypy-boto3-snow-device-management (>=1.38.0,<1.39.0)"] +snowball = ["mypy-boto3-snowball (>=1.38.0,<1.39.0)"] +sns = ["mypy-boto3-sns (>=1.38.0,<1.39.0)"] +socialmessaging = ["mypy-boto3-socialmessaging (>=1.38.0,<1.39.0)"] +sqs = ["mypy-boto3-sqs (>=1.38.0,<1.39.0)"] +ssm = ["mypy-boto3-ssm (>=1.38.0,<1.39.0)"] +ssm-contacts = ["mypy-boto3-ssm-contacts (>=1.38.0,<1.39.0)"] +ssm-guiconnect = ["mypy-boto3-ssm-guiconnect (>=1.38.0,<1.39.0)"] +ssm-incidents = ["mypy-boto3-ssm-incidents (>=1.38.0,<1.39.0)"] +ssm-quicksetup = ["mypy-boto3-ssm-quicksetup (>=1.38.0,<1.39.0)"] +ssm-sap = ["mypy-boto3-ssm-sap (>=1.38.0,<1.39.0)"] +sso = ["mypy-boto3-sso (>=1.38.0,<1.39.0)"] +sso-admin = ["mypy-boto3-sso-admin (>=1.38.0,<1.39.0)"] +sso-oidc = ["mypy-boto3-sso-oidc (>=1.38.0,<1.39.0)"] +stepfunctions = ["mypy-boto3-stepfunctions (>=1.38.0,<1.39.0)"] +storagegateway = ["mypy-boto3-storagegateway (>=1.38.0,<1.39.0)"] +sts = ["mypy-boto3-sts (>=1.38.0,<1.39.0)"] +supplychain = ["mypy-boto3-supplychain (>=1.38.0,<1.39.0)"] +support = ["mypy-boto3-support (>=1.38.0,<1.39.0)"] +support-app = ["mypy-boto3-support-app (>=1.38.0,<1.39.0)"] +swf = ["mypy-boto3-swf (>=1.38.0,<1.39.0)"] +synthetics = ["mypy-boto3-synthetics (>=1.38.0,<1.39.0)"] +taxsettings = ["mypy-boto3-taxsettings (>=1.38.0,<1.39.0)"] +textract = ["mypy-boto3-textract (>=1.38.0,<1.39.0)"] +timestream-influxdb = ["mypy-boto3-timestream-influxdb (>=1.38.0,<1.39.0)"] +timestream-query = ["mypy-boto3-timestream-query (>=1.38.0,<1.39.0)"] +timestream-write = ["mypy-boto3-timestream-write (>=1.38.0,<1.39.0)"] +tnb = ["mypy-boto3-tnb (>=1.38.0,<1.39.0)"] +transcribe = ["mypy-boto3-transcribe (>=1.38.0,<1.39.0)"] +transfer = ["mypy-boto3-transfer (>=1.38.0,<1.39.0)"] +translate = ["mypy-boto3-translate (>=1.38.0,<1.39.0)"] +trustedadvisor = ["mypy-boto3-trustedadvisor (>=1.38.0,<1.39.0)"] +verifiedpermissions = ["mypy-boto3-verifiedpermissions (>=1.38.0,<1.39.0)"] +voice-id = ["mypy-boto3-voice-id (>=1.38.0,<1.39.0)"] +vpc-lattice = ["mypy-boto3-vpc-lattice (>=1.38.0,<1.39.0)"] +waf = ["mypy-boto3-waf (>=1.38.0,<1.39.0)"] +waf-regional = ["mypy-boto3-waf-regional (>=1.38.0,<1.39.0)"] +wafv2 = ["mypy-boto3-wafv2 (>=1.38.0,<1.39.0)"] +wellarchitected = ["mypy-boto3-wellarchitected (>=1.38.0,<1.39.0)"] +wisdom = ["mypy-boto3-wisdom (>=1.38.0,<1.39.0)"] +workdocs = ["mypy-boto3-workdocs (>=1.38.0,<1.39.0)"] +workmail = ["mypy-boto3-workmail (>=1.38.0,<1.39.0)"] +workmailmessageflow = ["mypy-boto3-workmailmessageflow (>=1.38.0,<1.39.0)"] +workspaces = ["mypy-boto3-workspaces (>=1.38.0,<1.39.0)"] +workspaces-thin-client = ["mypy-boto3-workspaces-thin-client (>=1.38.0,<1.39.0)"] +workspaces-web = ["mypy-boto3-workspaces-web (>=1.38.0,<1.39.0)"] +xray = ["mypy-boto3-xray (>=1.38.0,<1.39.0)"] [[package]] name = "botocore" -version = "1.35.95" +version = "1.38.15" description = "Low-level, data-driven core of boto 3." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "botocore-1.35.95-py3-none-any.whl", hash = "sha256:a672406f748ad6a5b2fb7ea0d8394539eb4fda5332fc5373467d232c4bb27b12"}, - {file = "botocore-1.35.95.tar.gz", hash = "sha256:b03d2d7cc58a16aa96a7e8f21941b766e98abc6ea74f61a63de7dc26c03641d3"}, + {file = "botocore-1.38.15-py3-none-any.whl", hash = "sha256:9cc149ef56c3b99aff5436f26b71ad9558a45e4ac6b25b7b7046b0889279e601"}, + {file = "botocore-1.38.15.tar.gz", hash = "sha256:6adb3b1b0739153d5dc9758e5e06f7596290999c07ed8f9167ca62a1f97c6592"}, ] [package.dependencies] @@ -563,17 +540,17 @@ urllib3 = [ ] [package.extras] -crt = ["awscrt (==0.22.0)"] +crt = ["awscrt (==0.23.8)"] [[package]] name = "botocore-stubs" -version = "1.35.93" +version = "1.38.15" description = "Type annotations and code completion for botocore" optional = false python-versions = ">=3.8" files = [ - {file = "botocore_stubs-1.35.93-py3-none-any.whl", hash = "sha256:d7833b754a1e3fba1e6c2f4733f7a88eaf9fffd5da6e88d5a1015a5a10df1e80"}, - {file = "botocore_stubs-1.35.93.tar.gz", hash = "sha256:6872efea24d6b1dd1f01b7662ff1e0bd7f9b7110da6d6447b78c1b85d943151f"}, + {file = "botocore_stubs-1.38.15-py3-none-any.whl", hash = "sha256:db621e8378776e04716adcd61a13996ecd5574b6e46bec8ecc0c3054122a7a08"}, + {file = "botocore_stubs-1.38.15.tar.gz", hash = "sha256:f84a6efc7b9554fecdf4d875909a28bc8bd63a7def23dd5ceadb5b7759ea0524"}, ] [package.dependencies] @@ -584,13 +561,13 @@ botocore = ["botocore"] [[package]] name = "cachetools" -version = "5.5.0" +version = "5.5.2" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" files = [ - {file = "cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292"}, - {file = "cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a"}, + {file = "cachetools-5.5.2-py3-none-any.whl", hash = "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"}, + {file = "cachetools-5.5.2.tar.gz", hash = "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4"}, ] [[package]] @@ -631,83 +608,74 @@ files = [ [[package]] name = "coverage" -version = "7.6.1" +version = "7.8.0" description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, - {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, - {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, - {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, - {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, - {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, - {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, - {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, - {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, - {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, - {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, - {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, - {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, - {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, - {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, - {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, - {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, - {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, + {file = "coverage-7.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe"}, + {file = "coverage-7.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28"}, + {file = "coverage-7.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c8a5c139aae4c35cbd7cadca1df02ea8cf28a911534fc1b0456acb0b14234f3"}, + {file = "coverage-7.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a26c0c795c3e0b63ec7da6efded5f0bc856d7c0b24b2ac84b4d1d7bc578d676"}, + {file = "coverage-7.8.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:821f7bcbaa84318287115d54becb1915eece6918136c6f91045bb84e2f88739d"}, + {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a321c61477ff8ee705b8a5fed370b5710c56b3a52d17b983d9215861e37b642a"}, + {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ed2144b8a78f9d94d9515963ed273d620e07846acd5d4b0a642d4849e8d91a0c"}, + {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:042e7841a26498fff7a37d6fda770d17519982f5b7d8bf5278d140b67b61095f"}, + {file = "coverage-7.8.0-cp310-cp310-win32.whl", hash = "sha256:f9983d01d7705b2d1f7a95e10bbe4091fabc03a46881a256c2787637b087003f"}, + {file = "coverage-7.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5a570cd9bd20b85d1a0d7b009aaf6c110b52b5755c17be6962f8ccd65d1dbd23"}, + {file = "coverage-7.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7ac22a0bb2c7c49f441f7a6d46c9c80d96e56f5a8bc6972529ed43c8b694e27"}, + {file = "coverage-7.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf13d564d310c156d1c8e53877baf2993fb3073b2fc9f69790ca6a732eb4bfea"}, + {file = "coverage-7.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5761c70c017c1b0d21b0815a920ffb94a670c8d5d409d9b38857874c21f70d7"}, + {file = "coverage-7.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ff52d790c7e1628241ffbcaeb33e07d14b007b6eb00a19320c7b8a7024c040"}, + {file = "coverage-7.8.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d39fc4817fd67b3915256af5dda75fd4ee10621a3d484524487e33416c6f3543"}, + {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b44674870709017e4b4036e3d0d6c17f06a0e6d4436422e0ad29b882c40697d2"}, + {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8f99eb72bf27cbb167b636eb1726f590c00e1ad375002230607a844d9e9a2318"}, + {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b571bf5341ba8c6bc02e0baeaf3b061ab993bf372d982ae509807e7f112554e9"}, + {file = "coverage-7.8.0-cp311-cp311-win32.whl", hash = "sha256:e75a2ad7b647fd8046d58c3132d7eaf31b12d8a53c0e4b21fa9c4d23d6ee6d3c"}, + {file = "coverage-7.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3043ba1c88b2139126fc72cb48574b90e2e0546d4c78b5299317f61b7f718b78"}, + {file = "coverage-7.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bbb5cc845a0292e0c520656d19d7ce40e18d0e19b22cb3e0409135a575bf79fc"}, + {file = "coverage-7.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4dfd9a93db9e78666d178d4f08a5408aa3f2474ad4d0e0378ed5f2ef71640cb6"}, + {file = "coverage-7.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f017a61399f13aa6d1039f75cd467be388d157cd81f1a119b9d9a68ba6f2830d"}, + {file = "coverage-7.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0915742f4c82208ebf47a2b154a5334155ed9ef9fe6190674b8a46c2fb89cb05"}, + {file = "coverage-7.8.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a40fcf208e021eb14b0fac6bdb045c0e0cab53105f93ba0d03fd934c956143a"}, + {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a1f406a8e0995d654b2ad87c62caf6befa767885301f3b8f6f73e6f3c31ec3a6"}, + {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:77af0f6447a582fdc7de5e06fa3757a3ef87769fbb0fdbdeba78c23049140a47"}, + {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f2d32f95922927186c6dbc8bc60df0d186b6edb828d299ab10898ef3f40052fe"}, + {file = "coverage-7.8.0-cp312-cp312-win32.whl", hash = "sha256:769773614e676f9d8e8a0980dd7740f09a6ea386d0f383db6821df07d0f08545"}, + {file = "coverage-7.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:e5d2b9be5b0693cf21eb4ce0ec8d211efb43966f6657807f6859aab3814f946b"}, + {file = "coverage-7.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ac46d0c2dd5820ce93943a501ac5f6548ea81594777ca585bf002aa8854cacd"}, + {file = "coverage-7.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:771eb7587a0563ca5bb6f622b9ed7f9d07bd08900f7589b4febff05f469bea00"}, + {file = "coverage-7.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42421e04069fb2cbcbca5a696c4050b84a43b05392679d4068acbe65449b5c64"}, + {file = "coverage-7.8.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:554fec1199d93ab30adaa751db68acec2b41c5602ac944bb19187cb9a41a8067"}, + {file = "coverage-7.8.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aaeb00761f985007b38cf463b1d160a14a22c34eb3f6a39d9ad6fc27cb73008"}, + {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:581a40c7b94921fffd6457ffe532259813fc68eb2bdda60fa8cc343414ce3733"}, + {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f319bae0321bc838e205bf9e5bc28f0a3165f30c203b610f17ab5552cff90323"}, + {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04bfec25a8ef1c5f41f5e7e5c842f6b615599ca8ba8391ec33a9290d9d2db3a3"}, + {file = "coverage-7.8.0-cp313-cp313-win32.whl", hash = "sha256:dd19608788b50eed889e13a5d71d832edc34fc9dfce606f66e8f9f917eef910d"}, + {file = "coverage-7.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:a9abbccd778d98e9c7e85038e35e91e67f5b520776781d9a1e2ee9d400869487"}, + {file = "coverage-7.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:18c5ae6d061ad5b3e7eef4363fb27a0576012a7447af48be6c75b88494c6cf25"}, + {file = "coverage-7.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:95aa6ae391a22bbbce1b77ddac846c98c5473de0372ba5c463480043a07bff42"}, + {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e013b07ba1c748dacc2a80e69a46286ff145935f260eb8c72df7185bf048f502"}, + {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d766a4f0e5aa1ba056ec3496243150698dc0481902e2b8559314368717be82b1"}, + {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad80e6b4a0c3cb6f10f29ae4c60e991f424e6b14219d46f1e7d442b938ee68a4"}, + {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b87eb6fc9e1bb8f98892a2458781348fa37e6925f35bb6ceb9d4afd54ba36c73"}, + {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d1ba00ae33be84066cfbe7361d4e04dec78445b2b88bdb734d0d1cbab916025a"}, + {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883"}, + {file = "coverage-7.8.0-cp313-cp313t-win32.whl", hash = "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada"}, + {file = "coverage-7.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257"}, + {file = "coverage-7.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f"}, + {file = "coverage-7.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96121edfa4c2dfdda409877ea8608dd01de816a4dc4a0523356067b305e4e17a"}, + {file = "coverage-7.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b8af63b9afa1031c0ef05b217faa598f3069148eeee6bb24b79da9012423b82"}, + {file = "coverage-7.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89b1f4af0d4afe495cd4787a68e00f30f1d15939f550e869de90a86efa7e0814"}, + {file = "coverage-7.8.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94ec0be97723ae72d63d3aa41961a0b9a6f5a53ff599813c324548d18e3b9e8c"}, + {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8a1d96e780bdb2d0cbb297325711701f7c0b6f89199a57f2049e90064c29f6bd"}, + {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f1d8a2a57b47142b10374902777e798784abf400a004b14f1b0b9eaf1e528ba4"}, + {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cf60dd2696b457b710dd40bf17ad269d5f5457b96442f7f85722bdb16fa6c899"}, + {file = "coverage-7.8.0-cp39-cp39-win32.whl", hash = "sha256:be945402e03de47ba1872cd5236395e0f4ad635526185a930735f66710e1bd3f"}, + {file = "coverage-7.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:90e7fbc6216ecaffa5a880cdc9c77b7418c1dcb166166b78dbc630d07f278cc3"}, + {file = "coverage-7.8.0-pp39.pp310.pp311-none-any.whl", hash = "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd"}, + {file = "coverage-7.8.0-py3-none-any.whl", hash = "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7"}, + {file = "coverage-7.8.0.tar.gz", hash = "sha256:7a3d62b3b03b4b6fd41a085f3574874cf946cb4604d2b4d3e8dca8cd570ca501"}, ] [package.extras] @@ -715,13 +683,13 @@ toml = ["tomli"] [[package]] name = "decorator" -version = "5.1.1" +version = "5.2.1" description = "Decorators for Humans" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, + {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, + {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, ] [[package]] @@ -737,27 +705,30 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.2" +version = "1.3.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, - {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, + {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, + {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, ] +[package.dependencies] +typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} + [package.extras] test = ["pytest (>=6)"] [[package]] name = "executing" -version = "2.1.0" +version = "2.2.0" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.8" files = [ - {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, - {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, + {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, + {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, ] [package.extras] @@ -765,69 +736,67 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "filelock" -version = "3.16.1" +version = "3.18.0" description = "A platform independent file lock." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, - {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, + {file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, + {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, ] [package.extras] -docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] typing = ["typing-extensions (>=4.12.2)"] [[package]] name = "iniconfig" -version = "2.0.0" +version = "2.1.0" description = "brain-dead simple config-ini parsing" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, + {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, + {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, ] [[package]] name = "ipython" -version = "8.12.3" +version = "8.18.1" description = "IPython: Productive Interactive Computing" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "ipython-8.12.3-py3-none-any.whl", hash = "sha256:b0340d46a933d27c657b211a329d0be23793c36595acf9e6ef4164bc01a1804c"}, - {file = "ipython-8.12.3.tar.gz", hash = "sha256:3910c4b54543c2ad73d06579aa771041b7d5707b033bd488669b4cf544e3b363"}, + {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, + {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, ] [package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" colorama = {version = "*", markers = "sys_platform == \"win32\""} decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" +prompt-toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" stack-data = "*" traitlets = ">=5" typing-extensions = {version = "*", markers = "python_version < \"3.10\""} [package.extras] -all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] black = ["black"] -doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] -test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] +test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] [[package]] name = "jedi" @@ -861,71 +830,72 @@ files = [ [[package]] name = "markupsafe" -version = "2.1.5" +version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] [[package]] @@ -944,49 +914,43 @@ traitlets = "*" [[package]] name = "mypy" -version = "1.14.1" +version = "1.15.0" description = "Optional static typing for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"}, - {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"}, - {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d"}, - {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b"}, - {file = "mypy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427"}, - {file = "mypy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f"}, - {file = "mypy-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c"}, - {file = "mypy-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1"}, - {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8"}, - {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f"}, - {file = "mypy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1"}, - {file = "mypy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae"}, - {file = "mypy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14"}, - {file = "mypy-1.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9"}, - {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11"}, - {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e"}, - {file = "mypy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89"}, - {file = "mypy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b"}, - {file = "mypy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255"}, - {file = "mypy-1.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34"}, - {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a"}, - {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9"}, - {file = "mypy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd"}, - {file = "mypy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107"}, - {file = "mypy-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31"}, - {file = "mypy-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6"}, - {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319"}, - {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac"}, - {file = "mypy-1.14.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b"}, - {file = "mypy-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837"}, - {file = "mypy-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35"}, - {file = "mypy-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc"}, - {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9"}, - {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb"}, - {file = "mypy-1.14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60"}, - {file = "mypy-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c"}, - {file = "mypy-1.14.1-py3-none-any.whl", hash = "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1"}, - {file = "mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6"}, + {file = "mypy-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13"}, + {file = "mypy-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559"}, + {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b"}, + {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3"}, + {file = "mypy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b"}, + {file = "mypy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828"}, + {file = "mypy-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f"}, + {file = "mypy-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5"}, + {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e"}, + {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c"}, + {file = "mypy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f"}, + {file = "mypy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f"}, + {file = "mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd"}, + {file = "mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f"}, + {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464"}, + {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee"}, + {file = "mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e"}, + {file = "mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22"}, + {file = "mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445"}, + {file = "mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d"}, + {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5"}, + {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036"}, + {file = "mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357"}, + {file = "mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf"}, + {file = "mypy-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078"}, + {file = "mypy-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba"}, + {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5"}, + {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b"}, + {file = "mypy-1.15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2"}, + {file = "mypy-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980"}, + {file = "mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e"}, + {file = "mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43"}, ] [package.dependencies] @@ -1003,13 +967,13 @@ reports = ["lxml"] [[package]] name = "mypy-boto3-athena" -version = "1.35.93" -description = "Type annotations for boto3 Athena 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.38.13" +description = "Type annotations for boto3 Athena 1.38.13 service generated with mypy-boto3-builder 8.11.0" optional = false python-versions = ">=3.8" files = [ - {file = "mypy_boto3_athena-1.35.93-py3-none-any.whl", hash = "sha256:de1f77d65d7bd9b87d7dee23fc4024a1d36887c0f72875a96faa96cdd06d3017"}, - {file = "mypy_boto3_athena-1.35.93.tar.gz", hash = "sha256:f92d77a61c9e081b2f229ae779052269f8fcf0feb0d3f41a11682f1a3bff3b4c"}, + {file = "mypy_boto3_athena-1.38.13-py3-none-any.whl", hash = "sha256:6faaa7300aacfebd220e72901c8c7321c9499323f97c54e60fa19b2f9ba04b3b"}, + {file = "mypy_boto3_athena-1.38.13.tar.gz", hash = "sha256:d45a27739e5f54cf24b2a0930705d51deaa1ca982c61e8285bc3c410fa9c4c5e"}, ] [package.dependencies] @@ -1017,13 +981,13 @@ typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-dynamodb" -version = "1.35.93" -description = "Type annotations for boto3 DynamoDB 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.38.4" +description = "Type annotations for boto3 DynamoDB 1.38.4 service generated with mypy-boto3-builder 8.10.1" optional = false python-versions = ">=3.8" files = [ - {file = "mypy_boto3_dynamodb-1.35.93-py3-none-any.whl", hash = "sha256:c066d944866d2a5025fe7c9a74d9f3513e50543e5859c539513dd327efb7391f"}, - {file = "mypy_boto3_dynamodb-1.35.93.tar.gz", hash = "sha256:cab4d77ef61f93bc3a9519cb3255268b343be62387ad22e0835a633cb9b1698d"}, + {file = "mypy_boto3_dynamodb-1.38.4-py3-none-any.whl", hash = "sha256:6b29d89c649eeb1e894118bee002cb8b1304c78da735b1503aa08e46b0abfdec"}, + {file = "mypy_boto3_dynamodb-1.38.4.tar.gz", hash = "sha256:5cf3787631e312b3d75f89a6cbbbd4ad786a76f5d565af023febf03fbf23c0b5"}, ] [package.dependencies] @@ -1031,13 +995,13 @@ typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-events" -version = "1.35.93" -description = "Type annotations for boto3 EventBridge 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.38.0" +description = "Type annotations for boto3 EventBridge 1.38.0 service generated with mypy-boto3-builder 8.10.1" optional = false python-versions = ">=3.8" files = [ - {file = "mypy_boto3_events-1.35.93-py3-none-any.whl", hash = "sha256:5f68054c890d9e162012f7ea24135d2f2f24742546e99ffed1334bdde6ed0b62"}, - {file = "mypy_boto3_events-1.35.93.tar.gz", hash = "sha256:de903c0cd2cb6ea7187bd82d47ef1ea6481dd61bf480c60e67caa08041324e93"}, + {file = "mypy_boto3_events-1.38.0-py3-none-any.whl", hash = "sha256:99c4eae4cc882195cc9e295bde971543606c998bc71b6e11ae9e2bd35d5e5529"}, + {file = "mypy_boto3_events-1.38.0.tar.gz", hash = "sha256:3017e0cb81b99556171b36ecd1a40af2ac776f5ead9a2032abf65382ec2d6dd2"}, ] [package.dependencies] @@ -1045,13 +1009,13 @@ typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-firehose" -version = "1.35.93" -description = "Type annotations for boto3 Firehose 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.38.0" +description = "Type annotations for boto3 Firehose 1.38.0 service generated with mypy-boto3-builder 8.10.1" optional = false python-versions = ">=3.8" files = [ - {file = "mypy_boto3_firehose-1.35.93-py3-none-any.whl", hash = "sha256:e90e8a85e3ef1177b672bb15b0260b48c74e94b29d143941ed5ace5db2b78852"}, - {file = "mypy_boto3_firehose-1.35.93.tar.gz", hash = "sha256:a88cf48cc418a50d0dd047230ce191cc3d1ba8f78b55a26ad1dcd3effc47f630"}, + {file = "mypy_boto3_firehose-1.38.0-py3-none-any.whl", hash = "sha256:6f742420dae65184163d416091757efef91012b33fe20ba4805e406803dd4b29"}, + {file = "mypy_boto3_firehose-1.38.0.tar.gz", hash = "sha256:9a63a900dbc14d44e29565d9f21e6d313c1f7c46b077a1f0541269a4b7b567be"}, ] [package.dependencies] @@ -1059,13 +1023,13 @@ typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-kms" -version = "1.35.93" -description = "Type annotations for boto3 KMS 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.38.0" +description = "Type annotations for boto3 KMS 1.38.0 service generated with mypy-boto3-builder 8.10.1" optional = false python-versions = ">=3.8" files = [ - {file = "mypy_boto3_kms-1.35.93-py3-none-any.whl", hash = "sha256:b69e3442388e7218635a8df24c1ba9d3540f08b5e206dc1245bc8f29d3641f62"}, - {file = "mypy_boto3_kms-1.35.93.tar.gz", hash = "sha256:929361394886cc6668ab24ea525d08947a0d49ca3ad2eb6d9fd3c2e8b462f3a6"}, + {file = "mypy_boto3_kms-1.38.0-py3-none-any.whl", hash = "sha256:52b079f831927fb39751f51a0886139e0c4ba7f743c10521131e03ecb63e966c"}, + {file = "mypy_boto3_kms-1.38.0.tar.gz", hash = "sha256:b350fa9b3ab94fb1bc8e6da7c54afb2aae90793de80c1385e3269f6a10fe7eae"}, ] [package.dependencies] @@ -1073,13 +1037,13 @@ typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-lambda" -version = "1.35.93" -description = "Type annotations for boto3 Lambda 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.38.0" +description = "Type annotations for boto3 Lambda 1.38.0 service generated with mypy-boto3-builder 8.10.1" optional = false python-versions = ">=3.8" files = [ - {file = "mypy_boto3_lambda-1.35.93-py3-none-any.whl", hash = "sha256:6bcd623c827724cde0b21b30c328515811b178763b75f0701a641cc7aa3aa414"}, - {file = "mypy_boto3_lambda-1.35.93.tar.gz", hash = "sha256:c11b047743c7635ea8385abffaf97788a108b71479612e9b5e7d0bb19029d7a4"}, + {file = "mypy_boto3_lambda-1.38.0-py3-none-any.whl", hash = "sha256:0dcb882826f61fd2751f6b98330b0e11085570654db85318aea018374ca88dc9"}, + {file = "mypy_boto3_lambda-1.38.0.tar.gz", hash = "sha256:ece7b3848c045e1be81c4f2b7482002c17ce7cb70de850661146103a8cb1a3fb"}, ] [package.dependencies] @@ -1087,13 +1051,13 @@ typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-logs" -version = "1.35.93" -description = "Type annotations for boto3 CloudWatchLogs 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.38.13" +description = "Type annotations for boto3 CloudWatchLogs 1.38.13 service generated with mypy-boto3-builder 8.11.0" optional = false python-versions = ">=3.8" files = [ - {file = "mypy_boto3_logs-1.35.93-py3-none-any.whl", hash = "sha256:cef85814d6f7390ef9ed61fa4872f9b3d63983e6d1640df36cac97b6daef3724"}, - {file = "mypy_boto3_logs-1.35.93.tar.gz", hash = "sha256:8ef2624e3d846695328182b647a86f85fcb4a78640ed15f716709f90622a369b"}, + {file = "mypy_boto3_logs-1.38.13-py3-none-any.whl", hash = "sha256:12d3a1cc9a17fa8c4f53fac25f5bde116bdb0087fce36d3a91befeb2d418deb5"}, + {file = "mypy_boto3_logs-1.38.13.tar.gz", hash = "sha256:54e9047200e7e06d6fd4307f05eae0e723fe3d851fed805f43e4f8caf013541b"}, ] [package.dependencies] @@ -1101,13 +1065,13 @@ typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-s3" -version = "1.35.93" -description = "Type annotations for boto3 S3 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.38.0" +description = "Type annotations for boto3 S3 1.38.0 service generated with mypy-boto3-builder 8.10.1" optional = false python-versions = ">=3.8" files = [ - {file = "mypy_boto3_s3-1.35.93-py3-none-any.whl", hash = "sha256:4cd3f1718fa0d8a54212c495cdff493bdcc6a8ae419d95428c60fb6bc7db7980"}, - {file = "mypy_boto3_s3-1.35.93.tar.gz", hash = "sha256:b4529e57a8d5f21d4c61fe650fa6764fee2ba7ab524a455a34ba2698ef6d27a8"}, + {file = "mypy_boto3_s3-1.38.0-py3-none-any.whl", hash = "sha256:5cd9449df0ef6cf89e00e6fc9130a0ab641f703a23ab1d2146c394da058e8282"}, + {file = "mypy_boto3_s3-1.38.0.tar.gz", hash = "sha256:f8fe586e45123ffcd305a0c30847128f3931d888649e2b4c5a52f412183c840a"}, ] [package.dependencies] @@ -1115,13 +1079,13 @@ typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-secretsmanager" -version = "1.35.93" -description = "Type annotations for boto3 SecretsManager 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.38.0" +description = "Type annotations for boto3 SecretsManager 1.38.0 service generated with mypy-boto3-builder 8.10.1" optional = false python-versions = ">=3.8" files = [ - {file = "mypy_boto3_secretsmanager-1.35.93-py3-none-any.whl", hash = "sha256:521075d42b6d05f0d7302d1837520e9111a84d6613152d32dc8cbb3cd6fceeec"}, - {file = "mypy_boto3_secretsmanager-1.35.93.tar.gz", hash = "sha256:b6c4bc88a5fe4143124272728d41342e01c778b406db9d647a20dad0de7d6f47"}, + {file = "mypy_boto3_secretsmanager-1.38.0-py3-none-any.whl", hash = "sha256:48d5057450ee307b132ce2d0976233a2c5331616fabdf423ecbc103f7431dd5e"}, + {file = "mypy_boto3_secretsmanager-1.38.0.tar.gz", hash = "sha256:1666108e70f03e4dc1de449388d7facb77aba231a026bac0c3240fc27fd31a98"}, ] [package.dependencies] @@ -1129,13 +1093,13 @@ typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-ses" -version = "1.35.93" -description = "Type annotations for boto3 SES 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.38.0" +description = "Type annotations for boto3 SES 1.38.0 service generated with mypy-boto3-builder 8.10.1" optional = false python-versions = ">=3.8" files = [ - {file = "mypy_boto3_ses-1.35.93-py3-none-any.whl", hash = "sha256:e957e4bc90e458d6988a391e175bea7427c927d80b87de26ce38b4f4bdbab91b"}, - {file = "mypy_boto3_ses-1.35.93.tar.gz", hash = "sha256:7bd814836695bc9ca9f8e31d30cf14e8091e2bb35c1d91893429974ffdabcadf"}, + {file = "mypy_boto3_ses-1.38.0-py3-none-any.whl", hash = "sha256:e4fb4785caea4743dedbb0827bc697ec43bf674311d5cdef6b5e09abc5a230b5"}, + {file = "mypy_boto3_ses-1.38.0.tar.gz", hash = "sha256:1741e3cbace8454b121d93d22d49c8238be955eb9db602f6561d4222a6e3df30"}, ] [package.dependencies] @@ -1143,13 +1107,13 @@ typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-sns" -version = "1.35.93" -description = "Type annotations for boto3 SNS 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.38.0" +description = "Type annotations for boto3 SNS 1.38.0 service generated with mypy-boto3-builder 8.10.1" optional = false python-versions = ">=3.8" files = [ - {file = "mypy_boto3_sns-1.35.93-py3-none-any.whl", hash = "sha256:528b0246da33f4f0fce957cbcc844d9df4df372b70229361a0694f125b40dfcc"}, - {file = "mypy_boto3_sns-1.35.93.tar.gz", hash = "sha256:fd17cec410bc477096652431d324881f4d33b89fab7c4c857f3347442354ffa1"}, + {file = "mypy_boto3_sns-1.38.0-py3-none-any.whl", hash = "sha256:e9da0864fe8463a390a0b83c3731830c7aabe98baac61091f06442fcb796186d"}, + {file = "mypy_boto3_sns-1.38.0.tar.gz", hash = "sha256:0e7cbec9c591db0e3c5acbe3ad3c47dfb0e58ef96c13aad49c27c9fdea3d4628"}, ] [package.dependencies] @@ -1157,13 +1121,13 @@ typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-sqs" -version = "1.35.93" -description = "Type annotations for boto3 SQS 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.38.0" +description = "Type annotations for boto3 SQS 1.38.0 service generated with mypy-boto3-builder 8.10.1" optional = false python-versions = ">=3.8" files = [ - {file = "mypy_boto3_sqs-1.35.93-py3-none-any.whl", hash = "sha256:341974f77e66851b9a4190d0014481e6baabae82d32f9ee559faa823b693609b"}, - {file = "mypy_boto3_sqs-1.35.93.tar.gz", hash = "sha256:8ea7f63e0878544705c31996ae4c064095fbb4f780f8323a84f7a75281d643fe"}, + {file = "mypy_boto3_sqs-1.38.0-py3-none-any.whl", hash = "sha256:8e881c8492f6f51dcbe1cce9d9f05334f4b256b5843e227fa925e0f6e702b31d"}, + {file = "mypy_boto3_sqs-1.38.0.tar.gz", hash = "sha256:39aebc121a2fe20f962fd83b617fd916003605d6f6851fdf195337a0aa428fe1"}, ] [package.dependencies] @@ -1171,13 +1135,13 @@ typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-ssm" -version = "1.35.93" -description = "Type annotations for boto3 SSM 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.38.5" +description = "Type annotations for boto3 SSM 1.38.5 service generated with mypy-boto3-builder 8.10.1" optional = false python-versions = ">=3.8" files = [ - {file = "mypy_boto3_ssm-1.35.93-py3-none-any.whl", hash = "sha256:7c115ee920e994ffc12408685b4236f4ad72f64a971c380aa63be21becf297ad"}, - {file = "mypy_boto3_ssm-1.35.93.tar.gz", hash = "sha256:2e2610e33ca4a075595d30fa061ef2e54c9d9b6ced14a196316dcd032372dd8c"}, + {file = "mypy_boto3_ssm-1.38.5-py3-none-any.whl", hash = "sha256:1bb0f932bee9038a53ab02781f959fc553a5d7f5e9d7cba56f998d0eb0a5878f"}, + {file = "mypy_boto3_ssm-1.38.5.tar.gz", hash = "sha256:e95bbad7d2f6b4849bc946eb9bbcc1f134cbdaafb172c365bedecdb3104eee0e"}, ] [package.dependencies] @@ -1185,13 +1149,13 @@ typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-stepfunctions" -version = "1.35.93" -description = "Type annotations for boto3 SFN 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.38.0" +description = "Type annotations for boto3 SFN 1.38.0 service generated with mypy-boto3-builder 8.10.1" optional = false python-versions = ">=3.8" files = [ - {file = "mypy_boto3_stepfunctions-1.35.93-py3-none-any.whl", hash = "sha256:7994450153298b87382119680d7fae4d8b5a6e6250cef364148ad8d0b84bd237"}, - {file = "mypy_boto3_stepfunctions-1.35.93.tar.gz", hash = "sha256:20230615c42e7aabbd43b62657ca3534e96767245705d12d42672ac87cd1b59c"}, + {file = "mypy_boto3_stepfunctions-1.38.0-py3-none-any.whl", hash = "sha256:3fd11db7a789de8ab523e1af24fb8f91a46281bb85ae3cfe51aaaff1b6b3c369"}, + {file = "mypy_boto3_stepfunctions-1.38.0.tar.gz", hash = "sha256:b0102265c49fa0537bdb5d214677da89737b784f57ec02340d72210528088a99"}, ] [package.dependencies] @@ -1199,24 +1163,24 @@ typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [[package]] name = "mypy-extensions" -version = "1.0.0" +version = "1.1.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, + {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, + {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, ] [[package]] name = "packaging" -version = "24.2" +version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, - {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, + {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, + {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, ] [[package]] @@ -1269,32 +1233,21 @@ files = [ [package.dependencies] ptyprocess = ">=0.5" -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -optional = false -python-versions = "*" -files = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] - [[package]] name = "platformdirs" -version = "4.3.6" +version = "4.3.8" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, - {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, + {file = "platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4"}, + {file = "platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc"}, ] [package.extras] -docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] -type = ["mypy (>=1.11.2)"] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.14.1)"] [[package]] name = "pluggy" @@ -1313,13 +1266,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "prompt-toolkit" -version = "3.0.48" +version = "3.0.51" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8" files = [ - {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, - {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, + {file = "prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07"}, + {file = "prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed"}, ] [package.dependencies] @@ -1366,32 +1319,32 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyproject-api" -version = "1.8.0" +version = "1.9.1" description = "API to interact with the python pyproject.toml based projects" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pyproject_api-1.8.0-py3-none-any.whl", hash = "sha256:3d7d347a047afe796fd5d1885b1e391ba29be7169bd2f102fcd378f04273d228"}, - {file = "pyproject_api-1.8.0.tar.gz", hash = "sha256:77b8049f2feb5d33eefcc21b57f1e279636277a8ac8ad6b5871037b243778496"}, + {file = "pyproject_api-1.9.1-py3-none-any.whl", hash = "sha256:7d6238d92f8962773dd75b5f0c4a6a27cce092a14b623b811dba656f3b628948"}, + {file = "pyproject_api-1.9.1.tar.gz", hash = "sha256:43c9918f49daab37e302038fc1aed54a8c7a91a9fa935d00b9a485f37e0f5335"}, ] [package.dependencies] -packaging = ">=24.1" -tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} +packaging = ">=25" +tomli = {version = ">=2.2.1", markers = "python_version < \"3.11\""} [package.extras] -docs = ["furo (>=2024.8.6)", "sphinx-autodoc-typehints (>=2.4.1)"] -testing = ["covdefaults (>=2.3)", "pytest (>=8.3.3)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "setuptools (>=75.1)"] +docs = ["furo (>=2024.8.6)", "sphinx-autodoc-typehints (>=3.2)"] +testing = ["covdefaults (>=2.3)", "pytest (>=8.3.5)", "pytest-cov (>=6.1.1)", "pytest-mock (>=3.14)", "setuptools (>=80.3.1)"] [[package]] name = "pytest" -version = "8.3.4" +version = "8.3.5" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, - {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, + {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, + {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, ] [package.dependencies] @@ -1425,13 +1378,13 @@ testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] [[package]] name = "pytest-httpserver" -version = "1.1.0" +version = "1.1.3" description = "pytest-httpserver is a httpserver for pytest" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pytest_httpserver-1.1.0-py3-none-any.whl", hash = "sha256:7ef88be8ed3354b6784daa3daa75a422370327c634053cefb124903fa8d73a41"}, - {file = "pytest_httpserver-1.1.0.tar.gz", hash = "sha256:6b1cb0199e2ed551b1b94d43f096863bbf6ae5bcd7c75c2c06845e5ce2dc8701"}, + {file = "pytest_httpserver-1.1.3-py3-none-any.whl", hash = "sha256:5f84757810233e19e2bb5287f3826a71c97a3740abe3a363af9155c0f82fdbb9"}, + {file = "pytest_httpserver-1.1.3.tar.gz", hash = "sha256:af819d6b533f84b4680b9416a5b3f67f1df3701f1da54924afd4d6e4ba5917ec"}, ] [package.dependencies] @@ -1453,47 +1406,47 @@ six = ">=1.5" [[package]] name = "ruff" -version = "0.8.6" +version = "0.11.9" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.8.6-py3-none-linux_armv6l.whl", hash = "sha256:defed167955d42c68b407e8f2e6f56ba52520e790aba4ca707a9c88619e580e3"}, - {file = "ruff-0.8.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:54799ca3d67ae5e0b7a7ac234baa657a9c1784b48ec954a094da7c206e0365b1"}, - {file = "ruff-0.8.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e88b8f6d901477c41559ba540beeb5a671e14cd29ebd5683903572f4b40a9807"}, - {file = "ruff-0.8.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0509e8da430228236a18a677fcdb0c1f102dd26d5520f71f79b094963322ed25"}, - {file = "ruff-0.8.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91a7ddb221779871cf226100e677b5ea38c2d54e9e2c8ed847450ebbdf99b32d"}, - {file = "ruff-0.8.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:248b1fb3f739d01d528cc50b35ee9c4812aa58cc5935998e776bf8ed5b251e75"}, - {file = "ruff-0.8.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:bc3c083c50390cf69e7e1b5a5a7303898966be973664ec0c4a4acea82c1d4315"}, - {file = "ruff-0.8.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52d587092ab8df308635762386f45f4638badb0866355b2b86760f6d3c076188"}, - {file = "ruff-0.8.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:61323159cf21bc3897674e5adb27cd9e7700bab6b84de40d7be28c3d46dc67cf"}, - {file = "ruff-0.8.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ae4478b1471fc0c44ed52a6fb787e641a2ac58b1c1f91763bafbc2faddc5117"}, - {file = "ruff-0.8.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0c000a471d519b3e6cfc9c6680025d923b4ca140ce3e4612d1a2ef58e11f11fe"}, - {file = "ruff-0.8.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9257aa841e9e8d9b727423086f0fa9a86b6b420fbf4bf9e1465d1250ce8e4d8d"}, - {file = "ruff-0.8.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:45a56f61b24682f6f6709636949ae8cc82ae229d8d773b4c76c09ec83964a95a"}, - {file = "ruff-0.8.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:496dd38a53aa173481a7d8866bcd6451bd934d06976a2505028a50583e001b76"}, - {file = "ruff-0.8.6-py3-none-win32.whl", hash = "sha256:e169ea1b9eae61c99b257dc83b9ee6c76f89042752cb2d83486a7d6e48e8f764"}, - {file = "ruff-0.8.6-py3-none-win_amd64.whl", hash = "sha256:f1d70bef3d16fdc897ee290d7d20da3cbe4e26349f62e8a0274e7a3f4ce7a905"}, - {file = "ruff-0.8.6-py3-none-win_arm64.whl", hash = "sha256:7d7fc2377a04b6e04ffe588caad613d0c460eb2ecba4c0ccbbfe2bc973cbc162"}, - {file = "ruff-0.8.6.tar.gz", hash = "sha256:dcad24b81b62650b0eb8814f576fc65cfee8674772a6e24c9b747911801eeaa5"}, + {file = "ruff-0.11.9-py3-none-linux_armv6l.whl", hash = "sha256:a31a1d143a5e6f499d1fb480f8e1e780b4dfdd580f86e05e87b835d22c5c6f8c"}, + {file = "ruff-0.11.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:66bc18ca783b97186a1f3100e91e492615767ae0a3be584e1266aa9051990722"}, + {file = "ruff-0.11.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:bd576cd06962825de8aece49f28707662ada6a1ff2db848d1348e12c580acbf1"}, + {file = "ruff-0.11.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b1d18b4be8182cc6fddf859ce432cc9631556e9f371ada52f3eaefc10d878de"}, + {file = "ruff-0.11.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0f3f46f759ac623e94824b1e5a687a0df5cd7f5b00718ff9c24f0a894a683be7"}, + {file = "ruff-0.11.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f34847eea11932d97b521450cf3e1d17863cfa5a94f21a056b93fb86f3f3dba2"}, + {file = "ruff-0.11.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f33b15e00435773df97cddcd263578aa83af996b913721d86f47f4e0ee0ff271"}, + {file = "ruff-0.11.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b27613a683b086f2aca8996f63cb3dd7bc49e6eccf590563221f7b43ded3f65"}, + {file = "ruff-0.11.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e0d88756e63e8302e630cee3ce2ffb77859797cc84a830a24473939e6da3ca6"}, + {file = "ruff-0.11.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:537c82c9829d7811e3aa680205f94c81a2958a122ac391c0eb60336ace741a70"}, + {file = "ruff-0.11.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:440ac6a7029f3dee7d46ab7de6f54b19e34c2b090bb4f2480d0a2d635228f381"}, + {file = "ruff-0.11.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:71c539bac63d0788a30227ed4d43b81353c89437d355fdc52e0cda4ce5651787"}, + {file = "ruff-0.11.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c67117bc82457e4501473c5f5217d49d9222a360794bfb63968e09e70f340abd"}, + {file = "ruff-0.11.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e4b78454f97aa454586e8a5557facb40d683e74246c97372af3c2d76901d697b"}, + {file = "ruff-0.11.9-py3-none-win32.whl", hash = "sha256:7fe1bc950e7d7b42caaee2a8a3bc27410547cc032c9558ee2e0f6d3b209e845a"}, + {file = "ruff-0.11.9-py3-none-win_amd64.whl", hash = "sha256:52edaa4a6d70f8180343a5b7f030c7edd36ad180c9f4d224959c2d689962d964"}, + {file = "ruff-0.11.9-py3-none-win_arm64.whl", hash = "sha256:bcf42689c22f2e240f496d0c183ef2c6f7b35e809f12c1db58f75d9aa8d630ca"}, + {file = "ruff-0.11.9.tar.gz", hash = "sha256:ebd58d4f67a00afb3a30bf7d383e52d0e036e6195143c6db7019604a05335517"}, ] [[package]] name = "s3transfer" -version = "0.10.4" +version = "0.12.0" description = "An Amazon S3 Transfer Manager" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e"}, - {file = "s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7"}, + {file = "s3transfer-0.12.0-py3-none-any.whl", hash = "sha256:35b314d7d82865756edab59f7baebc6b477189e6ab4c53050e28c1de4d9cce18"}, + {file = "s3transfer-0.12.0.tar.gz", hash = "sha256:8ac58bc1989a3fdb7c7f3ee0918a66b160d038a147c7b5db1500930a607e9a1c"}, ] [package.dependencies] -botocore = ">=1.33.2,<2.0a.0" +botocore = ">=1.37.4,<2.0a.0" [package.extras] -crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] +crt = ["botocore[crt] (>=1.37.4,<2.0a.0)"] [[package]] name = "six" @@ -1568,30 +1521,30 @@ files = [ [[package]] name = "tox" -version = "4.23.2" +version = "4.26.0" description = "tox is a generic virtualenv management and test command line tool" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "tox-4.23.2-py3-none-any.whl", hash = "sha256:452bc32bb031f2282881a2118923176445bac783ab97c874b8770ab4c3b76c38"}, - {file = "tox-4.23.2.tar.gz", hash = "sha256:86075e00e555df6e82e74cfc333917f91ecb47ffbc868dcafbd2672e332f4a2c"}, + {file = "tox-4.26.0-py3-none-any.whl", hash = "sha256:75f17aaf09face9b97bd41645028d9f722301e912be8b4c65a3f938024560224"}, + {file = "tox-4.26.0.tar.gz", hash = "sha256:a83b3b67b0159fa58e44e646505079e35a43317a62d2ae94725e0586266faeca"}, ] [package.dependencies] -cachetools = ">=5.5" +cachetools = ">=5.5.1" chardet = ">=5.2" colorama = ">=0.4.6" filelock = ">=3.16.1" -packaging = ">=24.1" +packaging = ">=24.2" platformdirs = ">=4.3.6" pluggy = ">=1.5" pyproject-api = ">=1.8" -tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} +tomli = {version = ">=2.2.1", markers = "python_version < \"3.11\""} typing-extensions = {version = ">=4.12.2", markers = "python_version < \"3.11\""} -virtualenv = ">=20.26.6" +virtualenv = ">=20.31" [package.extras] -test = ["devpi-process (>=1.0.2)", "pytest (>=8.3.3)", "pytest-mock (>=3.14)"] +test = ["devpi-process (>=1.0.2)", "pytest (>=8.3.4)", "pytest-mock (>=3.14)"] [[package]] name = "traitlets" @@ -1610,35 +1563,35 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "types-awscrt" -version = "0.23.6" +version = "0.27.1" description = "Type annotations and code completion for awscrt" optional = false python-versions = ">=3.8" files = [ - {file = "types_awscrt-0.23.6-py3-none-any.whl", hash = "sha256:fbf9c221af5607b24bf17f8431217ce8b9a27917139edbc984891eb63fd5a593"}, - {file = "types_awscrt-0.23.6.tar.gz", hash = "sha256:405bce8c281f9e7c6c92a229225cc0bf10d30729a6a601123213389bd524b8b1"}, + {file = "types_awscrt-0.27.1-py3-none-any.whl", hash = "sha256:e86b83d0fd8c770f985b8c458c28e232dae9adee0689d0a9671868a8bf397b0a"}, + {file = "types_awscrt-0.27.1.tar.gz", hash = "sha256:3c2bee52ee45022daaf4f106d5d1b5f0ff0a8e3e6093dda65f5315b7669bc418"}, ] [[package]] name = "types-s3transfer" -version = "0.10.4" +version = "0.12.0" description = "Type annotations and code completion for s3transfer" optional = false python-versions = ">=3.8" files = [ - {file = "types_s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:22ac1aabc98f9d7f2928eb3fb4d5c02bf7435687f0913345a97dd3b84d0c217d"}, - {file = "types_s3transfer-0.10.4.tar.gz", hash = "sha256:03123477e3064c81efe712bf9d372c7c72f2790711431f9baa59cf96ea607267"}, + {file = "types_s3transfer-0.12.0-py3-none-any.whl", hash = "sha256:101bbc5b7f00b71512374df881f480fc6bf63c948b5098ab024bf3370fbfb0e8"}, + {file = "types_s3transfer-0.12.0.tar.gz", hash = "sha256:f8f59201481e904362873bf0be3267f259d60ad946ebdfcb847d092a1fa26f98"}, ] [[package]] name = "typing-extensions" -version = "4.12.2" +version = "4.13.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, + {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, + {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, ] [[package]] @@ -1659,13 +1612,13 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "urllib3" -version = "2.3.0" +version = "2.4.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" files = [ - {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, - {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, + {file = "urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"}, + {file = "urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466"}, ] [package.extras] @@ -1676,13 +1629,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.28.1" +version = "20.31.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" files = [ - {file = "virtualenv-20.28.1-py3-none-any.whl", hash = "sha256:412773c85d4dab0409b83ec36f7a6499e72eaf08c80e81e9576bca61831c71cb"}, - {file = "virtualenv-20.28.1.tar.gz", hash = "sha256:5d34ab240fdb5d21549b76f9e8ff3af28252f5499fb6d6f031adac4e5a8c5329"}, + {file = "virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11"}, + {file = "virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af"}, ] [package.dependencies] @@ -1707,13 +1660,13 @@ files = [ [[package]] name = "werkzeug" -version = "3.0.6" +version = "3.1.3" description = "The comprehensive WSGI web application library." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "werkzeug-3.0.6-py3-none-any.whl", hash = "sha256:1bc0c2310d2fbb07b1dd1105eba2f7af72f322e1e455f2f93c993bee8c8a5f17"}, - {file = "werkzeug-3.0.6.tar.gz", hash = "sha256:a8dd59d4de28ca70471a34cba79bed5f7ef2e036a76b3ab0835474246eb41f8d"}, + {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"}, + {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"}, ] [package.dependencies] @@ -1727,5 +1680,5 @@ pytest = [] [metadata] lock-version = "2.0" -python-versions = ">=3.8,<4.0" -content-hash = "c469cf3c0935de9b48fb83ae601bd49d577481bc89b21e6077a088877996164d" +python-versions = ">=3.9,<4.0" +content-hash = "90f35ccea5970742725e7c40cb0fdbd651626eface9a6d50508b982a830279d2" diff --git a/pyproject.toml b/pyproject.toml index d9d11d0..eb33394 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,9 +13,9 @@ repository = "https://github.com/NHSDigital/nhs-aws-helpers" [tool.poetry.dependencies] # core dependencies -python = ">=3.8,<4.0" -boto3 = "^1.35.95" -boto3-stubs = {extras = ["s3", "ssm", "secretsmanager", "dynamodb", "stepfunctions", "sqs", "lambda", "logs", "ses", "sns", "events", "kms", "firehose", "athena"], version = "^1.35.93"} +python = ">=3.9,<4.0" +boto3 = "^1.38.14" +boto3-stubs = {extras = ["s3", "ssm", "secretsmanager", "dynamodb", "stepfunctions", "sqs", "lambda", "logs", "ses", "sns", "events", "kms", "firehose", "athena"], version = "^1.38.6"} botocore-stubs = "^1.35.93" @@ -30,8 +30,8 @@ mypy = "^1.4.0" coverage = "^7.6.0" pytest = "^8.3.3" pytest-asyncio = "^0.24.0" -tox = "^4.20.0" -pytest-httpserver = "^1.0.8" +tox = "^4.25.0" +pytest-httpserver = "^1.1.3" ruff = "^0" @@ -43,7 +43,7 @@ pytest = ["pytest", "petname"] [tool.black] line-length = 120 -target-version = ['py38', 'py39', 'py310', 'py311'] +target-version = ['py39', 'py310', 'py311'] include = '\.pyi?$' #extend-exclude = ''' #/( @@ -88,7 +88,7 @@ exclude = [ ] lint.unfixable = ["SIM112"] line-length = 120 -target-version = "py38" +target-version = "py39" @@ -130,7 +130,7 @@ python_files = "*_tests.py test_*.py" norecursedirs = ".git .venv .eggs build dist .tox" [tool.mypy] -python_version = "3.8" +python_version = "3.9" warn_return_any = true warn_unused_configs = true show_error_codes = true @@ -139,11 +139,10 @@ check_untyped_defs = true [tool.tox] legacy_tox_ini = """ [tox] -envlist = py38,py39,py310,py311 +envlist = py39,py310,py311 [gh-actions] python = - 3.8: py38 3.9: py39 3.10: py310 3.11: py311 diff --git a/scripts/sonar_tests.py b/scripts/sonar_tests.py index c73b962..c9e3c7c 100755 --- a/scripts/sonar_tests.py +++ b/scripts/sonar_tests.py @@ -3,10 +3,9 @@ import re import xml.dom.minidom as dom from collections import defaultdict -from typing import Dict, List, Tuple -def _get_test_suites(test_src: str) -> List[dom.Element]: +def _get_test_suites(test_src: str) -> list[dom.Element]: src_tree: dom.Document = dom.parse(test_src) src_root = src_tree.documentElement @@ -46,7 +45,7 @@ def _add_test_detail_if_present(case_src: dom.Element, case_out: dom.Element, do def _translate_test_case( case_src: dom.Element, dom_out: dom.Document, is_feature_file: bool -) -> Tuple[str, dom.Element]: +) -> tuple[str, dom.Element]: classname = case_src.getAttribute("classname") test_name = case_src.getAttribute("name") duration = round(float(case_src.getAttribute("time") or "0") * 1000, 0) @@ -61,7 +60,7 @@ def _translate_test_case( return test_file, case_out -def _get_tests_from_file(test_src: str, dom_out: dom.Document) -> Dict[str, List[dom.Element]]: +def _get_tests_from_file(test_src: str, dom_out: dom.Document) -> dict[str, list[dom.Element]]: is_feature_file = os.path.basename(test_src).startswith("TESTS-") test_suites = _get_test_suites(test_src) @@ -71,7 +70,7 @@ def _get_tests_from_file(test_src: str, dom_out: dom.Document) -> Dict[str, List print(test_src, "suites", len(test_suites), "cases", len(test_cases)) - tests: Dict[str, List[dom.Element]] = defaultdict(list) + tests: dict[str, list[dom.Element]] = defaultdict(list) for test_case in test_cases: test_file, case_out = _translate_test_case(test_case, dom_out, is_feature_file) @@ -102,7 +101,7 @@ def _transform_xunit_results(reports_dir: str, output_sonar: str): dom_out = dom.getDOMImplementation().createDocument(None, "testExecutions", None) dom_out.documentElement.setAttribute("version", "1") - all_tests: Dict[str, List[dom.Element]] = defaultdict(list) + all_tests: dict[str, list[dom.Element]] = defaultdict(list) for source_file in os.listdir(src_junit): if not source_file.endswith(".xml"): diff --git a/tests/async_s3_object_buffer_tests.py b/tests/async_s3_object_buffer_tests.py index 1b75cea..1e4da61 100644 --- a/tests/async_s3_object_buffer_tests.py +++ b/tests/async_s3_object_buffer_tests.py @@ -1,7 +1,7 @@ import sys from io import SEEK_CUR, SEEK_END, BytesIO from time import time -from typing import Any, List, cast +from typing import Any, cast from uuid import uuid4 import pytest @@ -169,7 +169,7 @@ async def test_read_negative_all() -> None: async with s3_reader_text() as reader: _ = await reader.read() - chunks: List[str] = [] + chunks: list[str] = [] chunk = await reader.read(read_size) while chunk: chunks.insert(0, chunk) diff --git a/tests/aws_tests.py b/tests/aws_tests.py index d758814..dabc093 100644 --- a/tests/aws_tests.py +++ b/tests/aws_tests.py @@ -1,6 +1,6 @@ import logging import os -from typing import Any, List, cast +from typing import Any, cast from uuid import uuid4 import pytest @@ -48,7 +48,7 @@ def test_transaction_cancellation_reasons(error, expected_reasons): def test_ddb_retries_all_fail(): - calls: List[Any] = [] + calls: list[Any] = [] @dynamodb_retry_backoff(max_retries=2) def fail_me(): @@ -64,7 +64,6 @@ def fail_me(): def test_s3_delete_keys_all(temp_s3_bucket: Bucket): - keys = [str(key) for key in range(1003)] for key in keys: @@ -80,7 +79,6 @@ def test_s3_delete_keys_all(temp_s3_bucket: Bucket): def test_s3_delete_keys_partial(temp_s3_bucket: Bucket): - keys = [str(key) for key in range(1003)] for key in keys: @@ -102,7 +100,7 @@ def test_s3_delete_keys_partial(temp_s3_bucket: Bucket): "keys", [(), ("a",), ("a/b",), ("a/b", "a/c")], ) -def test_s3_get_all_keys(temp_s3_bucket: Bucket, keys: List[str]): +def test_s3_get_all_keys(temp_s3_bucket: Bucket, keys: list[str]): for key in keys: temp_s3_bucket.put_object(Key=key, Body=f"Some data {uuid4().hex}".encode()) @@ -116,7 +114,7 @@ def test_s3_get_all_keys(temp_s3_bucket: Bucket, keys: List[str]): "keys", [(), ("a",), ("a/b",), ("a/b", "a/c")], ) -def test_s3_get_all_keys_under_prefix(temp_s3_bucket: Bucket, keys: List[str]): +def test_s3_get_all_keys_under_prefix(temp_s3_bucket: Bucket, keys: list[str]): expected_folder = uuid4().hex # Keys that shouldn't be included @@ -138,7 +136,7 @@ def test_s3_ls(temp_s3_bucket: Bucket): temp_s3_bucket.put_object(Key=f"{expected_folder}/1/b.txt", Body=f"Some data {uuid4().hex}".encode()) temp_s3_bucket.put_object(Key=f"{expected_folder}/2/c.txt", Body=f"Some data {uuid4().hex}".encode()) - files = cast(List[ObjectSummary], list(s3_ls(s3_build_uri(temp_s3_bucket.name, expected_folder)))) + files = cast(list[ObjectSummary], list(s3_ls(s3_build_uri(temp_s3_bucket.name, expected_folder)))) assert len(files) == 3 assert {f.key for f in files} == { @@ -155,7 +153,7 @@ def test_s3_ls_versioning_on_non_versioned_bucket(temp_s3_bucket: Bucket): temp_s3_bucket.put_object(Key=f"{expected_folder}/2/c.txt", Body=f"Some data {uuid4().hex}".encode()) temp_s3_bucket.put_object(Key=f"{expected_folder}/2/c.txt", Body=f"Some new data {uuid4().hex}".encode()) - files = cast(List[ObjectVersion], list(s3_ls(s3_build_uri(temp_s3_bucket.name, expected_folder), versioning=True))) + files = cast(list[ObjectVersion], list(s3_ls(s3_build_uri(temp_s3_bucket.name, expected_folder), versioning=True))) assert len(files) == 3 assert {f.key for f in files} == { @@ -174,7 +172,7 @@ def test_s3_ls_versioning(temp_versioned_s3_bucket: Bucket): temp_versioned_s3_bucket.put_object(Key=f"{expected_folder}/2/c.txt", Body=f"Some new data {uuid4().hex}".encode()) files = cast( - List[ObjectVersion], list(s3_ls(s3_build_uri(temp_versioned_s3_bucket.name, expected_folder), versioning=True)) + list[ObjectVersion], list(s3_ls(s3_build_uri(temp_versioned_s3_bucket.name, expected_folder), versioning=True)) ) assert len(files) == 4 @@ -267,9 +265,12 @@ def _post_create_aws(boto_module: str, _: str, client): register_config_default("s3", config) post_create_client(_post_create_aws) - with pytest.raises(ClientError) as ex, temp_env_vars( # noqa: PT012 - # Point any new boto resources or clients at our fake endpoint - AWS_ENDPOINT_URL=f"http://localhost:{server_port}", + with ( # noqa: PT012 + pytest.raises(ClientError) as ex, + temp_env_vars( + # Point any new boto resources or clients at our fake endpoint + AWS_ENDPOINT_URL=f"http://localhost:{server_port}", + ), ): original_log_level = logging.getLogger("werkzeug").level try: diff --git a/tests/base_model_store_tests.py b/tests/base_model_store_tests.py index d802fe4..9ea7c44 100644 --- a/tests/base_model_store_tests.py +++ b/tests/base_model_store_tests.py @@ -1,10 +1,11 @@ import pickle import random import sys +from collections.abc import Generator, Mapping from dataclasses import dataclass, field from datetime import date, datetime from enum import Enum -from typing import Any, Dict, Generator, List, Mapping, Optional, Type, TypedDict, Union, cast +from typing import Any, Optional, TypedDict, Union, cast from uuid import uuid4 import petname # type: ignore[import] @@ -127,8 +128,8 @@ class MyDerivedModel(MyBaseModel): set_type: Optional[set] = field(default_factory=set) frozenset_type: Optional[frozenset] = field(default_factory=frozenset) none_string: Optional[str] = None - none_list: Optional[List[str]] = None - nested_items: List[NestedItem] = field(default_factory=list) + none_list: Optional[list[str]] = None + nested_items: list[NestedItem] = field(default_factory=list) nested_item: NestedItem = field(default_factory=lambda: NestedItem(event="created")) union_date: Union[datetime, None] = field(default_factory=datetime.utcnow) bytes_type: Union[bytes, None] = None @@ -189,7 +190,7 @@ def some_uuid(self) -> str: class ASpecialDerivedModel(MyBaseModel): id: str special_field: NotSerializable - events: List[NestedItem] = field(default_factory=list) + events: list[NestedItem] = field(default_factory=list) last_modified: datetime = field(default_factory=datetime.utcnow) def get_key(self) -> _MyModelKey: @@ -221,8 +222,8 @@ def __init__(self, table_name: str): @classmethod def _before_deserialise_model( - cls, model_dict: Dict[str, Any], model_type: Type[MyBaseModel], **kwargs - ) -> Dict[str, Any]: + cls, model_dict: dict[str, Any], model_type: type[MyBaseModel], **kwargs + ) -> dict[str, Any]: if not model_dict: return model_dict @@ -615,7 +616,7 @@ async def test_query_all_models(store: MyModelStore): async def test_batch_get_model(store: MyModelStore): - models: List[MyBaseModel] = [MyDerivedModel(id=uuid4().hex) for _ in range(10)] + models: list[MyBaseModel] = [MyDerivedModel(id=uuid4().hex) for _ in range(10)] models.extend([AnotherModel(id=uuid4().hex) for _ in range(10)]) async with store.batch_writer() as writer: for model in models: @@ -628,7 +629,7 @@ async def test_batch_get_model(store: MyModelStore): async def test_batch_get_item(store: MyModelStore): - models: List[MyBaseModel] = [MyDerivedModel(id=uuid4().hex) for _ in range(10)] + models: list[MyBaseModel] = [MyDerivedModel(id=uuid4().hex) for _ in range(10)] models.extend([AnotherModel(id=uuid4().hex) for _ in range(10)]) async with store.batch_writer() as writer: for model in models: @@ -641,14 +642,14 @@ async def test_batch_get_item(store: MyModelStore): async def test_batch_get_item_ordered(store: MyModelStore): - models: List[MyBaseModel] = [MyDerivedModel(id=uuid4().hex) for _ in range(10)] + models: list[MyBaseModel] = [MyDerivedModel(id=uuid4().hex) for _ in range(10)] models.extend([AnotherModel(id=uuid4().hex) for _ in range(10)]) async with store.batch_writer() as writer: for model in models: await writer.put_item(model) got = cast( - List[dict], + list[dict], await store.batch_get_item_ordered( [model.model_key() for model in models], ProjectionExpression="my_pk,my_sk,last_modified" ), @@ -659,7 +660,7 @@ async def test_batch_get_item_ordered(store: MyModelStore): async def test_unregistered_model(store: MyModelStore): - models: List[MyBaseModel] = [UnregisteredModel(id=uuid4().hex) for _ in range(10)] + models: list[MyBaseModel] = [UnregisteredModel(id=uuid4().hex) for _ in range(10)] async with store.batch_writer() as writer: for model in models: await writer.put_item(model) diff --git a/tests/ddb_tests.py b/tests/ddb_tests.py index 939498e..ff1339e 100644 --- a/tests/ddb_tests.py +++ b/tests/ddb_tests.py @@ -1,4 +1,4 @@ -from typing import Generator +from collections.abc import Generator import petname # type: ignore[import] import pytest @@ -58,4 +58,8 @@ def test_default_temp_table(cloned_table_defaults: Table): def test_provisioned_temp_table(cloned_table_provisioned: Table): - assert cloned_table_provisioned.provisioned_throughput == {"ReadCapacityUnits": 99, "WriteCapacityUnits": 99} + assert cloned_table_provisioned.provisioned_throughput == { + "NumberOfDecreasesToday": 0, + "ReadCapacityUnits": 99, + "WriteCapacityUnits": 99, + } diff --git a/tests/fixtures_tests.py b/tests/fixtures_tests.py index 3a580d8..d74284e 100644 --- a/tests/fixtures_tests.py +++ b/tests/fixtures_tests.py @@ -1,5 +1,4 @@ import json -from typing import Tuple from uuid import uuid4 from mypy_boto3_s3.service_resource import Bucket @@ -42,7 +41,7 @@ def test_get_temp_fifo_queue(temp_fifo_queue: Queue): assert messages[0]["my_event"] == 1234 -def test_get_temp_event_bus(temp_event_bus: Tuple[Queue, str]): +def test_get_temp_event_bus(temp_event_bus: tuple[Queue, str]): events_queue, bus_name = temp_event_bus assert events_queue assert events_queue.url diff --git a/tests/s3_object_buffer_tests.py b/tests/s3_object_buffer_tests.py index 12a140c..6adf847 100644 --- a/tests/s3_object_buffer_tests.py +++ b/tests/s3_object_buffer_tests.py @@ -1,6 +1,6 @@ from io import SEEK_CUR, SEEK_END, BytesIO from time import time -from typing import List, cast +from typing import cast from uuid import uuid4 import pytest @@ -162,7 +162,7 @@ def test_read_negative_all() -> None: with s3_reader_text() as reader: _ = reader.read() - chunks: List[str] = [] + chunks: list[str] = [] chunk = reader.read(read_size) while chunk: chunks.insert(0, chunk) diff --git a/tests/test_helpers.py b/tests/test_helpers.py index b026bf1..c9b768e 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -1,7 +1,6 @@ import json from typing import ( Callable, - List, Optional, cast, ) @@ -9,7 +8,7 @@ from mypy_boto3_sqs.service_resource import Queue -def read_sqs_json_messages(queue: Queue, predicate: Optional[Callable[[dict], bool]] = None, **kwargs) -> List[dict]: +def read_sqs_json_messages(queue: Queue, predicate: Optional[Callable[[dict], bool]] = None, **kwargs) -> list[dict]: defaults = {"MaxNumberOfMessages": 10, "WaitTimeSeconds": 0} if kwargs: defaults.update(kwargs) @@ -19,7 +18,7 @@ def read_sqs_json_messages(queue: Queue, predicate: Optional[Callable[[dict], bo if not messages: return [] - parsed = cast(List[dict], [json.loads(message.body) for message in messages]) + parsed = cast(list[dict], [json.loads(message.body) for message in messages]) if not predicate: return parsed