Create an afs.afs module for common functions, like error handling.
authorEvan Broder <broder@mit.edu>
Wed, 18 Mar 2009 17:59:22 +0000 (13:59 -0400)
committerEvan Broder <broder@mit.edu>
Wed, 18 Mar 2009 17:59:35 +0000 (13:59 -0400)
Signed-off-by: Evan Broder <broder@mit.edu>

.gitignore
afs/afs.pyx [new file with mode: 0644]
setup.py

index e5dd526..26bf8d7 100644 (file)
@@ -1,3 +1,5 @@
+afs/afs.c
+afs/afs.dep
 afs/_pts.c
 afs/_pts.dep
 
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)
index e368aa9..977deb5 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -35,6 +35,12 @@ setup(
                   libraries=libraries,
                   include_dirs=include_dirs,
                   library_dirs=library_dirs,
+                  define_macros=define_macros),
+        Extension("afs.afs",
+                  ["afs/afs.pyx"],
+                  libraries=libraries,
+                  include_dirs=include_dirs,
+                  library_dirs=library_dirs,
                   define_macros=define_macros)
         ],
     cmdclass= {"build_ext": build_ext}