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