1 #----------------------------------------------------------------------
2 # Copyright (c) 2008 Board of Trustees, Princeton University
4 # Permission is hereby granted, free of charge, to any person obtaining
5 # a copy of this software and/or hardware specification (the "Work") to
6 # deal in the Work without restriction, including without limitation the
7 # rights to use, copy, modify, merge, publish, distribute, sublicense,
8 # and/or sell copies of the Work, and to permit persons to whom the Work
9 # is furnished to do so, subject to the following conditions:
11 # The above copyright notice and this permission notice shall be
12 # included in all copies or substantial portions of the Work.
14 # THE WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18 # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
19 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 # OUT OF OR IN CONNECTION WITH THE WORK OR THE USE OR OTHER DEALINGS
22 #----------------------------------------------------------------------
27 from sfa.util.genicode import GENICODE
28 from sfa.util.py23 import xmlrpc_client
30 class SfaFault(xmlrpc_client.Fault):
31 def __init__(self, faultCode, faultString, extra = None):
33 faultString += ": " + str(extra)
34 xmlrpc_client.Fault.__init__(self, faultCode, faultString)
36 class Forbidden(SfaFault):
37 def __init__(self, extra = None):
38 faultString = "FORBIDDEN"
39 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
41 class BadArgs(SfaFault):
42 def __init__(self, extra = None):
43 faultString = "BADARGS"
44 SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)
47 class CredentialMismatch(SfaFault):
48 def __init__(self, extra = None):
49 faultString = "Credential mismatch"
50 SfaFault.__init__(self, GENICODE.CREDENTIAL_MISMATCH, faultString, extra)
52 class SfaInvalidAPIMethod(SfaFault):
53 def __init__(self, method, interface = None, extra = None):
54 faultString = "Invalid method " + method
56 faultString += " for interface " + interface
57 SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)
59 class SfaInvalidArgumentCount(SfaFault):
60 def __init__(self, got, min, max = min, extra = None):
62 expected = "%d-%d" % (min, max)
65 faultString = "Expected %s arguments, got %d" % \
67 SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)
69 class SfaInvalidArgument(SfaFault):
70 def __init__(self, extra = None, name = None):
72 faultString = "Invalid %s value" % name
74 faultString = "Invalid argument"
75 SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)
77 class SfaAuthenticationFailure(SfaFault):
78 def __init__(self, extra = None):
79 faultString = "Failed to authenticate call"
80 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
82 class SfaDBError(SfaFault):
83 def __init__(self, extra = None):
84 faultString = "Database error"
85 SfaFault.__init__(self, GENICODE.DBERROR, faultString, extra)
87 class SfaPermissionDenied(SfaFault):
88 def __init__(self, extra = None):
89 faultString = "Permission denied"
90 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
92 class SfaNotImplemented(SfaFault):
93 def __init__(self, interface=None, extra = None):
94 faultString = "Not implemented"
96 faultString += " at interface " + interface
97 SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)
99 class SfaAPIError(SfaFault):
100 def __init__(self, extra = None):
101 faultString = "Internal SFA API error"
102 SfaFault.__init__(self, GENICODE.SERVERERROR, faultString, extra)
104 class MalformedHrnException(SfaFault):
105 def __init__(self, value, extra = None):
107 faultString = "Malformed HRN: %(value)s" % locals()
108 SfaFault.__init__(self, GENICODE.ERROR, extra)
110 return repr(self.value)
112 class TreeException(SfaFault):
113 def __init__(self, value, extra = None):
115 faultString = "Tree Exception: %(value)s, " % locals()
116 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
118 return repr(self.value)
120 class SearchFailed(SfaFault):
121 def __init__(self, value, extra = None):
123 faultString = "%s does not exist here " % self.value
124 SfaFault.__init__(self, GENICODE.SEARCHFAILED, faultString, extra)
126 return repr(self.value)
128 class NonExistingRecord(SfaFault):
129 def __init__(self, value, extra = None):
131 faultString = "Non exsiting record %(value)s, " % locals()
132 SfaFault.__init__(self, GENICODE.SEARCHFAILED, faultString, extra)
134 return repr(self.value)
136 class ExistingRecord(SfaFault):
137 def __init__(self, value, extra = None):
139 faultString = "Existing record: %(value)s, " % locals()
140 SfaFault.__init__(self, GENICODE.REFUSED, faultString, extra)
142 return repr(self.value)
145 class InvalidRPCParams(SfaFault):
146 def __init__(self, value, extra = None):
148 faultString = "Invalid RPC Params: %(value)s, " % locals()
149 SfaFault.__init__(self, GENICODE.RPCERROR, faultString, extra)
151 return repr(self.value)
153 # SMBAKER exceptions follow
155 class ConnectionKeyGIDMismatch(SfaFault):
156 def __init__(self, value, extra = None):
158 faultString = "Connection Key GID mismatch: %(value)s" % locals()
159 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
161 return repr(self.value)
163 class MissingCallerGID(SfaFault):
164 def __init__(self, value, extra = None):
166 faultString = "Missing Caller GID: %(value)s" % locals()
167 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
169 return repr(self.value)
171 class RecordNotFound(SfaFault):
172 def __init__(self, value, extra = None):
174 faultString = "Record not found: %(value)s" % locals()
175 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
177 return repr(self.value)
179 class UnknownSfaType(SfaFault):
180 def __init__(self, value, extra = None):
182 faultString = "Unknown SFA Type: %(value)s" % locals()
183 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
185 return repr(self.value)
187 class MissingAuthority(SfaFault):
188 def __init__(self, value, extra = None):
190 faultString = "Missing authority: %(value)s" % locals()
191 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
193 return repr(self.value)
195 class PlanetLabRecordDoesNotExist(SfaFault):
196 def __init__(self, value, extra = None):
198 faultString = "PlanetLab record does not exist : %(value)s" % locals()
199 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
201 return repr(self.value)
203 class PermissionError(SfaFault):
204 def __init__(self, value, extra = None):
206 faultString = "Permission error: %(value)s" % locals()
207 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
209 return repr(self.value)
211 class InsufficientRights(SfaFault):
212 def __init__(self, value, extra = None):
214 faultString = "Insufficient rights: %(value)s" % locals()
215 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
217 return repr(self.value)
219 class MissingDelegateBit(SfaFault):
220 def __init__(self, value, extra = None):
222 faultString = "Missing delegate bit: %(value)s" % locals()
223 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
225 return repr(self.value)
227 class ChildRightsNotSubsetOfParent(SfaFault):
228 def __init__(self, value, extra = None):
230 faultString = "Child rights not subset of parent: %(value)s" % locals()
231 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
233 return repr(self.value)
235 class CertMissingParent(SfaFault):
236 def __init__(self, value, extra = None):
238 faultString = "Cert missing parent: %(value)s" % locals()
239 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
241 return repr(self.value)
243 class CertNotSignedByParent(SfaFault):
244 def __init__(self, value, extra = None):
246 faultString = "Cert not signed by parent: %(value)s" % locals()
247 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
249 return repr(self.value)
251 class GidParentHrn(SfaFault):
252 def __init__(self, value, extra = None):
254 faultString = "Cert URN is not an extension of its parent: %(value)s" % locals()
255 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
257 return repr(self.value)
259 class GidInvalidParentHrn(SfaFault):
260 def __init__(self, value, extra = None):
262 faultString = "GID invalid parent hrn: %(value)s" % locals()
263 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
265 return repr(self.value)
267 class SliverDoesNotExist(SfaFault):
268 def __init__(self, value, extra = None):
270 faultString = "Sliver does not exist : %(value)s" % locals()
271 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
273 return repr(self.value)
275 class BadRequestHash(xmlrpc_client.Fault):
276 def __init__(self, hash = None, extra = None):
277 faultString = "bad request hash: " + str(hash)
278 xmlrpc_client.Fault.__init__(self, GENICODE.ERROR, faultString)
280 class MissingTrustedRoots(SfaFault):
281 def __init__(self, value, extra = None):
283 faultString = "Trusted root directory does not exist: %(value)s" % locals()
284 SfaFault.__init__(self, GENICODE.SERVERERROR, faultString, extra)
286 return repr(self.value)
288 class MissingSfaInfo(SfaFault):
289 def __init__(self, value, extra = None):
291 faultString = "Missing information: %(value)s" % locals()
292 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
294 return repr(self.value)
296 class InvalidRSpec(SfaFault):
297 def __init__(self, value, extra = None):
299 faultString = "Invalid RSpec: %(value)s" % locals()
300 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
302 return repr(self.value)
304 class InvalidRSpecVersion(SfaFault):
305 def __init__(self, value, extra = None):
307 faultString = "Invalid RSpec version: %(value)s" % locals()
308 SfaFault.__init__(self, GENICODE.BADVERSION, faultString, extra)
310 return repr(self.value)
312 class UnsupportedRSpecVersion(SfaFault):
313 def __init__(self, value, extra = None):
315 faultString = "Unsupported RSpec version: %(value)s" % locals()
316 SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)
318 return repr(self.value)
320 class InvalidRSpecElement(SfaFault):
321 def __init__(self, value, extra = None):
323 faultString = "Invalid RSpec Element: %(value)s" % locals()
324 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
326 return repr(self.value)
328 class InvalidXML(SfaFault):
329 def __init__(self, value, extra = None):
331 faultString = "Invalid XML Document: %(value)s" % locals()
332 SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)
334 return repr(self.value)
336 class AccountNotEnabled(SfaFault):
337 def __init__(self, extra = None):
338 faultString = "Account Disabled"
339 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
341 return repr(self.value)
343 class CredentialNotVerifiable(SfaFault):
344 def __init__(self, value=None, extra = None):
346 faultString = "Unable to verify credential" %locals()
348 faultString += ": %s" % value
350 SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)
352 return repr(self.value)
354 class CertExpired(SfaFault):
355 def __init__(self, value, extra=None):
357 faultString = "%s cert is expired" % value
358 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
360 class SfatablesRejected(SfaFault):
361 def __init__(self, value, extra=None):
363 faultString = "%s rejected by sfatables"
364 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
366 class UnsupportedOperation(SfaFault):
367 def __init__(self, value, extra=None):
369 faultString = "Unsupported operation: %s" % value
370 SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)