[Python-checkins] r74098 - in python/trunk/Lib: SimpleXMLRPCServer.py test/test_xmlrpc.py xmlrpclib.py

kristjan.jonsson python-checkins at python.org
Mon Jul 20 00:14:01 CEST 2009


Author: kristjan.jonsson
Date: Mon Jul 20 00:14:00 2009
New Revision: 74098

Log:
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/trunk/Lib/SimpleXMLRPCServer.py
   python/trunk/Lib/test/test_xmlrpc.py
   python/trunk/Lib/xmlrpclib.py

Modified: python/trunk/Lib/SimpleXMLRPCServer.py
==============================================================================
--- python/trunk/Lib/SimpleXMLRPCServer.py	(original)
+++ python/trunk/Lib/SimpleXMLRPCServer.py	Mon Jul 20 00:14:00 2009
@@ -521,8 +521,11 @@
                 if len(response) > self.encode_threshold:
                     q = self.accept_encodings().get("gzip", 0)
                     if q:
-                        response = xmlrpclib.gzip_encode(response)
-                        self.send_header("Content-Encoding", "gzip")
+                        try:
+                            response = xmlrpclib.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)
@@ -535,6 +538,8 @@
         if encoding == "gzip":
             try:
                 return xmlrpclib.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:

Modified: python/trunk/Lib/test/test_xmlrpc.py
==============================================================================
--- python/trunk/Lib/test/test_xmlrpc.py	(original)
+++ python/trunk/Lib/test/test_xmlrpc.py	Mon Jul 20 00:14:00 2009
@@ -918,7 +918,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/trunk/Lib/xmlrpclib.py
==============================================================================
--- python/trunk/Lib/xmlrpclib.py	(original)
+++ python/trunk/Lib/xmlrpclib.py	Mon Jul 20 00:14:00 2009
@@ -139,10 +139,13 @@
 import re, string, time, operator
 
 from types import *
-import gzip
 import socket
 import errno
 import httplib
+try:
+    import gzip
+except ImportError:
+    gzip = None #python can be built without zlib/gzip support
 
 # --------------------------------------------------------------------
 # Internal stuff
@@ -1146,6 +1149,8 @@
 
     Encode data using the gzip content encoding as described in RFC 1952
     """
+    if not gzip:
+        raise NotImplementedError
     f = StringIO.StringIO()
     gzf = gzip.GzipFile(mode="wb", fileobj=f, compresslevel=1)
     gzf.write(data)
@@ -1168,6 +1173,8 @@
 
     Decode data using the gzip content encoding as described in RFC 1952
     """
+    if not gzip:
+        raise NotImplementedError
     f = StringIO.StringIO(data)
     gzf = gzip.GzipFile(mode="rb", fileobj=f)
     try:
@@ -1192,6 +1199,8 @@
     def __init__(self, response):
         #response doesn't support tell() and read(), required by
         #GzipFile
+        if not gzip:
+            raise NotImplementedError
         self.stringio = StringIO.StringIO(response.read())
         gzip.GzipFile.__init__(self, mode="rb", fileobj=self.stringio)
 
@@ -1378,7 +1387,7 @@
     # @param request_body XML-RPC body.
 
     def send_request(self, connection, handler, request_body):
-        if (self.accept_gzip_encoding):
+        if (self.accept_gzip_encoding and gzip):
             connection.putrequest("POST", handler, skip_accept_encoding=True)
             connection.putheader("Accept-Encoding", "gzip")
         else:
@@ -1421,7 +1430,8 @@
 
         #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)
 


More information about the Python-checkins mailing list