def test_setup_logger(patch_logging_levels, patch_blacklist_filter, patch_logging, patch_kms_key_redacting_formatter): patch_logging_levels.return_value = sentinel.local_level, sentinel.root_level mock_local_logger = MagicMock() mock_root_logger = MagicMock() patch_logging.getLogger.side_effect = (mock_local_logger, mock_root_logger) mock_local_handler = MagicMock() mock_root_handler = MagicMock() patch_logging.StreamHandler.side_effect = (mock_local_handler, mock_root_handler) logging_utils.setup_logger(sentinel.verbosity, sentinel.quiet) patch_logging_levels.assert_called_once_with(sentinel.verbosity, sentinel.quiet) patch_kms_key_redacting_formatter.assert_called_once_with( logging_utils.FORMAT_STRING) patch_logging.StreamHandler.assert_has_calls(calls=(call(), call()), any_order=True) mock_local_handler.setFormatter.assert_called_once_with( patch_kms_key_redacting_formatter.return_value) patch_logging.getLogger.assert_has_calls(calls=(call( logging_utils.LOGGER_NAME), call()), any_order=False) patch_blacklist_filter.assert_called_once_with(logging_utils.LOGGER_NAME) mock_root_handler.setFormatter.assert_called_once_with( patch_kms_key_redacting_formatter.return_value) mock_root_handler.addFilter.assert_called_once_with( patch_blacklist_filter.return_value) mock_local_logger.setLevel.assert_called_once_with(sentinel.local_level) mock_local_logger.addHandler.assert_called_once_with(mock_local_handler) mock_root_logger.setLevel.assert_called_once_with(sentinel.root_level) mock_root_logger.addHandler.assert_called_once_with(mock_root_handler)
def cli(raw_args=None): # type: (List[str]) -> Union[str, None] """CLI entry point. Processes arguments, sets up the key provider, and processes requested action. :returns: Execution return value intended for ``sys.exit()`` """ try: args = parse_args(raw_args) setup_logger(args.verbosity, args.quiet) # pylint: disable=no-member _LOGGER.debug("Encryption mode: %s", args.action) # pylint: disable=no-member _LOGGER.debug("Encryption source: %s", args.input) # pylint: disable=no-member _LOGGER.debug("Encryption destination: %s", args.output) # pylint: disable=no-member _LOGGER.debug("Wrapping key provider configuration: %s", args.wrapping_keys) # pylint: disable=no-member _LOGGER.debug("Suffix requested: %s", args.suffix) # pylint: disable=no-member _warn_deprecated_python() crypto_materials_manager = build_crypto_materials_manager_from_args( key_providers_config=args.wrapping_keys, caching_config=args.caching ) stream_args = stream_kwargs_from_args(args, crypto_materials_manager) process_cli_request(stream_args, args) return None except AWSEncryptionSDKCLIError as error: return error.args[0] except Exception as error: # pylint: disable=broad-except message = os.linesep.join( [ "Encountered unexpected error: increase verbosity to see details.", "{cls}({args})".format( cls=error.__class__.__name__, args=", ".join(['"{}"'.format(arg) for arg in error.args]) ), ] ) _LOGGER.debug(message) # copy.deepcopy can't handle raw exc_info objects, so format it first formatted_traceback = traceback.format_exc() _LOGGER.debug(formatted_traceback) return message