Fix xmlrpc unittest. While it now passes on Linux, it still fails
authorHye-Shik Chang <hyeshik@gmail.com>
Sun, 19 Aug 2007 10:49:11 +0000 (10:49 +0000)
committerHye-Shik Chang <hyeshik@gmail.com>
Sun, 19 Aug 2007 10:49:11 +0000 (10:49 +0000)
on FreeBSD due to the difference of socket blocking mode inheritance.

Lib/SimpleXMLRPCServer.py
Lib/xmlrpclib.py

index 7056d58c36d19e8314704da5f1fc86d62a217dae..458d4278f8f4765c10f9d1d9de3ec862104b6536 100644 (file)
@@ -141,19 +141,6 @@ def list_public_methods(obj):
                 if not member.startswith('_') and
                     hasattr(getattr(obj, member), '__call__')]
 
-def remove_duplicates(lst):
-    """remove_duplicates([2,2,2,1,3,3]) => [3,1,2]
-
-    Returns a copy of a list without duplicates. Every list
-    item must be hashable and the order of the items in the
-    resulting list is not defined.
-    """
-    u = {}
-    for x in lst:
-        u[x] = 1
-
-    return u.keys()
-
 class SimpleXMLRPCDispatcher:
     """Mix-in class that dispatches XML-RPC requests.
 
@@ -276,23 +263,18 @@ class SimpleXMLRPCDispatcher:
 
         Returns a list of the methods supported by the server."""
 
-        methods = self.funcs.keys()
+        methods = set(self.funcs.keys())
         if self.instance is not None:
             # Instance can implement _listMethod to return a list of
             # methods
             if hasattr(self.instance, '_listMethods'):
-                methods = remove_duplicates(
-                        methods + self.instance._listMethods()
-                    )
+                methods |= set(self.instance._listMethods())
             # if the instance has a _dispatch method then we
             # don't have enough information to provide a list
             # of methods
             elif not hasattr(self.instance, '_dispatch'):
-                methods = remove_duplicates(
-                        methods + list_public_methods(self.instance)
-                    )
-        methods.sort()
-        return methods
+                methods |= set(list_public_methods(self.instance))
+        return sorted(methods)
 
     def system_methodSignature(self, method_name):
         """system.methodSignature('add') => [double, int, int]
@@ -459,7 +441,7 @@ class SimpleXMLRPCRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
                 chunk_size = min(size_remaining, max_chunk_size)
                 L.append(self.rfile.read(chunk_size))
                 size_remaining -= len(L[-1])
-            data = ''.join(L)
+            data = b''.join(L)
 
             # In previous versions of SimpleXMLRPCServer, _dispatch
             # could be overridden in this class, instead of in
index 2cb4bf52be43d2ff04a96fe0f25960c165e4252e..2da17c41f85d81808787962fe2373e6c3699c65e 100644 (file)
@@ -1117,8 +1117,8 @@ class Transport:
         if resp.status != 200:
             raise ProtocolError(
                 host + handler,
-                errcode, errmsg,
-                headers
+                resp.status, resp.reason,
+                resp.getheaders()
                 )
 
         self.verbose = verbose