def __init__(self, thread_count, expected_total, bar=None): self._queue = queue.Queue() self._thread_count = thread_count self._stats = WorkerStats(expected_total) self._tasks = 0 self.__started = False self.__start_lock = Lock() self._logger = get_main_cli_logger() self._bar = bar
import py42.settings.debug as debug import requests from click import prompt from click import secho from py42.exceptions import Py42UnauthorizedError from requests.exceptions import ConnectionError from requests.exceptions import SSLError from code42cli.click_ext.types import TOTP from code42cli.errors import Code42CLIError from code42cli.errors import LoggedCLIError from code42cli.logger import get_main_cli_logger py42.settings.items_per_page = 500 logger = get_main_cli_logger() def create_sdk(profile, is_debug_mode, password=None, totp=None): if is_debug_mode: py42.settings.debug.level = debug.DEBUG if profile.ignore_ssl_errors == "True": secho( f"Warning: Profile '{profile.name}' has SSL verification disabled. " "Adding certificate verification is strongly advised.", fg="red", err=True, ) requests.packages.urllib3.disable_warnings( requests.packages.urllib3.exceptions.InsecureRequestWarning )
class ExceptionHandlingGroup(click.Group): """A `click.Group` subclass to add custom exception handling.""" logger = get_main_cli_logger() _original_args = None def make_context(self, info_name, args, parent=None, **extra): # grab the original command line arguments for logging purposes self._original_args = " ".join(args) return super().make_context(info_name, args, parent=parent, **extra) def invoke(self, ctx): try: return super().invoke(ctx) except click.UsageError as err: self._suggest_cmd(err) except LoggedCLIError: raise except Code42CLIError as err: self.logger.log_error(str(err)) raise except click.ClickException: raise except click.exceptions.Exit: raise except ( UserDoesNotExistError, Py42UserAlreadyAddedError, Py42UserNotOnListError, Py42InvalidRuleOperationError, Py42LegalHoldNotFoundOrPermissionDeniedError, ) as err: self.logger.log_error(err) raise Code42CLIError(str(err)) except Py42ForbiddenError as err: self.logger.log_verbose_error(self._original_args, err.response.request) raise LoggedCLIError( "You do not have the necessary permissions to perform this task. " "Try using or creating a different profile.") except Py42HTTPError as err: self.logger.log_verbose_error(self._original_args, err.response.request) raise LoggedCLIError("Problem making request to server.") except OSError: raise except Exception: self.logger.log_verbose_error() raise LoggedCLIError("Unknown problem occurred.") @staticmethod def _suggest_cmd(usage_err): """Handles fuzzy suggestion of commands that are close to the bad command entered.""" if usage_err.message is not None: match = re.match("No such command '(.*)'.", usage_err.message) if match: bad_arg = match.groups()[0] available_commands = list( usage_err.ctx.command.commands.keys()) suggested_commands = difflib.get_close_matches( bad_arg, available_commands, cutoff=_DIFFLIB_CUT_OFF) if not suggested_commands: raise usage_err usage_err.message = "No such command '{}'. Did you mean {}?".format( bad_arg, " or ".join(suggested_commands)) raise usage_err
class ExceptionHandlingGroup(click.Group): """A `click.Group` subclass to add custom exception handling.""" logger = get_main_cli_logger() _original_args = None def make_context(self, info_name, args, parent=None, **extra): # grab the original command line arguments for logging purposes self._original_args = " ".join(args) return super().make_context(info_name, args, parent=parent, **extra) def invoke(self, ctx): try: return super().invoke(ctx) except click.UsageError as err: self._suggest_cmd(err) except LoggedCLIError: raise except Code42CLIError as err: self.logger.log_error(str(err)) raise except click.ClickException: raise except click.exceptions.Exit: raise except ( UserDoesNotExistError, Py42UserAlreadyAddedError, Py42UserNotOnListError, Py42InvalidRuleOperationError, Py42LegalHoldNotFoundOrPermissionDeniedError, SyslogServerNetworkConnectionError, Py42CaseNameExistsError, Py42DescriptionLimitExceededError, Py42CaseAlreadyHasEventError, Py42UpdateClosedCaseError, Py42UsernameMustBeEmailError, Py42InvalidEmailError, Py42InvalidPasswordError, Py42InvalidUsernameError, Py42ActiveLegalHoldError, Py42OrgNotFoundError, Py42TrustedActivityConflictError, Py42TrustedActivityInvalidCharacterError, Py42TrustedActivityIdNotFound, Py42CloudAliasLimitExceededError, Py42CloudAliasCharacterLimitExceededError, ) as err: msg = err.args[0] self.logger.log_error(msg) raise Code42CLIError(msg) except Py42ForbiddenError as err: self.logger.log_verbose_error(self._original_args, err.response.request) raise LoggedCLIError( "You do not have the necessary permissions to perform this task. " "Try using or creating a different profile.") except Py42HTTPError as err: self.logger.log_verbose_error(self._original_args, err.response.request) raise LoggedCLIError("Problem making request to server.") except UnicodeEncodeError: if platform.system() == "Windows": cmd = 'if using powershell: $ENV:PYTHONIOENCODING="utf-16"\nif using cmd.exe: SET PYTHONIOENCODING="utf-16"' else: cmd = 'export PYTHONIOENCODING="utf-8"' raise Code42CLIError( f"Failed to handle unicode character using environment's detected encoding, try running the following:\n\n{cmd}\n\nand then re-run your `code42` command." ) except OSError: raise except Exception: self.logger.log_verbose_error() raise LoggedCLIError("Unknown problem occurred.") @staticmethod def _suggest_cmd(usage_err): """Handles fuzzy suggestion of commands that are close to the bad command entered.""" if usage_err.message is not None: match = re.match("No such command '(.*)'.", usage_err.message) if match: bad_arg = match.groups()[0] available_commands = list( usage_err.ctx.command.commands.keys()) suggested_commands = difflib.get_close_matches( bad_arg, available_commands, cutoff=_DIFFLIB_CUT_OFF) if not suggested_commands: raise usage_err usage_err.message = ( f"No such command '{bad_arg}'. " f"Did you mean {' or '.join(suggested_commands)}?") raise usage_err