2to3 -f has_key
[sfa.git] / sfa / server / xmlrpcapi.py
index f182ee0..74e0026 100644 (file)
@@ -3,7 +3,6 @@
 #
 
 import string
-import xmlrpclib
 
 # SOAP support is optional
 try:
@@ -19,6 +18,7 @@ except ImportError:
 #from sfa.util.faults import SfaNotImplemented, SfaAPIError, SfaInvalidAPIMethod, SfaFault
 from sfa.util.faults import SfaInvalidAPIMethod, SfaAPIError, SfaFault
 from sfa.util.sfalogging import logger
+from sfa.util.py23 import xmlrpc_client
 
 ####################
 # See "2.2 Characters" in the XML specification:
@@ -71,12 +71,14 @@ def xmlrpclib_dump(self, value, write):
             if isinstance(value, Type):
                 f(*args)
                 return
-        raise TypeError, "cannot marshal %s objects" % type(value)
+        raise TypeError("cannot marshal %s objects" % type(value))
     else:
         f(*args)
 
 # You can't hide from me!
-xmlrpclib.Marshaller._Marshaller__dump = xmlrpclib_dump
+# Note: not quite  sure if this will still cause
+# the expected behaviour under python3
+xmlrpc_client.Marshaller._Marshaller__dump = xmlrpclib_dump
 
 class XmlrpcApi:
     """
@@ -102,7 +104,7 @@ class XmlrpcApi:
         """
         # Look up method
         if method not in self.methods:
-            raise SfaInvalidAPIMethod, method
+            raise SfaInvalidAPIMethod(method)
         
         # Get new instance of method
         try:
@@ -111,7 +113,8 @@ class XmlrpcApi:
             callablemethod = getattr(module, classname)(self)
             return getattr(module, classname)(self)
         except (ImportError, AttributeError):
-            raise SfaInvalidAPIMethod, method
+            self.logger.log_exc("Error importing method: %s" % method)
+            raise SfaInvalidAPIMethod(method)
 
     def call(self, source, method, *args):
         """
@@ -130,14 +133,14 @@ class XmlrpcApi:
         """
         # Parse request into method name and arguments
         try:
-            interface = xmlrpclib
-            self.protocol = 'xmlrpclib'
-            (args, method) = xmlrpclib.loads(data)
-            if method_map.has_key(method):
+            interface = xmlrpc_client
+            self.protocol = 'xmlrpc'
+            (args, method) = xmlrpc_client.loads(data)
+            if method in method_map:
                 method = method_map[method]
             methodresponse = True
             
-        except Exception, e:
+        except Exception as e:
             if SOAPpy is not None:
                 self.protocol = 'soap'
                 interface = SOAPpy
@@ -150,10 +153,10 @@ class XmlrpcApi:
 
         try:
             result = self.call(source, method, *args)
-        except SfaFault, fault:
+        except SfaFault as fault:
             result = fault
             self.logger.log_exc("XmlrpcApi.handle has caught Exception") 
-        except Exception, fault:
+        except Exception as fault:
             self.logger.log_exc("XmlrpcApi.handle has caught Exception")
             result = SfaAPIError(fault)
 
@@ -167,10 +170,10 @@ class XmlrpcApi:
         convert result to a valid xmlrpc or soap response
         """   
  
-        if self.protocol == 'xmlrpclib':
+        if self.protocol == 'xmlrpc':
             if not isinstance(result, SfaFault):
                 result = (result,)
-            response = xmlrpclib.dumps(result, methodresponse = True, encoding = self.encoding, allow_none = 1)
+            response = xmlrpc_client.dumps(result, methodresponse = True, encoding = self.encoding, allow_none = 1)
         elif self.protocol == 'soap':
             if isinstance(result, Exception):
                 result = faultParameter(NS.ENV_T + ":Server", "Method Failed", method)