From e5285b3be24fbfb47f47b7dc33aa2ad7621085a6 Mon Sep 17 00:00:00 2001 From: Snigdhajyoti Ghosh Date: Thu, 30 Nov 2023 03:09:30 +0530 Subject: [PATCH] error handling for keyboard interaption --- .editorconfig | 1 + aws_fusion/__init__.py | 2 +- aws_fusion/app.py | 8 +++++-- aws_fusion/aws/api.py | 3 ++- aws_fusion/aws/assume_role.py | 9 ++++---- aws_fusion/aws/session.py | 3 ++- aws_fusion/commands/config_switch.py | 21 +++++++++++++++---- .../generate_okta_device_auth_credentials.py | 5 ++++- aws_fusion/commands/iam_user_credentials.py | 3 ++- aws_fusion/commands/init.py | 4 ++-- aws_fusion/commands/open_browser.py | 9 ++++---- aws_fusion/okta/api.py | 9 ++++---- setup.py | 6 ++++-- 13 files changed, 55 insertions(+), 28 deletions(-) diff --git a/.editorconfig b/.editorconfig index fbc0728..402c705 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,3 +7,4 @@ ij_python_blank_lines_after_imports = 2 ij_python_optimize_imports_sort_imports = true ij_python_call_parameters_wrap = off ij_python_method_parameters_wrap = off +ij_python_optimize_imports_always_split_from_imports = true diff --git a/aws_fusion/__init__.py b/aws_fusion/__init__.py index fcb6b5d..51ed7c4 100644 --- a/aws_fusion/__init__.py +++ b/aws_fusion/__init__.py @@ -1 +1 @@ -__version__ = '1.5' +__version__ = '1.5.1' diff --git a/aws_fusion/app.py b/aws_fusion/app.py index 96f18cc..3a2fa9d 100644 --- a/aws_fusion/app.py +++ b/aws_fusion/app.py @@ -1,8 +1,12 @@ import argparse import logging - from importlib.metadata import version -from .commands import open_browser, iam_user_credentials, generate_okta_device_auth_credentials, init, config_switch + +from .commands import config_switch +from .commands import generate_okta_device_auth_credentials +from .commands import iam_user_credentials +from .commands import init +from .commands import open_browser def main(): diff --git a/aws_fusion/aws/api.py b/aws_fusion/aws/api.py index 9312652..e872f6a 100644 --- a/aws_fusion/aws/api.py +++ b/aws_fusion/aws/api.py @@ -1,6 +1,7 @@ import json +from urllib import parse +from urllib import request -from urllib import parse, request ISSUER = "aws-console-python-script" SESSION_DURATION_IN_SECONDS = 43200 diff --git a/aws_fusion/aws/assume_role.py b/aws_fusion/aws/assume_role.py index a00816e..31dce77 100644 --- a/aws_fusion/aws/assume_role.py +++ b/aws_fusion/aws/assume_role.py @@ -1,14 +1,15 @@ -import sys -import boto3 -import hashlib import datetime -import logging +import hashlib import json +import logging import os +import sys +import boto3 from botocore.exceptions import ClientError from botocore.utils import JSONFileCache + LOG = logging.getLogger(__name__) diff --git a/aws_fusion/aws/session.py b/aws_fusion/aws/session.py index 170cf7d..57474d8 100644 --- a/aws_fusion/aws/session.py +++ b/aws_fusion/aws/session.py @@ -1,9 +1,10 @@ -import boto3 import logging import os +import boto3 from botocore.utils import JSONFileCache + LOG = logging.getLogger(__name__) diff --git a/aws_fusion/commands/config_switch.py b/aws_fusion/commands/config_switch.py index 162ef99..894b521 100644 --- a/aws_fusion/commands/config_switch.py +++ b/aws_fusion/commands/config_switch.py @@ -1,7 +1,12 @@ -import inquirer -import boto3 +import logging import os +import boto3 +import inquirer + + +LOG = logging.getLogger(__name__) + def setup(subparsers, parent_parser): summary = 'Switching between AWS config' @@ -22,7 +27,11 @@ def switch_profile(args): available_profiles = session.available_profiles profile_inquiry = inquirer.List("profile", message="Choose a profile", choices=available_profiles, default=session.profile_name, carousel=True) - answers = inquirer.prompt([profile_inquiry], theme=inquirer.themes.GreenPassion()) + try: + answers = inquirer.prompt([profile_inquiry], theme=inquirer.themes.GreenPassion(), raise_keyboard_interrupt=True) + except KeyboardInterrupt: + LOG.warning('Cancelled by user') + exit(7) profile = answers.get('profile') if answers.get('profile') != 'default' else None __update_file('profile', profile) @@ -33,7 +42,11 @@ def switch_region(args): available_regions = session.get_available_regions('ec2') region_inquery = inquirer.List("region", message="Choose a region", choices=available_regions, default=session.region_name, carousel=True) - answers = inquirer.prompt([region_inquery], theme=inquirer.themes.GreenPassion()) + try: + answers = inquirer.prompt([region_inquery], theme=inquirer.themes.GreenPassion(), raise_keyboard_interrupt=True) + except KeyboardInterrupt: + LOG.warning('Cancelled by user') + exit(7) region = answers.get('region') if answers.get('region') != session.region_name else None __update_file('region', region) diff --git a/aws_fusion/commands/generate_okta_device_auth_credentials.py b/aws_fusion/commands/generate_okta_device_auth_credentials.py index 6ff8a5a..16e61b9 100644 --- a/aws_fusion/commands/generate_okta_device_auth_credentials.py +++ b/aws_fusion/commands/generate_okta_device_auth_credentials.py @@ -1,7 +1,10 @@ import logging from ..aws.assume_role import AssumeRoleWithSamlCache -from ..okta.api import device_auth, verification_and_token, session_and_token, saml_assertion +from ..okta.api import device_auth +from ..okta.api import saml_assertion +from ..okta.api import session_and_token +from ..okta.api import verification_and_token LOG = logging.getLogger(__name__) diff --git a/aws_fusion/commands/iam_user_credentials.py b/aws_fusion/commands/iam_user_credentials.py index a9eb8ef..ababbf3 100644 --- a/aws_fusion/commands/iam_user_credentials.py +++ b/aws_fusion/commands/iam_user_credentials.py @@ -1,8 +1,9 @@ import argparse import json -import keyring import sys +import keyring + def setup(subparsers, parent_parser): common_parser = argparse.ArgumentParser(add_help=False) diff --git a/aws_fusion/commands/init.py b/aws_fusion/commands/init.py index 3f16940..2da4104 100644 --- a/aws_fusion/commands/init.py +++ b/aws_fusion/commands/init.py @@ -1,7 +1,7 @@ -import os import configparser -import sys import logging +import os +import sys LOG = logging.getLogger(__name__) diff --git a/aws_fusion/commands/open_browser.py b/aws_fusion/commands/open_browser.py index c7312d4..d220408 100644 --- a/aws_fusion/commands/open_browser.py +++ b/aws_fusion/commands/open_browser.py @@ -1,11 +1,12 @@ +import logging import os -import pyperclip -import webbrowser import sys -import logging +import webbrowser + +import pyperclip -from ..aws.session import credentials from ..aws.api import signin_url +from ..aws.session import credentials LOG = logging.getLogger(__name__) diff --git a/aws_fusion/okta/api.py b/aws_fusion/okta/api.py index eb9f374..e14eea5 100644 --- a/aws_fusion/okta/api.py +++ b/aws_fusion/okta/api.py @@ -1,11 +1,10 @@ -import json - -import requests -import webbrowser -import time import base64 +import json import logging +import time +import webbrowser +import requests from bs4 import BeautifulSoup diff --git a/setup.py b/setup.py index 913157b..ea36744 100755 --- a/setup.py +++ b/setup.py @@ -1,7 +1,9 @@ #!/usr/bin/env python -import re import os -from setuptools import setup, find_packages +import re + +from setuptools import find_packages +from setuptools import setup here = os.path.abspath(os.path.dirname(__file__))