comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:d30785e31577
1 """This module defines Galaxy's custom exceptions.
2
3 A Galaxy exception is an exception that extends :class:`MessageException` which
4 defines an HTTP status code (represented by the `status_code` attribute) and a
5 default error message.
6
7 New exceptions should be defined by adding an entry to `error_codes.json` in this
8 directory to define a default error message and a Galaxy "error code". A concrete
9 Python class should be added in this file defining an HTTP status code (as
10 `status_code`) and error code (`error_code`) object loaded dynamically from
11 `error_codes.json`.
12
13 Reflecting Galaxy's origins as a web application, these exceptions tend to be a
14 bit web-oriented. However this module is a dependency of modules and tools that
15 have nothing to do with the web - keep this in mind when defining exception names
16 and messages.
17 """
18
19 from ..exceptions import error_codes
20
21
22 class MessageException(Exception):
23 """Most generic Galaxy exception - indicates merely that some exceptional condition happened."""
24 # status code to be set when used with API.
25 status_code = 400
26 # Error code information embedded into API json responses.
27 err_code = error_codes.UNKNOWN
28
29 def __init__(self, err_msg=None, type="info", **extra_error_info):
30 self.err_msg = err_msg or self.err_code.default_error_message
31 self.type = type
32 self.extra_error_info = extra_error_info
33
34 def __str__(self):
35 return self.err_msg
36
37
38 class ItemDeletionException(MessageException):
39 pass
40
41
42 class ObjectInvalid(Exception):
43 """ Accessed object store ID is invalid """
44 pass
45
46 # Please keep the exceptions ordered by status code
47
48
49 class ActionInputError(MessageException):
50 status_code = 400
51 err_code = error_codes.USER_REQUEST_INVALID_PARAMETER
52
53 def __init__(self, err_msg, type="error"):
54 super(ActionInputError, self).__init__(err_msg, type)
55
56
57 class DuplicatedSlugException(MessageException):
58 status_code = 400
59 err_code = error_codes.USER_SLUG_DUPLICATE
60
61
62 class DuplicatedIdentifierException(MessageException):
63 status_code = 400
64 err_code = error_codes.USER_IDENTIFIER_DUPLICATE
65
66
67 class ObjectAttributeInvalidException(MessageException):
68 status_code = 400
69 err_code = error_codes.USER_OBJECT_ATTRIBUTE_INVALID
70
71
72 class ObjectAttributeMissingException(MessageException):
73 status_code = 400
74 err_code = error_codes.USER_OBJECT_ATTRIBUTE_MISSING
75
76
77 class MalformedId(MessageException):
78 status_code = 400
79 err_code = error_codes.MALFORMED_ID
80
81
82 class MalformedContents(MessageException):
83 status_code = 400
84 err_code = error_codes.MALFORMED_CONTENTS
85
86
87 class UnknownContentsType(MessageException):
88 status_code = 400
89 err_code = error_codes.UNKNOWN_CONTENTS_TYPE
90
91
92 class RequestParameterMissingException(MessageException):
93 status_code = 400
94 err_code = error_codes.USER_REQUEST_MISSING_PARAMETER
95
96
97 class ToolMetaParameterException(MessageException):
98 status_code = 400
99 err_code = error_codes.USER_TOOL_META_PARAMETER_PROBLEM
100
101
102 class ToolMissingException(MessageException):
103 status_code = 400
104 err_code = error_codes.USER_TOOL_MISSING_PROBLEM
105
106 def __init__(self, err_msg=None, type="info", tool_id=None, **extra_error_info):
107 super(ToolMissingException, self).__init__(err_msg, type, **extra_error_info)
108 self.tool_id = tool_id
109
110
111 class RequestParameterInvalidException(MessageException):
112 status_code = 400
113 err_code = error_codes.USER_REQUEST_INVALID_PARAMETER
114
115
116 class AuthenticationFailed(MessageException):
117 status_code = 401
118 err_code = error_codes.USER_AUTHENTICATION_FAILED
119
120
121 class AuthenticationRequired(MessageException):
122 status_code = 403
123 # TODO: as 401 and send WWW-Authenticate: ???
124 err_code = error_codes.USER_NO_API_KEY
125
126
127 class ItemAccessibilityException(MessageException):
128 status_code = 403
129 err_code = error_codes.USER_CANNOT_ACCESS_ITEM
130
131
132 class ItemOwnershipException(MessageException):
133 status_code = 403
134 err_code = error_codes.USER_DOES_NOT_OWN_ITEM
135
136
137 class ConfigDoesNotAllowException(MessageException):
138 status_code = 403
139 err_code = error_codes.CONFIG_DOES_NOT_ALLOW
140
141
142 class InsufficientPermissionsException(MessageException):
143 status_code = 403
144 err_code = error_codes.INSUFFICIENT_PERMISSIONS
145
146
147 class AdminRequiredException(MessageException):
148 status_code = 403
149 err_code = error_codes.ADMIN_REQUIRED
150
151
152 class UserActivationRequiredException(MessageException):
153 status_code = 403
154 err_code = error_codes.USER_ACTIVATION_REQUIRED
155
156
157 class ObjectNotFound(MessageException):
158 """ Accessed object was not found """
159 status_code = 404
160 err_code = error_codes.USER_OBJECT_NOT_FOUND
161
162
163 class DeprecatedMethod(MessageException):
164 """
165 Method (or a particular form/arg signature) has been removed and won't be available later
166 """
167 status_code = 404
168 # TODO:?? 410 Gone?
169 err_code = error_codes.DEPRECATED_API_CALL
170
171
172 class Conflict(MessageException):
173 status_code = 409
174 err_code = error_codes.CONFLICT
175
176
177 class ConfigurationError(Exception):
178 status_code = 500
179 err_code = error_codes.CONFIG_ERROR
180
181
182 class InconsistentDatabase(MessageException):
183 status_code = 500
184 err_code = error_codes.INCONSISTENT_DATABASE
185
186
187 class InternalServerError(MessageException):
188 status_code = 500
189 err_code = error_codes.INTERNAL_SERVER_ERROR
190
191
192 class ToolExecutionError(MessageException):
193 status_code = 500
194 err_code = error_codes.TOOL_EXECUTION_ERROR
195
196 def __init__(self, err_msg, type="error", job=None):
197 super(ToolExecutionError, self).__init__(err_msg, type)
198 self.job = job
199
200
201 class NotImplemented(MessageException):
202 status_code = 501
203 err_code = error_codes.NOT_IMPLEMENTED
204
205
206 class InvalidFileFormatError(MessageException):
207 status_code = 500
208 err_code = error_codes.INVALID_FILE_FORMAT
209
210
211 # non-web exceptions
212
213 class ContainerCLIError(Exception):
214 def __init__(self, msg=None, stdout=None, stderr=None, returncode=None,
215 command=None, subprocess_command=None, **kwargs):
216 super(ContainerCLIError, self).__init__(msg, **kwargs)
217 self.stdout = stdout
218 self.stderr = stderr
219 self.returncode = returncode
220 self.command = command
221 self.subprocess_command = subprocess_command
222
223
224 class ContainerNotFound(Exception):
225 def __init__(self, msg=None, container_id=None, **kwargs):
226 super(ContainerNotFound, self).__init__(msg, **kwargs)
227 self.container_id = container_id
228
229
230 class ContainerImageNotFound(Exception):
231 def __init__(self, msg=None, image=None, **kwargs):
232 super(ContainerImageNotFound, self).__init__(msg, **kwargs)
233 self.image = image
234
235
236 class ContainerRunError(Exception):
237 def __init__(self, msg=None, image=None, command=None, **kwargs):
238 super(ContainerRunError, self).__init__(msg, **kwargs)
239 self.image = image
240 self.command = command
241
242
243 class HandlerAssignmentError(Exception):
244 def __init__(self, msg=None, obj=None, **kwargs):
245 super(HandlerAssignmentError, self).__init__(msg, **kwargs)
246 self.obj = obj