python3 - 2to3 + miscell obvious tweaks
[sfa.git] / sfa / server / xmlrpcapi.py
index 9b1e1b8..54fb745 100644 (file)
@@ -2,7 +2,7 @@
 # SFA XML-RPC and SOAP interfaces
 #
 
-import string
+from importlib import import_module
 
 # SOAP support is optional
 try:
@@ -15,7 +15,6 @@ except ImportError:
     SOAPpy = None
 
 ####################
-#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
@@ -27,15 +26,20 @@ from sfa.util.py23 import xmlrpc_client
 # avoiding
 # [#x7F-#x84], [#x86-#x9F], [#xFDD0-#xFDDF]
 
-invalid_codepoints = range(0x0, 0x8) + [0xB, 0xC] + range(0xE, 0x1F)
-# broke with f24, somehow we get a unicode as an incoming string to be translated
-str_xml_escape_table = string.maketrans("".join((chr(x) for x in invalid_codepoints)),
-                                        "?" * len(invalid_codepoints))
+invalid_codepoints = list(range(0x0, 0x8)) + [0xB, 0xC] + list(range(0xE, 0x1F))
+# broke with f24, somehow we get a unicode
+# as an incoming string to be translated
+str_xml_escape_table = \
+    str.maketrans("".join((chr(x) for x in invalid_codepoints)),
+                  "?" * len(invalid_codepoints))
 # loosely inspired from
-# http://stackoverflow.com/questions/1324067/how-do-i-get-str-translate-to-work-with-unicode-strings
-unicode_xml_escape_table = { invalid : u"?" for invalid in invalid_codepoints}
+# http://stackoverflow.com/questions/1324067/
+# how-do-i-get-str-translate-to-work-with-unicode-strings
+unicode_xml_escape_table = \
+    {invalid: "?" for invalid in invalid_codepoints}
 
-def xmlrpclib_escape(s, replace = string.replace):
+
+def xmlrpclib_escape(s, replace=str.replace):
     """
     xmlrpclib does not handle invalid 7-bit control characters. This
     function augments xmlrpclib.escape, which by default only replaces
@@ -67,16 +71,15 @@ def xmlrpclib_dump(self, value, write):
 
     # Use our escape function
     args = [self, value, write]
-    if isinstance(value, (str, unicode)):
+    if isinstance(value, str):
         args.append(xmlrpclib_escape)
 
     try:
         # Try for an exact match first
         f = self.dispatch[type(value)]
     except KeyError:
-        raise
         # Try for an isinstance() match
-        for Type, f in self.dispatch.iteritems():
+        for Type, f in self.dispatch.items():
             if isinstance(value, Type):
                 f(*args)
                 return
@@ -84,6 +87,7 @@ def xmlrpclib_dump(self, value, write):
     else:
         f(*args)
 
+
 # You can't hide from me!
 # Note: not quite  sure if this will still cause
 # the expected behaviour under python3
@@ -92,7 +96,7 @@ xmlrpc_client.Marshaller._Marshaller__dump = xmlrpclib_dump
 
 class XmlrpcApi:
     """
-    The XmlrpcApi class implements a basic xmlrpc (or soap) service 
+    The XmlrpcApi class implements a basic xmlrpc (or soap) service
     """
 
     protocol = None
@@ -103,12 +107,9 @@ class XmlrpcApi:
         self.source = None
 
         # flat list of method names
-        self.methods_module = methods_module = __import__(
-            methods, fromlist=[methods])
+        self.methods_module = methods_module = import_module(methods)
         self.methods = methods_module.all
 
-        self.logger = logger
-
     def callable(self, method):
         """
         Return a new instance of the specified method.
@@ -120,12 +121,12 @@ class XmlrpcApi:
         # Get new instance of method
         try:
             classname = method.split(".")[-1]
-            module = __import__(self.methods_module.__name__ +
-                                "." + method, globals(), locals(), [classname])
+            module = import_module(
+                self.methods_module.__name__ + "." + method)
             callablemethod = getattr(module, classname)(self)
             return getattr(module, classname)(self)
         except (ImportError, AttributeError):
-            self.logger.log_exc("Error importing method: %s" % method)
+            logger.log_exc("Error importing method: %s" % method)
             raise SfaInvalidAPIMethod(method)
 
     def call(self, source, method, *args):
@@ -167,9 +168,9 @@ class XmlrpcApi:
             result = self.call(source, method, *args)
         except SfaFault as fault:
             result = fault
-            self.logger.log_exc("XmlrpcApi.handle has caught Exception")
+            logger.log_exc("XmlrpcApi.handle has caught Exception")
         except Exception as fault:
-            self.logger.log_exc("XmlrpcApi.handle has caught Exception")
+            logger.log_exc("XmlrpcApi.handle has caught Exception")
             result = SfaAPIError(fault)
 
         # Return result