Blob Blame History Raw
# HG changeset patch
# User Maxime "Pepe_" Buquet <pep+code@bouah.net>
# Date 1425540278 -32400
# Node ID 9da0e2bcfe5e32a1db95b639f41f67d3e1a43b80
# Parent  06a6c81e3a98ecb647e729e239f5de11814901d3
Added Python3 support alongside Python2

diff --git a/flaskext/xmlrpc.py b/flaskext/xmlrpc.py
--- a/flaskext/xmlrpc.py
+++ b/flaskext/xmlrpc.py
@@ -10,9 +10,16 @@
 """
 
 from flask import request, current_app
-from SimpleXMLRPCServer import SimpleXMLRPCDispatcher as Dispatcher
 import sys
-import xmlrpclib
+
+if sys.version_info[0] == 2:
+    from SimpleXMLRPCServer import SimpleXMLRPCDispatcher as Dispatcher
+    import xmlrpclib
+    string_types = basestring
+else:
+    from xmlrpc.server import SimpleXMLRPCDispatcher as Dispatcher
+    import xmlrpc.client as xmlrpclib
+    string_types = str
 
 Fault = xmlrpclib.Fault
 
@@ -97,7 +104,7 @@
                      If not given, the function's :obj:`__name__` attribute
                      will be used.
         """
-        if isinstance(function, basestring):
+        if isinstance(function, string_types):
             return lambda fn: self.register_function(fn, function)
         return Dispatcher.register_function(self, function, name)
     
@@ -198,7 +205,7 @@
                      If not given, the function's :obj:`__name__` attribute
                      will be used.
         """
-        if isinstance(function, basestring):
+        if isinstance(function, string_types):
             return lambda fn: self.register_function(fn, function)
         if name is None:
             name = function.__name__
@@ -249,7 +256,8 @@
     """
     try:
         return xmlrpclib.loads(response)[0][0]
-    except Fault, fault:
+    except Fault:
+        _, fault = sys.exec_info()[:2]
         return fault
 
 
diff --git a/tests/test-xmlrpc.py b/tests/test-xmlrpc.py
--- a/tests/test-xmlrpc.py
+++ b/tests/test-xmlrpc.py
@@ -7,12 +7,19 @@
 :copyright: (c) 2010 by Matthew "LeafStorm" Frazier.
 :license: MIT, see LICENSE for more details.
 """
-import xmlrpclib
 from flask import Flask
 from flaskext.xmlrpc import (XMLRPCHandler, XMLRPCNamespace, Fault,
                              dump_method_call, load_method_response,
                              test_xmlrpc_call, XMLRPCTester)
 
+import sys
+PY2 = sys.version_info[0] == 2
+
+if PY2:
+    import xmlrpclib
+else:
+    import xmlrpc.client as xmlrpclib
+
 
 def hello(name='world'):
     if not name:
@@ -39,7 +46,11 @@
         handler = XMLRPCHandler('api')
         app = Flask(__name__)
         handler.connect(app, '/api')
-        assert app.view_functions[handler.endpoint_name].im_self is handler
+        if PY2:
+            app_handler = app.view_functions[handler.endpoint_name].im_self
+        else:
+            app_handler = app.view_functions[handler.endpoint_name].__self__
+        assert app_handler is handler
     
     def test_register(self):
         handler = XMLRPCHandler('api')