return/raise SfaAPIException with stacktrace if we fail to connect to PLCAPI
authorTony Mack <tmack@cs.princeton.edu>
Tue, 23 Feb 2010 20:05:29 +0000 (20:05 +0000)
committerTony Mack <tmack@cs.princeton.edu>
Tue, 23 Feb 2010 20:05:29 +0000 (20:05 +0000)
sfa/plc/api.py

index 903df15..cfda327 100644 (file)
@@ -26,6 +26,11 @@ def list_to_dict(recs, key):
     keys = [rec[key] for rec in recs]
     return dict(zip(keys, recs))
 
+def handle_exception(method):
+    def wrapper(*args, **kwargs):
+        try: return method(*args, **kwargs)
+        except: raise SfaAPIError(traceback.format_exc())
+    return wrapper
 
 class SfaAPI(BaseAPI):
 
@@ -66,6 +71,7 @@ class SfaAPI(BaseAPI):
         self.time_format = "%Y-%m-%d %H:%M:%S"
         self.logger=get_sfa_logger()
 
+    @handle_exception 
     def getPLCShell(self):
         self.plauth = {'Username': self.config.SFA_PLC_USER,
                        'AuthMethod': 'password',
@@ -84,7 +90,8 @@ class SfaAPI(BaseAPI):
             shell = xmlrpclib.Server(url, verbose = 0, allow_none = True)
             shell.AuthCheck(self.plauth)
             return shell
-
+    
+    @handle_exception 
     def getPLCShellVersion(self):
         # We need to figure out what version of PLCAPI we are talking to.
         # Some calls we need to make later will be different depending on