Mini Shell
# -*- coding: utf-8 -*-
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2021 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT
"""
This module contains custom exception classes
"""
import json
import logging
import os
import sys
from typing import Optional
from xray import gettext as _
logger = logging.getLogger('exc_logger')
class XRayError(Exception):
"""
X-Ray internal exception class.
Adds an 'error' status and stores information about occurred exception.
Provides JSON encoded info about occurred exception.
"""
def __init__(self, message: str, *, flag: str = 'error',
extra: dict = None, errno: int = None,
context: Optional[dict] = None) -> None:
super().__init__(message)
self.status = 'error'
self.reason = message
self.extra_data = extra
self.type_flag = flag
self.errno = errno
self.context = context
def __str__(self) -> str:
if self.type_flag == 'warning':
msg = {
'result': 'success',
'warning': self.reason
}
else:
msg = {
'result': self.reason
}
if self.context is not None:
msg['context'] = self.context
return json.dumps(msg)
class XRayManagerError(XRayError):
"""
X-Ray Manager exception class.
"""
class XRayManagerExit(XRayManagerError):
"""
Raised when we want to exit the X-Ray Manager
with given exitcode and message. This
error and it's subclasses are not sent to sentry.
"""
def __init__(self, message, exitcode=1, **kwargs):
self.exitcode = exitcode
super().__init__(message=message, **kwargs)
class XRayManagerExitPHPUnsupported(XRayManagerExit):
"""
Raised when given php version is not supported by x-ray tool.
"""
def __init__(self, url: str, php_version: str):
self.url = url
self.php_version = php_version
super().__init__(
message=_('%(url)s is served by %(real_php_version)s, '
'which is unsupported by X-Ray'),
context=dict(url=url, real_php_version=php_version))
class TaskNotFoundError(XRayManagerExit):
"""
X-Ray API reports about missing task
"""
def __init__(self, task_id: str):
self.task_id = task_id
super().__init__(
message=_("Task with id %(task_id)s not found in database"),
context=dict(
task_id=task_id
))
class XRayAPIError(XRayError):
"""
X-Ray API exception special class.
"""
class XRayAPIEmptyResponse(XRayAPIError):
"""
Happens when API returns empty response
"""
def __init__(self, result: dict, message: Optional[str] = None, **kwargs):
self.result = result
super().__init__(
message=message or _('Received empty result: %s') % str(result),
extra=dict(result=result),
**kwargs
)
class XRayAgentError(XRayError):
"""
X-Ray Agent exception class
"""
class XRayMailerError(XRayError):
"""
X-Ray Mailer exception class
"""
class XRayMissingDomain(XRayManagerExit):
"""
Missing domain exception class
"""
def __init__(self, domain_name: str, message=_("Domain '%(domain_name)s' does not exist on this server")):
self.domain_name = domain_name
super().__init__(
message=message,
exitcode=1,
context=dict(domain_name=domain_name)
)
class SmartAdvicePluginError(Exception):
"""
Error when something bad happened with Smart Advice plugin
"""
Zerion Mini Shell 1.0