[Python-checkins] r74099 - in python/branches/py3k/Lib: test/test_xmlrpc.py xmlrpc/client.py xmlrpc/server.py

kristjan.jonsson python-checkins at python.org
Mon Jul 20 00:29:24 CEST 2009


Author: kristjan.jonsson
Date: Mon Jul 20 00:29:24 2009
New Revision: 74099

Log:
porting revision 74098 from trunk:
http://bugs.python.org/issue6499
zlib/gzip may not be present for all builds.  Make xmlrpclib gracefully not supporg gzip encoding in this case


Modified:
   python/branches/py3k/Lib/test/test_xmlrpc.py
   python/branches/py3k/Lib/xmlrpc/client.py
   python/branches/py3k/Lib/xmlrpc/server.py

Modified: python/branches/py3k/Lib/test/test_xmlrpc.py
==============================================================================
--- python/branches/py3k/Lib/test/test_xmlrpc.py	(original)
+++ python/branches/py3k/Lib/test/test_xmlrpc.py	Mon Jul 20 00:29:24 2009
@@ -799,7 +799,11 @@
     xmlrpc_tests.append(SimpleServerTestCase)
     xmlrpc_tests.append(KeepaliveServerTestCase1)
     xmlrpc_tests.append(KeepaliveServerTestCase2)
-    xmlrpc_tests.append(GzipServerTestCase)
+    try:
+        import gzip
+        xmlrpc_tests.append(GzipServerTestCase)
+    except ImportError:
+        pass #gzip not supported in this build
     xmlrpc_tests.append(ServerProxyTestCase)
     xmlrpc_tests.append(FailingServerTestCase)
     xmlrpc_tests.append(CGIHandlerTestCase)

Modified: python/branches/py3k/Lib/xmlrpc/client.py
==============================================================================
--- python/branches/py3k/Lib/xmlrpc/client.py	(original)
+++ python/branches/py3k/Lib/xmlrpc/client.py	Mon Jul 20 00:29:24 2009
@@ -136,10 +136,13 @@
 import re, time, operator
 import http.client
 from xml.parsers import expat
-import gzip
 import socket
 import errno
 from io import BytesIO
+try:
+    import gzip
+except ImportError:
+    gzip = None #python can be built without zlib/gzip support
 
 # --------------------------------------------------------------------
 # Internal stuff
@@ -1030,6 +1033,8 @@
 
     Encode data using the gzip content encoding as described in RFC 1952
     """
+    if not gzip:
+        raise NotImplementedError
     f = BytesIO()
     gzf = gzip.GzipFile(mode="wb", fileobj=f, compresslevel=1)
     gzf.write(data)
@@ -1052,6 +1057,8 @@
 
     Decode data using the gzip content encoding as described in RFC 1952
     """
+    if not gzip:
+        raise NotImplementedError
     f = BytesIO(data)
     gzf = gzip.GzipFile(mode="rb", fileobj=f)
     try:
@@ -1076,6 +1083,8 @@
     def __init__(self, response):
         #response doesn't support tell() and read(), required by
         #GzipFile
+        if not gzip:
+            raise NotImplementedError
         self.io = BytesIO(response.read())
         gzip.GzipFile.__init__(self, mode="rb", fileobj=self.io)
 
@@ -1253,7 +1262,7 @@
         headers = self._extra_headers[:]
         if debug:
             connection.set_debuglevel(1)
-        if self.accept_gzip_encoding:
+        if self.accept_gzip_encoding and gzip:
             connection.putrequest("POST", handler, skip_accept_encoding=True)
             headers.append(("Accept-Encoding", "gzip"))
         else:
@@ -1285,7 +1294,8 @@
     def send_content(self, connection, request_body):
         #optionally encode the request
         if (self.encode_threshold is not None and
-            self.encode_threshold < len(request_body)):
+            self.encode_threshold < len(request_body) and
+            gzip):
             connection.putheader("Content-Encoding", "gzip")
             request_body = gzip_encode(request_body)
 

Modified: python/branches/py3k/Lib/xmlrpc/server.py
==============================================================================
--- python/branches/py3k/Lib/xmlrpc/server.py	(original)
+++ python/branches/py3k/Lib/xmlrpc/server.py	Mon Jul 20 00:29:24 2009
@@ -509,8 +509,11 @@
                 if len(response) > self.encode_threshold:
                     q = self.accept_encodings().get("gzip", 0)
                     if q:
-                        response = gzip_encode(response)
-                        self.send_header("Content-Encoding", "gzip")
+                        try:
+                            response = gzip_encode(response)
+                            self.send_header("Content-Encoding", "gzip")
+                        except NotImplementedError:
+                            pass
             self.send_header("Content-length", str(len(response)))
             self.end_headers()
             self.wfile.write(response)
@@ -523,6 +526,8 @@
         if encoding == "gzip":
             try:
                 return gzip_decode(data)
+            except NotImplementedError:
+                self.send_response(501, "encoding %r not supported" % encoding)
             except ValueError:
                 self.send_response(400, "error decoding gzip content")
         else:


More information about the Python-checkins mailing list