예제 #1
0
 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
예제 #2
0
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
        )
예제 #3
0
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
예제 #4
0
파일: groups.py 프로젝트: code42/code42cli
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