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