3512e9629f0fbb89cda8d3a8b5b1fe1d8b7cc9a7
[sfa.git] / sfa / util / faults.py
1 #----------------------------------------------------------------------\r
2 # Copyright (c) 2008 Board of Trustees, Princeton University\r
3 #\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
10 #\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
13 #\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
21 # IN THE WORK.\r
22 #----------------------------------------------------------------------\r
23 #\r
24 # SFA API faults\r
25 #\r
26 \r
27 import xmlrpclib\r
28 from sfa.util.genicode import GENICODE\r
29 \r
30 class SfaFault(xmlrpclib.Fault):\r
31     def __init__(self, faultCode, faultString, extra = None):\r
32         if extra:\r
33             faultString += ": " + str(extra)\r
34         xmlrpclib.Fault.__init__(self, faultCode, faultString)\r
35 \r
36 class SfaInvalidAPIMethod(SfaFault):\r
37     def __init__(self, method, interface = None, extra = None):\r
38         faultString = "Invalid method " + method\r
39         if interface:\r
40             faultString += " for interface " + interface\r
41         SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)\r
42 \r
43 class SfaInvalidArgumentCount(SfaFault):\r
44     def __init__(self, got, min, max = min, extra = None):\r
45         if min != max:\r
46             expected = "%d-%d" % (min, max)\r
47         else:\r
48             expected = "%d" % min\r
49         faultString = "Expected %s arguments, got %d" % \\r
50                       (expected, got)\r
51         SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)\r
52 \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
57         else:\r
58             faultString = "Invalid argument"\r
59         SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)\r
60 \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
65 \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
70 \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
75 \r
76 class SfaNotImplemented(SfaFault):\r
77     def __init__(self, interface=None, extra = None):\r
78         faultString = "Not implemented"\r
79         if interface:\r
80             faultString += " at interface " + interface \r
81         SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)\r
82 \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
87 \r
88 class MalformedHrnException(SfaFault):\r
89     def __init__(self, value, extra = None):\r
90         self.value = value\r
91         faultString = "Malformed HRN: %(value)s" % locals()\r
92         SfaFault.__init__(self, GENICODE.ERROR, extra)\r
93     def __str__(self):\r
94         return repr(self.value)\r
95 \r
96 class TreeException(SfaFault):\r
97     def __init__(self, value, extra = None):\r
98         self.value = value\r
99         faultString = "Tree Exception: %(value)s, " % locals()\r
100         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
101     def __str__(self):\r
102         return repr(self.value)\r
103 \r
104 class SearchFailed(SfaFault):\r
105     def __init__(self, value, extra = None):\r
106         self.value = value\r
107         faultString = "%s does not exist here " % self.value\r
108         SfaFault.__init__(self, GENICODE.SEARCHFAILED, faultString, extra)\r
109     def __str__(self):\r
110         return repr(self.value)\r
111 \r
112 class NonExistingRecord(SfaFault):\r
113     def __init__(self, value, extra = None):\r
114         self.value = value\r
115         faultString = "Non exsiting record %(value)s, " % locals()\r
116         SfaFault.__init__(self, GENICODE.SEARCHFAILED, faultString, extra)\r
117     def __str__(self):\r
118         return repr(self.value)\r
119 \r
120 class ExistingRecord(SfaFault):\r
121     def __init__(self, value, extra = None):\r
122         self.value = value\r
123         faultString = "Existing record: %(value)s, " % locals()\r
124         SfaFault.__init__(self, GENICODE.REFUSED, faultString, extra)\r
125     def __str__(self):\r
126         return repr(self.value)\r
127 \r
128     \r
129 class InvalidRPCParams(SfaFault):\r
130     def __init__(self, value, extra = None):\r
131         self.value = value\r
132         faultString = "Invalid RPC Params: %(value)s, " % locals()\r
133         SfaFault.__init__(self, GENICODE.RPCERROR, faultString, extra)\r
134     def __str__(self):\r
135         return repr(self.value)\r
136 \r
137 # SMBAKER exceptions follow\r
138 \r
139 class ConnectionKeyGIDMismatch(SfaFault):\r
140     def __init__(self, value, extra = None):\r
141         self.value = value\r
142         faultString = "Connection Key GID mismatch: %(value)s" % locals()\r
143         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra) \r
144     def __str__(self):\r
145         return repr(self.value)\r
146 \r
147 class MissingCallerGID(SfaFault):\r
148     def __init__(self, value, extra = None):\r
149         self.value = value\r
150         faultString = "Missing Caller GID: %(value)s" % locals()\r
151         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra) \r
152     def __str__(self):\r
153         return repr(self.value)\r
154 \r
155 class RecordNotFound(SfaFault):\r
156     def __init__(self, value, extra = None):\r
157         self.value = value\r
158         faultString = "Record not found: %(value)s" % locals()\r
159         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
160     def __str__(self):\r
161         return repr(self.value)\r
162 \r
163 class UnknownSfaType(SfaFault):\r
164     def __init__(self, value, extra = None):\r
165         self.value = value\r
166         faultString = "Unknown SFA Type: %(value)s" % locals()\r
167         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
168     def __str__(self):\r
169         return repr(self.value)\r
170 \r
171 class MissingAuthority(SfaFault):\r
172     def __init__(self, value, extra = None):\r
173         self.value = value\r
174         faultString = "Missing authority: %(value)s" % locals()\r
175         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
176     def __str__(self):\r
177         return repr(self.value)\r
178 \r
179 class PlanetLabRecordDoesNotExist(SfaFault):\r
180     def __init__(self, value, extra = None):\r
181         self.value = value\r
182         faultString = "PlanetLab record does not exist : %(value)s" % locals()\r
183         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
184     def __str__(self):\r
185         return repr(self.value)\r
186 \r
187 class PermissionError(SfaFault):\r
188     def __init__(self, value, extra = None):\r
189         self.value = value\r
190         faultString = "Permission error: %(value)s" % locals()\r
191         SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)\r
192     def __str__(self):\r
193         return repr(self.value)\r
194 \r
195 class InsufficientRights(SfaFault):\r
196     def __init__(self, value, extra = None):\r
197         self.value = value\r
198         faultString = "Insufficient rights: %(value)s" % locals()\r
199         SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)\r
200     def __str__(self):\r
201         return repr(self.value)\r
202 \r
203 class MissingDelegateBit(SfaFault):\r
204     def __init__(self, value, extra = None):\r
205         self.value = value\r
206         faultString = "Missing delegate bit: %(value)s" % locals()\r
207         SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)\r
208     def __str__(self):\r
209         return repr(self.value)\r
210 \r
211 class ChildRightsNotSubsetOfParent(SfaFault):\r
212     def __init__(self, value, extra = None):\r
213         self.value = value\r
214         faultString = "Child rights not subset of parent: %(value)s" % locals()\r
215         SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)\r
216     def __str__(self):\r
217         return repr(self.value)\r
218 \r
219 class CertMissingParent(SfaFault):\r
220     def __init__(self, value, extra = None):\r
221         self.value = value\r
222         faultString = "Cert missing parent: %(value)s" % locals()\r
223         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
224     def __str__(self):\r
225         return repr(self.value)\r
226 \r
227 class CertNotSignedByParent(SfaFault):\r
228     def __init__(self, value, extra = None):\r
229         self.value = value\r
230         faultString = "Cert not signed by parent: %(value)s" % locals()\r
231         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
232     def __str__(self):\r
233         return repr(self.value)\r
234     \r
235 class GidParentHrn(SfaFault):\r
236     def __init__(self, value, extra = None):\r
237         self.value = value\r
238         faultString = "Cert URN is not an extension of its parent: %(value)s" % locals()\r
239         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
240     def __str__(self):\r
241         return repr(self.value)\r
242         \r
243 class GidInvalidParentHrn(SfaFault):\r
244     def __init__(self, value, extra = None):\r
245         self.value = value\r
246         faultString = "GID invalid parent hrn: %(value)s" % locals()\r
247         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
248     def __str__(self):\r
249         return repr(self.value)\r
250 \r
251 class SliverDoesNotExist(SfaFault):\r
252     def __init__(self, value, extra = None):\r
253         self.value = value\r
254         faultString = "Sliver does not exist : %(value)s" % locals()\r
255         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
256     def __str__(self):\r
257         return repr(self.value)\r
258 \r
259 class BadRequestHash(xmlrpclib.Fault):\r
260     def __init__(self, hash = None, extra = None):\r
261         faultString = "bad request hash: " + str(hash)\r
262         xmlrpclib.Fault.__init__(self, GENICODE.ERROR, faultString)\r
263 \r
264 class MissingTrustedRoots(SfaFault):\r
265     def __init__(self, value, extra = None):\r
266         self.value = value\r
267         faultString = "Trusted root directory does not exist: %(value)s" % locals()\r
268         SfaFault.__init__(self, GENICODE.SERVERERROR, faultString, extra) \r
269     def __str__(self):\r
270         return repr(self.value)\r
271 \r
272 class MissingSfaInfo(SfaFault):\r
273     def __init__(self, value, extra = None):\r
274         self.value = value\r
275         faultString = "Missing information: %(value)s" % locals()\r
276         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra) \r
277     def __str__(self):\r
278         return repr(self.value)\r
279 \r
280 class InvalidRSpec(SfaFault):\r
281     def __init__(self, value, extra = None):\r
282         self.value = value\r
283         faultString = "Invalid RSpec: %(value)s" % locals()\r
284         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
285     def __str__(self):\r
286         return repr(self.value)\r
287 \r
288 class InvalidRSpecVersion(SfaFault):\r
289     def __init__(self, value, extra = None):\r
290         self.value = value\r
291         faultString = "Invalid RSpec version: %(value)s" % locals()\r
292         SfaFault.__init__(self, GENICODE.BADVERSION, faultString, extra)\r
293     def __str__(self):\r
294         return repr(self.value)\r
295 \r
296 class UnsupportedRSpecVersion(SfaFault):\r
297     def __init__(self, value, extra = None):\r
298         self.value = value\r
299         faultString = "Unsupported RSpec version: %(value)s" % locals()\r
300         SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)\r
301     def __str__(self):\r
302         return repr(self.value)\r
303 \r
304 class InvalidRSpecElement(SfaFault):\r
305     def __init__(self, value, extra = None):\r
306         self.value = value\r
307         faultString = "Invalid RSpec Element: %(value)s" % locals()\r
308         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
309     def __str__(self):\r
310         return repr(self.value)\r
311 \r
312 class InvalidXML(SfaFault):\r
313     def __init__(self, value, extra = None):\r
314         self.value = value\r
315         faultString = "Invalid XML Document: %(value)s" % locals()\r
316         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
317     def __str__(self):\r
318         return repr(self.value)\r
319 \r
320 class AccountNotEnabled(SfaFault):\r
321     def __init__(self,  extra = None):\r
322         faultString = "Account Disabled"\r
323         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
324     def __str__(self):\r
325         return repr(self.value)\r
326 \r
327 class CredentialNotVerifiable(SfaFault):\r
328     def __init__(self, value, extra = None):\r
329         self.value = value\r
330         faultString = "Unable to verify credential: %(value)s, " %locals()\r
331         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
332     def __str__(self):\r
333         return repr(self.value)\r
334 \r
335 class CertExpired(SfaFault):\r
336     def __init__(self, value, extra=None):\r
337         self.value = value\r
338         faultString = "%s cert is expired" % value\r
339         SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
340   \r
341 class SfatablesRejected(SfaFault):\r
342     def __init__(self, value, extra=None):\r
343         self.value =value\r
344         faultString = "%s rejected by sfatables"\r
345         SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra) \r
346 \r
347 class UnsupportedOperation(SfaFault):\r
348     def __init__(self, value, extra=None):\r
349         self.value = value\r
350         faultString = "Unsupported operation: %s" % value\r
351         SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra) \r
352                  \r