Mercurial > repos > guerler > springsuite
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 |