Create an afs.afs module for common functions, like error handling.
[invirt/packages/python-afs.git] / afs / afs.pyx
diff --git a/afs/afs.pyx b/afs/afs.pyx
new file mode 100644 (file)
index 0000000..a54a1c9
--- /dev/null
@@ -0,0 +1,32 @@
+"""
+General PyAFS utilities, such as error handling
+"""
+
+import sys
+
+cdef int _init = 0
+
+class AFSException(Exception):
+    def __init__(self, errno, message):
+        self.errno = errno
+        self.strerror = afs_error_message(errno)
+        self.message = message
+
+    def __repr__(self):
+        return "AFSException(%s, %s)" % (self.errno, self.message)
+
+    def __str__(self):
+        return "[%s] (%s) while %s" % (self.errno, self.strerror, self.message)
+
+def pyafs_error(code, msg):
+    if not _init:
+        initialize_ACFG_error_table()
+        initialize_KTC_error_table()
+        initialize_PT_error_table()
+        initialize_RXK_error_table()
+        initialize_U_error_table()
+
+        _init = 1
+
+    if code != 0:
+        raise AFSException(code, msg)