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 #----------------------------------------------------------------------
28 from sfa.util.genicode import GENICODE
30 class SfaFault(xmlrpclib.Fault):
31 def __init__(self, faultCode, faultString, extra = None):
33 faultString += ": " + str(extra)
34 xmlrpclib.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 CredentialMismatch(SfaFault):
42 def __init__(self, extra = None):
43 faultString = "Credential mismatch"
44 SfaFault.__init__(self, GENICODE.CREDENTIAL_MISMATCH, faultString, extra)
46 class SfaInvalidAPIMethod(SfaFault):
47 def __init__(self, method, interface = None, extra = None):
48 faultString = "Invalid method " + method
50 faultString += " for interface " + interface
51 SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)
53 class SfaInvalidArgumentCount(SfaFault):
54 def __init__(self, got, min, max = min, extra = None):
56 expected = "%d-%d" % (min, max)
59 faultString = "Expected %s arguments, got %d" % \
61 SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)
63 class SfaInvalidArgument(SfaFault):
64 def __init__(self, extra = None, name = None):
66 faultString = "Invalid %s value" % name
68 faultString = "Invalid argument"
69 SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)
71 class SfaAuthenticationFailure(SfaFault):
72 def __init__(self, extra = None):
73 faultString = "Failed to authenticate call"
74 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
76 class SfaDBError(SfaFault):
77 def __init__(self, extra = None):
78 faultString = "Database error"
79 SfaFault.__init__(self, GENICODE.DBERROR, faultString, extra)
81 class SfaPermissionDenied(SfaFault):
82 def __init__(self, extra = None):
83 faultString = "Permission denied"
84 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
86 class SfaNotImplemented(SfaFault):
87 def __init__(self, interface=None, extra = None):
88 faultString = "Not implemented"
90 faultString += " at interface " + interface
91 SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)
93 class SfaAPIError(SfaFault):
94 def __init__(self, extra = None):
95 faultString = "Internal API error"
96 SfaFault.__init__(self, GENICODE.SERVERERROR, faultString, extra)
98 class MalformedHrnException(SfaFault):
99 def __init__(self, value, extra = None):
101 faultString = "Malformed HRN: %(value)s" % locals()
102 SfaFault.__init__(self, GENICODE.ERROR, extra)
104 return repr(self.value)
106 class TreeException(SfaFault):
107 def __init__(self, value, extra = None):
109 faultString = "Tree Exception: %(value)s, " % locals()
110 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
112 return repr(self.value)
114 class SearchFailed(SfaFault):
115 def __init__(self, value, extra = None):
117 faultString = "%s does not exist here " % self.value
118 SfaFault.__init__(self, GENICODE.SEARCHFAILED, faultString, extra)
120 return repr(self.value)
122 class NonExistingRecord(SfaFault):
123 def __init__(self, value, extra = None):
125 faultString = "Non exsiting record %(value)s, " % locals()
126 SfaFault.__init__(self, GENICODE.SEARCHFAILED, faultString, extra)
128 return repr(self.value)
130 class ExistingRecord(SfaFault):
131 def __init__(self, value, extra = None):
133 faultString = "Existing record: %(value)s, " % locals()
134 SfaFault.__init__(self, GENICODE.REFUSED, faultString, extra)
136 return repr(self.value)
139 class InvalidRPCParams(SfaFault):
140 def __init__(self, value, extra = None):
142 faultString = "Invalid RPC Params: %(value)s, " % locals()
143 SfaFault.__init__(self, GENICODE.RPCERROR, faultString, extra)
145 return repr(self.value)
147 # SMBAKER exceptions follow
149 class ConnectionKeyGIDMismatch(SfaFault):
150 def __init__(self, value, extra = None):
152 faultString = "Connection Key GID mismatch: %(value)s" % locals()
153 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
155 return repr(self.value)
157 class MissingCallerGID(SfaFault):
158 def __init__(self, value, extra = None):
160 faultString = "Missing Caller GID: %(value)s" % locals()
161 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
163 return repr(self.value)
165 class RecordNotFound(SfaFault):
166 def __init__(self, value, extra = None):
168 faultString = "Record not found: %(value)s" % locals()
169 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
171 return repr(self.value)
173 class UnknownSfaType(SfaFault):
174 def __init__(self, value, extra = None):
176 faultString = "Unknown SFA Type: %(value)s" % locals()
177 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
179 return repr(self.value)
181 class MissingAuthority(SfaFault):
182 def __init__(self, value, extra = None):
184 faultString = "Missing authority: %(value)s" % locals()
185 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
187 return repr(self.value)
189 class PlanetLabRecordDoesNotExist(SfaFault):
190 def __init__(self, value, extra = None):
192 faultString = "PlanetLab record does not exist : %(value)s" % locals()
193 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
195 return repr(self.value)
197 class PermissionError(SfaFault):
198 def __init__(self, value, extra = None):
200 faultString = "Permission error: %(value)s" % locals()
201 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
203 return repr(self.value)
205 class InsufficientRights(SfaFault):
206 def __init__(self, value, extra = None):
208 faultString = "Insufficient rights: %(value)s" % locals()
209 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
211 return repr(self.value)
213 class MissingDelegateBit(SfaFault):
214 def __init__(self, value, extra = None):
216 faultString = "Missing delegate bit: %(value)s" % locals()
217 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
219 return repr(self.value)
221 class ChildRightsNotSubsetOfParent(SfaFault):
222 def __init__(self, value, extra = None):
224 faultString = "Child rights not subset of parent: %(value)s" % locals()
225 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
227 return repr(self.value)
229 class CertMissingParent(SfaFault):
230 def __init__(self, value, extra = None):
232 faultString = "Cert missing parent: %(value)s" % locals()
233 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
235 return repr(self.value)
237 class CertNotSignedByParent(SfaFault):
238 def __init__(self, value, extra = None):
240 faultString = "Cert not signed by parent: %(value)s" % locals()
241 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
243 return repr(self.value)
245 class GidParentHrn(SfaFault):
246 def __init__(self, value, extra = None):
248 faultString = "Cert URN is not an extension of its parent: %(value)s" % locals()
249 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
251 return repr(self.value)
253 class GidInvalidParentHrn(SfaFault):
254 def __init__(self, value, extra = None):
256 faultString = "GID invalid parent hrn: %(value)s" % locals()
257 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
259 return repr(self.value)
261 class SliverDoesNotExist(SfaFault):
262 def __init__(self, value, extra = None):
264 faultString = "Sliver does not exist : %(value)s" % locals()
265 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
267 return repr(self.value)
269 class BadRequestHash(xmlrpclib.Fault):
270 def __init__(self, hash = None, extra = None):
271 faultString = "bad request hash: " + str(hash)
272 xmlrpclib.Fault.__init__(self, GENICODE.ERROR, faultString)
274 class MissingTrustedRoots(SfaFault):
275 def __init__(self, value, extra = None):
277 faultString = "Trusted root directory does not exist: %(value)s" % locals()
278 SfaFault.__init__(self, GENICODE.SERVERERROR, faultString, extra)
280 return repr(self.value)
282 class MissingSfaInfo(SfaFault):
283 def __init__(self, value, extra = None):
285 faultString = "Missing information: %(value)s" % locals()
286 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
288 return repr(self.value)
290 class InvalidRSpec(SfaFault):
291 def __init__(self, value, extra = None):
293 faultString = "Invalid RSpec: %(value)s" % locals()
294 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
296 return repr(self.value)
298 class InvalidRSpecVersion(SfaFault):
299 def __init__(self, value, extra = None):
301 faultString = "Invalid RSpec version: %(value)s" % locals()
302 SfaFault.__init__(self, GENICODE.BADVERSION, faultString, extra)
304 return repr(self.value)
306 class UnsupportedRSpecVersion(SfaFault):
307 def __init__(self, value, extra = None):
309 faultString = "Unsupported RSpec version: %(value)s" % locals()
310 SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)
312 return repr(self.value)
314 class InvalidRSpecElement(SfaFault):
315 def __init__(self, value, extra = None):
317 faultString = "Invalid RSpec Element: %(value)s" % locals()
318 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
320 return repr(self.value)
322 class InvalidXML(SfaFault):
323 def __init__(self, value, extra = None):
325 faultString = "Invalid XML Document: %(value)s" % locals()
326 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
328 return repr(self.value)
330 class AccountNotEnabled(SfaFault):
331 def __init__(self, extra = None):
332 faultString = "Account Disabled"
333 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
335 return repr(self.value)
337 class CredentialNotVerifiable(SfaFault):
338 def __init__(self, value, extra = None):
340 faultString = "Unable to verify credential: %(value)s, " %locals()
341 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
343 return repr(self.value)
345 class CertExpired(SfaFault):
346 def __init__(self, value, extra=None):
348 faultString = "%s cert is expired" % value
349 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
351 class SfatablesRejected(SfaFault):
352 def __init__(self, value, extra=None):
354 faultString = "%s rejected by sfatables"
355 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
357 class UnsupportedOperation(SfaFault):
358 def __init__(self, value, extra=None):
360 faultString = "Unsupported operation: %s" % value
361 SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)