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 SfaInvalidAPIMethod(SfaFault):
37 def __init__(self, method, interface = None, extra = None):
38 faultString = "Invalid method " + method
40 faultString += " for interface " + interface
41 SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)
43 class SfaInvalidArgumentCount(SfaFault):
44 def __init__(self, got, min, max = min, extra = None):
46 expected = "%d-%d" % (min, max)
49 faultString = "Expected %s arguments, got %d" % \
51 SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)
53 class SfaInvalidArgument(SfaFault):
54 def __init__(self, extra = None, name = None):
56 faultString = "Invalid %s value" % name
58 faultString = "Invalid argument"
59 SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)
61 class SfaAuthenticationFailure(SfaFault):
62 def __init__(self, extra = None):
63 faultString = "Failed to authenticate call"
64 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
66 class SfaDBError(SfaFault):
67 def __init__(self, extra = None):
68 faultString = "Database error"
69 SfaFault.__init__(self, GENICODE.DBERROR, faultString, extra)
71 class SfaPermissionDenied(SfaFault):
72 def __init__(self, extra = None):
73 faultString = "Permission denied"
74 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
76 class SfaNotImplemented(SfaFault):
77 def __init__(self, interface=None, extra = None):
78 faultString = "Not implemented"
80 faultString += " at interface " + interface
81 SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)
83 class SfaAPIError(SfaFault):
84 def __init__(self, extra = None):
85 faultString = "Internal API error"
86 SfaFault.__init__(self, GENICODE.SERVERERROR, faultString, extra)
88 class MalformedHrnException(SfaFault):
89 def __init__(self, value, extra = None):
91 faultString = "Malformed HRN: %(value)s" % locals()
92 SfaFault.__init__(self, GENICODE.ERROR, extra)
94 return repr(self.value)
96 class TreeException(SfaFault):
97 def __init__(self, value, extra = None):
99 faultString = "Tree Exception: %(value)s, " % locals()
100 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
102 return repr(self.value)
104 class NonExistingRecord(SfaFault):
105 def __init__(self, value, extra = None):
107 faultString = "Non exsiting record %(value)s, " % locals()
108 SfaFault.__init__(self, GENICODE.SEARCHFAILED, faultString, extra)
110 return repr(self.value)
112 class ExistingRecord(SfaFault):
113 def __init__(self, value, extra = None):
115 faultString = "Existing record: %(value)s, " % locals()
116 SfaFault.__init__(self, GENICODE.REFUSED, faultString, extra)
118 return repr(self.value)
121 class InvalidRPCParams(SfaFault):
122 def __init__(self, value, extra = None):
124 faultString = "Invalid RPC Params: %(value)s, " % locals()
125 SfaFault.__init__(self, GENICODE.RPCERROR, faultString, extra)
127 return repr(self.value)
129 # SMBAKER exceptions follow
131 class ConnectionKeyGIDMismatch(SfaFault):
132 def __init__(self, value, extra = None):
134 faultString = "Connection Key GID mismatch: %(value)s" % locals()
135 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
137 return repr(self.value)
139 class MissingCallerGID(SfaFault):
140 def __init__(self, value, extra = None):
142 faultString = "Missing Caller GID: %(value)s" % locals()
143 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
145 return repr(self.value)
147 class RecordNotFound(SfaFault):
148 def __init__(self, value, extra = None):
150 faultString = "Record not found: %(value)s" % locals()
151 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
153 return repr(self.value)
155 class UnknownSfaType(SfaFault):
156 def __init__(self, value, extra = None):
158 faultString = "Unknown SFA Type: %(value)s" % locals()
159 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
161 return repr(self.value)
163 class MissingAuthority(SfaFault):
164 def __init__(self, value, extra = None):
166 faultString = "Missing authority: %(value)s" % locals()
167 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
169 return repr(self.value)
171 class PlanetLabRecordDoesNotExist(SfaFault):
172 def __init__(self, value, extra = None):
174 faultString = "PlanetLab record does not exist : %(value)s" % locals()
175 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
177 return repr(self.value)
179 class PermissionError(SfaFault):
180 def __init__(self, value, extra = None):
182 faultString = "Permission error: %(value)s" % locals()
183 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
185 return repr(self.value)
187 class InsufficientRights(SfaFault):
188 def __init__(self, value, extra = None):
190 faultString = "Insufficient rights: %(value)s" % locals()
191 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
193 return repr(self.value)
195 class MissingDelegateBit(SfaFault):
196 def __init__(self, value, extra = None):
198 faultString = "Missing delegate bit: %(value)s" % locals()
199 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
201 return repr(self.value)
203 class ChildRightsNotSubsetOfParent(SfaFault):
204 def __init__(self, value, extra = None):
206 faultString = "Child rights not subset of parent: %(value)s" % locals()
207 SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
209 return repr(self.value)
211 class CertMissingParent(SfaFault):
212 def __init__(self, value, extra = None):
214 faultString = "Cert missing parent: %(value)s" % locals()
215 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
217 return repr(self.value)
219 class CertNotSignedByParent(SfaFault):
220 def __init__(self, value, extra = None):
222 faultString = "Cert not signed by parent: %(value)s" % locals()
223 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
225 return repr(self.value)
227 class GidParentHrn(SfaFault):
228 def __init__(self, value, extra = None):
230 faultString = "Cert URN is not an extension of its parent: %(value)s" % locals()
231 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
233 return repr(self.value)
235 class GidInvalidParentHrn(SfaFault):
236 def __init__(self, value, extra = None):
238 faultString = "GID invalid parent hrn: %(value)s" % locals()
239 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
241 return repr(self.value)
243 class SliverDoesNotExist(SfaFault):
244 def __init__(self, value, extra = None):
246 faultString = "Sliver does not exist : %(value)s" % locals()
247 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
249 return repr(self.value)
251 class BadRequestHash(xmlrpclib.Fault):
252 def __init__(self, hash = None, extra = None):
253 faultString = "bad request hash: " + str(hash)
254 xmlrpclib.Fault.__init__(self, GENICODE.ERROR, faultString)
256 class MissingTrustedRoots(SfaFault):
257 def __init__(self, value, extra = None):
259 faultString = "Trusted root directory does not exist: %(value)s" % locals()
260 SfaFault.__init__(self, GENICODE.SERVERERROR, faultString, extra)
262 return repr(self.value)
264 class MissingSfaInfo(SfaFault):
265 def __init__(self, value, extra = None):
267 faultString = "Missing information: %(value)s" % locals()
268 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
270 return repr(self.value)
272 class InvalidRSpec(SfaFault):
273 def __init__(self, value, extra = None):
275 faultString = "Invalid RSpec: %(value)s" % locals()
276 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
278 return repr(self.value)
280 class InvalidRSpecVersion(SfaFault):
281 def __init__(self, value, extra = None):
283 faultString = "Invalid RSpec version: %(value)s" % locals()
284 SfaFault.__init__(self, GENICODE.BADVERSION, faultString, extra)
286 return repr(self.value)
288 class UnsupportedRSpecVersion(SfaFault):
289 def __init__(self, value, extra = None):
291 faultString = "Unsupported RSpec version: %(value)s" % locals()
292 SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)
294 return repr(self.value)
296 class InvalidRSpecElement(SfaFault):
297 def __init__(self, value, extra = None):
299 faultString = "Invalid RSpec Element: %(value)s" % locals()
300 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
302 return repr(self.value)
304 class InvalidXML(SfaFault):
305 def __init__(self, value, extra = None):
307 faultString = "Invalid XML Document: %(value)s" % locals()
308 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
310 return repr(self.value)
312 class AccountNotEnabled(SfaFault):
313 def __init__(self, extra = None):
314 faultString = "Account Disabled"
315 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
317 return repr(self.value)
319 class CredentialNotVerifiable(SfaFault):
320 def __init__(self, value, extra = None):
322 faultString = "Unable to verify credential: %(value)s, " %locals()
323 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
325 return repr(self.value)
327 class CertExpired(SfaFault):
328 def __init__(self, value, extra=None):
330 faultString = "%s cert is expired" % value
331 SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)