]> git.ozlabs.org Git - patchwork/commitdiff
xmlrpc: Fix Python 2.4 compatibility in _marshaled_dispatch
authorJeremy Kerr <jk@ozlabs.org>
Wed, 10 Sep 2008 03:21:39 +0000 (13:21 +1000)
committerJeremy Kerr <jk@ozlabs.org>
Wed, 10 Sep 2008 03:21:39 +0000 (13:21 +1000)
Based on an original patch from Nate Case <ncase@xes-inc.com>.

Python 24 doesn't accept encoding and allow_none fields for
xmlrpclib.dumps, so abstract this function at dispatcher init time.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
apps/patchwork/views/xmlrpc.py

index 245962de8d0077698a34195f28efdf20eec45b28..791c89ef7ce534d2ed68e86cf4566c4102964a7d 100644 (file)
@@ -39,13 +39,20 @@ class PatchworkXMLRPCDispatcher(SimpleXMLRPCDispatcher):
         if sys.version_info[:3] >= (2,5,):
             SimpleXMLRPCDispatcher.__init__(self, allow_none=False,
                     encoding=None)
+            def _dumps(obj, *args, **kwargs):
+                kwargs['allow_none'] = self.allow_none
+                kwargs['encoding'] = self.encoding
+                return xmlrpclib.dumps(obj, *args, **kwargs)
         else:
+            def _dumps(obj, *args, **kwargs):
+                return xmlrpclib.dumps(obj, *args, **kwargs)
             SimpleXMLRPCDispatcher.__init__(self)
 
+        self.dumps = _dumps
+
         # map of name => (auth, func)
         self.func_map = {}
 
-
     def register_function(self, fn, auth_required):
         self.func_map[fn.__name__] = (auth_required, fn)
 
@@ -99,16 +106,13 @@ class PatchworkXMLRPCDispatcher(SimpleXMLRPCDispatcher):
             response = self._dispatch(request, method, params)
             # wrap response in a singleton tuple
             response = (response,)
-            response = xmlrpclib.dumps(response, methodresponse=1,
-                           allow_none=self.allow_none, encoding=self.encoding)
+            response = self.dumps(response, methodresponse=1)
         except xmlrpclib.Fault, fault:
-            response = xmlrpclib.dumps(fault, allow_none=self.allow_none,
-                                       encoding=self.encoding)
+            response = self.dumps(fault)
         except:
             # report exception back to server
-            response = xmlrpclib.dumps(
+            response = self.dumps(
                 xmlrpclib.Fault(1, "%s:%s" % (sys.exc_type, sys.exc_value)),
-                encoding=self.encoding, allow_none=self.allow_none,
                 )
 
         return response