diff planemo/lib/python3.7/site-packages/galaxy/exceptions/__init__.py @ 0:d30785e31577 draft

"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author guerler
date Fri, 31 Jul 2020 00:18:57 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/planemo/lib/python3.7/site-packages/galaxy/exceptions/__init__.py	Fri Jul 31 00:18:57 2020 -0400
@@ -0,0 +1,246 @@
+"""This module defines Galaxy's custom exceptions.
+
+A Galaxy exception is an exception that extends :class:`MessageException` which
+defines an HTTP status code (represented by the `status_code` attribute) and a
+default error message.
+
+New exceptions should be defined by adding an entry to `error_codes.json` in this
+directory to define a default error message and a Galaxy "error code". A concrete
+Python class should be added in this file defining an HTTP status code (as
+`status_code`) and error code (`error_code`) object loaded dynamically from
+`error_codes.json`.
+
+Reflecting Galaxy's origins as a web application, these exceptions tend to be a
+bit web-oriented. However this module is a dependency of modules and tools that
+have nothing to do with the web - keep this in mind when defining exception names
+and messages.
+"""
+
+from ..exceptions import error_codes
+
+
+class MessageException(Exception):
+    """Most generic Galaxy exception - indicates merely that some exceptional condition happened."""
+    # status code to be set when used with API.
+    status_code = 400
+    # Error code information embedded into API json responses.
+    err_code = error_codes.UNKNOWN
+
+    def __init__(self, err_msg=None, type="info", **extra_error_info):
+        self.err_msg = err_msg or self.err_code.default_error_message
+        self.type = type
+        self.extra_error_info = extra_error_info
+
+    def __str__(self):
+        return self.err_msg
+
+
+class ItemDeletionException(MessageException):
+    pass
+
+
+class ObjectInvalid(Exception):
+    """ Accessed object store ID is invalid """
+    pass
+
+# Please keep the exceptions ordered by status code
+
+
+class ActionInputError(MessageException):
+    status_code = 400
+    err_code = error_codes.USER_REQUEST_INVALID_PARAMETER
+
+    def __init__(self, err_msg, type="error"):
+        super(ActionInputError, self).__init__(err_msg, type)
+
+
+class DuplicatedSlugException(MessageException):
+    status_code = 400
+    err_code = error_codes.USER_SLUG_DUPLICATE
+
+
+class DuplicatedIdentifierException(MessageException):
+    status_code = 400
+    err_code = error_codes.USER_IDENTIFIER_DUPLICATE
+
+
+class ObjectAttributeInvalidException(MessageException):
+    status_code = 400
+    err_code = error_codes.USER_OBJECT_ATTRIBUTE_INVALID
+
+
+class ObjectAttributeMissingException(MessageException):
+    status_code = 400
+    err_code = error_codes.USER_OBJECT_ATTRIBUTE_MISSING
+
+
+class MalformedId(MessageException):
+    status_code = 400
+    err_code = error_codes.MALFORMED_ID
+
+
+class MalformedContents(MessageException):
+    status_code = 400
+    err_code = error_codes.MALFORMED_CONTENTS
+
+
+class UnknownContentsType(MessageException):
+    status_code = 400
+    err_code = error_codes.UNKNOWN_CONTENTS_TYPE
+
+
+class RequestParameterMissingException(MessageException):
+    status_code = 400
+    err_code = error_codes.USER_REQUEST_MISSING_PARAMETER
+
+
+class ToolMetaParameterException(MessageException):
+    status_code = 400
+    err_code = error_codes.USER_TOOL_META_PARAMETER_PROBLEM
+
+
+class ToolMissingException(MessageException):
+    status_code = 400
+    err_code = error_codes.USER_TOOL_MISSING_PROBLEM
+
+    def __init__(self, err_msg=None, type="info", tool_id=None, **extra_error_info):
+        super(ToolMissingException, self).__init__(err_msg, type, **extra_error_info)
+        self.tool_id = tool_id
+
+
+class RequestParameterInvalidException(MessageException):
+    status_code = 400
+    err_code = error_codes.USER_REQUEST_INVALID_PARAMETER
+
+
+class AuthenticationFailed(MessageException):
+    status_code = 401
+    err_code = error_codes.USER_AUTHENTICATION_FAILED
+
+
+class AuthenticationRequired(MessageException):
+    status_code = 403
+    # TODO: as 401 and send WWW-Authenticate: ???
+    err_code = error_codes.USER_NO_API_KEY
+
+
+class ItemAccessibilityException(MessageException):
+    status_code = 403
+    err_code = error_codes.USER_CANNOT_ACCESS_ITEM
+
+
+class ItemOwnershipException(MessageException):
+    status_code = 403
+    err_code = error_codes.USER_DOES_NOT_OWN_ITEM
+
+
+class ConfigDoesNotAllowException(MessageException):
+    status_code = 403
+    err_code = error_codes.CONFIG_DOES_NOT_ALLOW
+
+
+class InsufficientPermissionsException(MessageException):
+    status_code = 403
+    err_code = error_codes.INSUFFICIENT_PERMISSIONS
+
+
+class AdminRequiredException(MessageException):
+    status_code = 403
+    err_code = error_codes.ADMIN_REQUIRED
+
+
+class UserActivationRequiredException(MessageException):
+    status_code = 403
+    err_code = error_codes.USER_ACTIVATION_REQUIRED
+
+
+class ObjectNotFound(MessageException):
+    """ Accessed object was not found """
+    status_code = 404
+    err_code = error_codes.USER_OBJECT_NOT_FOUND
+
+
+class DeprecatedMethod(MessageException):
+    """
+    Method (or a particular form/arg signature) has been removed and won't be available later
+    """
+    status_code = 404
+    # TODO:?? 410 Gone?
+    err_code = error_codes.DEPRECATED_API_CALL
+
+
+class Conflict(MessageException):
+    status_code = 409
+    err_code = error_codes.CONFLICT
+
+
+class ConfigurationError(Exception):
+    status_code = 500
+    err_code = error_codes.CONFIG_ERROR
+
+
+class InconsistentDatabase(MessageException):
+    status_code = 500
+    err_code = error_codes.INCONSISTENT_DATABASE
+
+
+class InternalServerError(MessageException):
+    status_code = 500
+    err_code = error_codes.INTERNAL_SERVER_ERROR
+
+
+class ToolExecutionError(MessageException):
+    status_code = 500
+    err_code = error_codes.TOOL_EXECUTION_ERROR
+
+    def __init__(self, err_msg, type="error", job=None):
+        super(ToolExecutionError, self).__init__(err_msg, type)
+        self.job = job
+
+
+class NotImplemented(MessageException):
+    status_code = 501
+    err_code = error_codes.NOT_IMPLEMENTED
+
+
+class InvalidFileFormatError(MessageException):
+    status_code = 500
+    err_code = error_codes.INVALID_FILE_FORMAT
+
+
+# non-web exceptions
+
+class ContainerCLIError(Exception):
+    def __init__(self, msg=None, stdout=None, stderr=None, returncode=None,
+                 command=None, subprocess_command=None, **kwargs):
+        super(ContainerCLIError, self).__init__(msg, **kwargs)
+        self.stdout = stdout
+        self.stderr = stderr
+        self.returncode = returncode
+        self.command = command
+        self.subprocess_command = subprocess_command
+
+
+class ContainerNotFound(Exception):
+    def __init__(self, msg=None, container_id=None, **kwargs):
+        super(ContainerNotFound, self).__init__(msg, **kwargs)
+        self.container_id = container_id
+
+
+class ContainerImageNotFound(Exception):
+    def __init__(self, msg=None, image=None, **kwargs):
+        super(ContainerImageNotFound, self).__init__(msg, **kwargs)
+        self.image = image
+
+
+class ContainerRunError(Exception):
+    def __init__(self, msg=None, image=None, command=None, **kwargs):
+        super(ContainerRunError, self).__init__(msg, **kwargs)
+        self.image = image
+        self.command = command
+
+
+class HandlerAssignmentError(Exception):
+    def __init__(self, msg=None, obj=None, **kwargs):
+        super(HandlerAssignmentError, self).__init__(msg, **kwargs)
+        self.obj = obj