| Server IP : 3.96.16.70 / Your IP : 216.73.216.15 Web Server : Apache System : Linux ip-172-31-26-103.ca-central-1.compute.internal 6.1.163-186.299.amzn2023.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Feb 24 16:35:42 UTC 2026 x86_64 User : ec2-user ( 1000) PHP Version : 8.4.18 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /lib/python3.9/site-packages/awscli/ |
Upload File : |
# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
import logging
import signal
from botocore.exceptions import (
ClientError,
NoCredentialsError,
NoRegionError,
)
from botocore.exceptions import (
ParamValidationError as BotocoreParamValidationError,
)
from awscli.argparser import USAGE, ArgParseException
from awscli.argprocess import ParamError, ParamSyntaxError
from awscli.arguments import UnknownArgumentError
from awscli.autoprompt.factory import PrompterKeyboardInterrupt
from awscli.constants import (
CLIENT_ERROR_RC,
CONFIGURATION_ERROR_RC,
GENERAL_ERROR_RC,
PARAM_VALIDATION_ERROR_RC,
)
from awscli.customizations.exceptions import (
ConfigurationError,
ParamValidationError,
)
from awscli.utils import PagerInitializationException
LOG = logging.getLogger(__name__)
def construct_entry_point_handlers_chain():
handlers = [
ParamValidationErrorsHandler(),
PrompterInterruptExceptionHandler(),
InterruptExceptionHandler(),
GeneralExceptionHandler(),
]
return ChainedExceptionHandler(exception_handlers=handlers)
def construct_cli_error_handlers_chain():
handlers = [
ParamValidationErrorsHandler(),
UnknownArgumentErrorHandler(),
ConfigurationErrorHandler(),
NoRegionErrorHandler(),
NoCredentialsErrorHandler(),
PagerErrorHandler(),
InterruptExceptionHandler(),
ClientErrorHandler(),
GeneralExceptionHandler(),
]
return ChainedExceptionHandler(exception_handlers=handlers)
class BaseExceptionHandler:
def handle_exception(self, exception, stdout, stderr):
raise NotImplementedError('handle_exception')
class FilteredExceptionHandler(BaseExceptionHandler):
EXCEPTIONS_TO_HANDLE = ()
MESSAGE = '%s'
def handle_exception(self, exception, stdout, stderr):
if isinstance(exception, self.EXCEPTIONS_TO_HANDLE):
return_val = self._do_handle_exception(exception, stdout, stderr)
if return_val is not None:
return return_val
def _do_handle_exception(self, exception, stdout, stderr):
stderr.write("\n")
stderr.write(self.MESSAGE % exception)
stderr.write("\n")
return self.RC
class ParamValidationErrorsHandler(FilteredExceptionHandler):
EXCEPTIONS_TO_HANDLE = (
ParamError,
ParamSyntaxError,
ArgParseException,
ParamValidationError,
BotocoreParamValidationError,
)
RC = PARAM_VALIDATION_ERROR_RC
class SilenceParamValidationMsgErrorHandler(ParamValidationErrorsHandler):
def _do_handle_exception(self, exception, stdout, stderr):
return self.RC
class ClientErrorHandler(FilteredExceptionHandler):
EXCEPTIONS_TO_HANDLE = ClientError
RC = CLIENT_ERROR_RC
class ConfigurationErrorHandler(FilteredExceptionHandler):
EXCEPTIONS_TO_HANDLE = ConfigurationError
RC = CONFIGURATION_ERROR_RC
class NoRegionErrorHandler(FilteredExceptionHandler):
EXCEPTIONS_TO_HANDLE = NoRegionError
RC = CONFIGURATION_ERROR_RC
MESSAGE = (
'%s You can also configure your region by running "aws configure".'
)
class NoCredentialsErrorHandler(FilteredExceptionHandler):
EXCEPTIONS_TO_HANDLE = NoCredentialsError
RC = CONFIGURATION_ERROR_RC
MESSAGE = '%s. You can configure credentials by running "aws login".'
class PagerErrorHandler(FilteredExceptionHandler):
EXCEPTIONS_TO_HANDLE = PagerInitializationException
RC = CONFIGURATION_ERROR_RC
MESSAGE = (
'Unable to redirect output to pager. Received the '
'following error when opening pager:\n%s\n\n'
'Learn more about configuring the output pager by running '
'"aws help config-vars".'
)
class UnknownArgumentErrorHandler(FilteredExceptionHandler):
EXCEPTIONS_TO_HANDLE = UnknownArgumentError
RC = PARAM_VALIDATION_ERROR_RC
def _do_handle_exception(self, exception, stdout, stderr):
stderr.write("\n")
stderr.write(f'usage: {USAGE}\n{exception}\n')
stderr.write("\n")
return self.RC
class InterruptExceptionHandler(FilteredExceptionHandler):
EXCEPTIONS_TO_HANDLE = KeyboardInterrupt
RC = 128 + signal.SIGINT
def _do_handle_exception(self, exception, stdout, stderr):
stdout.write("\n")
return self.RC
class PrompterInterruptExceptionHandler(InterruptExceptionHandler):
EXCEPTIONS_TO_HANDLE = PrompterKeyboardInterrupt
def _do_handle_exception(self, exception, stdout, stderr):
stderr.write(f'{exception}')
stderr.write("\n")
return self.RC
class GeneralExceptionHandler(FilteredExceptionHandler):
EXCEPTIONS_TO_HANDLE = Exception
RC = GENERAL_ERROR_RC
class ChainedExceptionHandler(BaseExceptionHandler):
def __init__(self, exception_handlers):
self._exception_handlers = exception_handlers
def inject_handler(self, position, handler):
self._exception_handlers.insert(position, handler)
def handle_exception(self, exception, stdout, stderr):
for handler in self._exception_handlers:
return_value = handler.handle_exception(exception, stdout, stderr)
if return_value is not None:
return return_value