dos2unix
[sfa.git] / sfa / util / faults.py
index 3512e96..ab3abad 100644 (file)
-#----------------------------------------------------------------------\r
-# Copyright (c) 2008 Board of Trustees, Princeton University\r
-#\r
-# Permission is hereby granted, free of charge, to any person obtaining\r
-# a copy of this software and/or hardware specification (the "Work") to\r
-# deal in the Work without restriction, including without limitation the\r
-# rights to use, copy, modify, merge, publish, distribute, sublicense,\r
-# and/or sell copies of the Work, and to permit persons to whom the Work\r
-# is furnished to do so, subject to the following conditions:\r
-#\r
-# The above copyright notice and this permission notice shall be\r
-# included in all copies or substantial portions of the Work.\r
-#\r
-# THE WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS \r
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF \r
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND \r
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT \r
-# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, \r
-# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, \r
-# OUT OF OR IN CONNECTION WITH THE WORK OR THE USE OR OTHER DEALINGS \r
-# IN THE WORK.\r
-#----------------------------------------------------------------------\r
-#\r
-# SFA API faults\r
-#\r
-\r
-import xmlrpclib\r
-from sfa.util.genicode import GENICODE\r
-\r
-class SfaFault(xmlrpclib.Fault):\r
-    def __init__(self, faultCode, faultString, extra = None):\r
-        if extra:\r
-            faultString += ": " + str(extra)\r
-        xmlrpclib.Fault.__init__(self, faultCode, faultString)\r
-\r
-class SfaInvalidAPIMethod(SfaFault):\r
-    def __init__(self, method, interface = None, extra = None):\r
-        faultString = "Invalid method " + method\r
-        if interface:\r
-            faultString += " for interface " + interface\r
-        SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)\r
-\r
-class SfaInvalidArgumentCount(SfaFault):\r
-    def __init__(self, got, min, max = min, extra = None):\r
-        if min != max:\r
-            expected = "%d-%d" % (min, max)\r
-        else:\r
-            expected = "%d" % min\r
-        faultString = "Expected %s arguments, got %d" % \\r
-                      (expected, got)\r
-        SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)\r
-\r
-class SfaInvalidArgument(SfaFault):\r
-    def __init__(self, extra = None, name = None):\r
-        if name is not None:\r
-            faultString = "Invalid %s value" % name\r
-        else:\r
-            faultString = "Invalid argument"\r
-        SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)\r
-\r
-class SfaAuthenticationFailure(SfaFault):\r
-    def __init__(self, extra = None):\r
-        faultString = "Failed to authenticate call"\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-\r
-class SfaDBError(SfaFault):\r
-    def __init__(self, extra = None):\r
-        faultString = "Database error"\r
-        SfaFault.__init__(self, GENICODE.DBERROR, faultString, extra)\r
-\r
-class SfaPermissionDenied(SfaFault):\r
-    def __init__(self, extra = None):\r
-        faultString = "Permission denied"\r
-        SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)\r
-\r
-class SfaNotImplemented(SfaFault):\r
-    def __init__(self, interface=None, extra = None):\r
-        faultString = "Not implemented"\r
-        if interface:\r
-            faultString += " at interface " + interface \r
-        SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)\r
-\r
-class SfaAPIError(SfaFault):\r
-    def __init__(self, extra = None):\r
-        faultString = "Internal API error"\r
-        SfaFault.__init__(self, GENICODE.SERVERERROR, faultString, extra)\r
-\r
-class MalformedHrnException(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Malformed HRN: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class TreeException(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Tree Exception: %(value)s, " % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class SearchFailed(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "%s does not exist here " % self.value\r
-        SfaFault.__init__(self, GENICODE.SEARCHFAILED, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class NonExistingRecord(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Non exsiting record %(value)s, " % locals()\r
-        SfaFault.__init__(self, GENICODE.SEARCHFAILED, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class ExistingRecord(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Existing record: %(value)s, " % locals()\r
-        SfaFault.__init__(self, GENICODE.REFUSED, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-    \r
-class InvalidRPCParams(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Invalid RPC Params: %(value)s, " % locals()\r
-        SfaFault.__init__(self, GENICODE.RPCERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-# SMBAKER exceptions follow\r
-\r
-class ConnectionKeyGIDMismatch(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Connection Key GID mismatch: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra) \r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class MissingCallerGID(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Missing Caller GID: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra) \r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class RecordNotFound(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Record not found: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class UnknownSfaType(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Unknown SFA Type: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class MissingAuthority(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Missing authority: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class PlanetLabRecordDoesNotExist(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "PlanetLab record does not exist : %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class PermissionError(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Permission error: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class InsufficientRights(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Insufficient rights: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class MissingDelegateBit(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Missing delegate bit: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class ChildRightsNotSubsetOfParent(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Child rights not subset of parent: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class CertMissingParent(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Cert missing parent: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class CertNotSignedByParent(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Cert not signed by parent: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-    \r
-class GidParentHrn(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Cert URN is not an extension of its parent: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-        \r
-class GidInvalidParentHrn(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "GID invalid parent hrn: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class SliverDoesNotExist(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Sliver does not exist : %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class BadRequestHash(xmlrpclib.Fault):\r
-    def __init__(self, hash = None, extra = None):\r
-        faultString = "bad request hash: " + str(hash)\r
-        xmlrpclib.Fault.__init__(self, GENICODE.ERROR, faultString)\r
-\r
-class MissingTrustedRoots(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Trusted root directory does not exist: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.SERVERERROR, faultString, extra) \r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class MissingSfaInfo(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Missing information: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra) \r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class InvalidRSpec(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Invalid RSpec: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class InvalidRSpecVersion(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Invalid RSpec version: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.BADVERSION, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class UnsupportedRSpecVersion(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Unsupported RSpec version: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class InvalidRSpecElement(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Invalid RSpec Element: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class InvalidXML(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Invalid XML Document: %(value)s" % locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class AccountNotEnabled(SfaFault):\r
-    def __init__(self,  extra = None):\r
-        faultString = "Account Disabled"\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class CredentialNotVerifiable(SfaFault):\r
-    def __init__(self, value, extra = None):\r
-        self.value = value\r
-        faultString = "Unable to verify credential: %(value)s, " %locals()\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-    def __str__(self):\r
-        return repr(self.value)\r
-\r
-class CertExpired(SfaFault):\r
-    def __init__(self, value, extra=None):\r
-        self.value = value\r
-        faultString = "%s cert is expired" % value\r
-        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)\r
-  \r
-class SfatablesRejected(SfaFault):\r
-    def __init__(self, value, extra=None):\r
-        self.value =value\r
-        faultString = "%s rejected by sfatables"\r
-        SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra) \r
-\r
-class UnsupportedOperation(SfaFault):\r
-    def __init__(self, value, extra=None):\r
-        self.value = value\r
-        faultString = "Unsupported operation: %s" % value\r
-        SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra) \r
-                 \r
+#----------------------------------------------------------------------
+# Copyright (c) 2008 Board of Trustees, Princeton University
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and/or hardware specification (the "Work") to
+# deal in the Work without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Work, and to permit persons to whom the Work
+# is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Work.
+#
+# THE WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
+# OUT OF OR IN CONNECTION WITH THE WORK OR THE USE OR OTHER DEALINGS 
+# IN THE WORK.
+#----------------------------------------------------------------------
+#
+# SFA API faults
+#
+
+import xmlrpclib
+from sfa.util.genicode import GENICODE
+
+class SfaFault(xmlrpclib.Fault):
+    def __init__(self, faultCode, faultString, extra = None):
+        if extra:
+            faultString += ": " + str(extra)
+        xmlrpclib.Fault.__init__(self, faultCode, faultString)
+
+class SfaInvalidAPIMethod(SfaFault):
+    def __init__(self, method, interface = None, extra = None):
+        faultString = "Invalid method " + method
+        if interface:
+            faultString += " for interface " + interface
+        SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)
+
+class SfaInvalidArgumentCount(SfaFault):
+    def __init__(self, got, min, max = min, extra = None):
+        if min != max:
+            expected = "%d-%d" % (min, max)
+        else:
+            expected = "%d" % min
+        faultString = "Expected %s arguments, got %d" % \
+                      (expected, got)
+        SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)
+
+class SfaInvalidArgument(SfaFault):
+    def __init__(self, extra = None, name = None):
+        if name is not None:
+            faultString = "Invalid %s value" % name
+        else:
+            faultString = "Invalid argument"
+        SfaFault.__init__(self, GENICODE.BADARGS, faultString, extra)
+
+class SfaAuthenticationFailure(SfaFault):
+    def __init__(self, extra = None):
+        faultString = "Failed to authenticate call"
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+
+class SfaDBError(SfaFault):
+    def __init__(self, extra = None):
+        faultString = "Database error"
+        SfaFault.__init__(self, GENICODE.DBERROR, faultString, extra)
+
+class SfaPermissionDenied(SfaFault):
+    def __init__(self, extra = None):
+        faultString = "Permission denied"
+        SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
+
+class SfaNotImplemented(SfaFault):
+    def __init__(self, interface=None, extra = None):
+        faultString = "Not implemented"
+        if interface:
+            faultString += " at interface " + interface 
+        SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)
+
+class SfaAPIError(SfaFault):
+    def __init__(self, extra = None):
+        faultString = "Internal API error"
+        SfaFault.__init__(self, GENICODE.SERVERERROR, faultString, extra)
+
+class MalformedHrnException(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Malformed HRN: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class TreeException(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Tree Exception: %(value)s, " % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class SearchFailed(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "%s does not exist here " % self.value
+        SfaFault.__init__(self, GENICODE.SEARCHFAILED, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class NonExistingRecord(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Non exsiting record %(value)s, " % locals()
+        SfaFault.__init__(self, GENICODE.SEARCHFAILED, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class ExistingRecord(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Existing record: %(value)s, " % locals()
+        SfaFault.__init__(self, GENICODE.REFUSED, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+    
+class InvalidRPCParams(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Invalid RPC Params: %(value)s, " % locals()
+        SfaFault.__init__(self, GENICODE.RPCERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+# SMBAKER exceptions follow
+
+class ConnectionKeyGIDMismatch(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Connection Key GID mismatch: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra) 
+    def __str__(self):
+        return repr(self.value)
+
+class MissingCallerGID(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Missing Caller GID: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra) 
+    def __str__(self):
+        return repr(self.value)
+
+class RecordNotFound(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Record not found: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class UnknownSfaType(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Unknown SFA Type: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class MissingAuthority(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Missing authority: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class PlanetLabRecordDoesNotExist(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "PlanetLab record does not exist : %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class PermissionError(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Permission error: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class InsufficientRights(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Insufficient rights: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class MissingDelegateBit(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Missing delegate bit: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class ChildRightsNotSubsetOfParent(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Child rights not subset of parent: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class CertMissingParent(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Cert missing parent: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class CertNotSignedByParent(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Cert not signed by parent: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+    
+class GidParentHrn(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Cert URN is not an extension of its parent: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+        
+class GidInvalidParentHrn(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "GID invalid parent hrn: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class SliverDoesNotExist(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Sliver does not exist : %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class BadRequestHash(xmlrpclib.Fault):
+    def __init__(self, hash = None, extra = None):
+        faultString = "bad request hash: " + str(hash)
+        xmlrpclib.Fault.__init__(self, GENICODE.ERROR, faultString)
+
+class MissingTrustedRoots(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Trusted root directory does not exist: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.SERVERERROR, faultString, extra) 
+    def __str__(self):
+        return repr(self.value)
+
+class MissingSfaInfo(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Missing information: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra) 
+    def __str__(self):
+        return repr(self.value)
+
+class InvalidRSpec(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Invalid RSpec: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class InvalidRSpecVersion(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Invalid RSpec version: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.BADVERSION, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class UnsupportedRSpecVersion(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Unsupported RSpec version: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class InvalidRSpecElement(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Invalid RSpec Element: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class InvalidXML(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Invalid XML Document: %(value)s" % locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class AccountNotEnabled(SfaFault):
+    def __init__(self,  extra = None):
+        faultString = "Account Disabled"
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class CredentialNotVerifiable(SfaFault):
+    def __init__(self, value, extra = None):
+        self.value = value
+        faultString = "Unable to verify credential: %(value)s, " %locals()
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+    def __str__(self):
+        return repr(self.value)
+
+class CertExpired(SfaFault):
+    def __init__(self, value, extra=None):
+        self.value = value
+        faultString = "%s cert is expired" % value
+        SfaFault.__init__(self, GENICODE.ERROR, faultString, extra)
+  
+class SfatablesRejected(SfaFault):
+    def __init__(self, value, extra=None):
+        self.value =value
+        faultString = "%s rejected by sfatables"
+        SfaFault.__init__(self, GENICODE.FORBIDDEN, faultString, extra) 
+
+class UnsupportedOperation(SfaFault):
+    def __init__(self, value, extra=None):
+        self.value = value
+        faultString = "Unsupported operation: %s" % value
+        SfaFault.__init__(self, GENICODE.UNSUPPORTED, faultString, extra) 
+