[wwwsearch-commits] r21978 - wwwsearch/ClientCookie/trunk/ClientCookie

jjlee at codespeak.net jjlee at codespeak.net
Wed Jan 11 21:33:03 CET 2006


Author: jjlee
Date: Wed Jan 11 21:33:02 2006
New Revision: 21978

Modified:
   wwwsearch/ClientCookie/trunk/ClientCookie/_Util.py
Log:
Fixes to response_seek_wrapper (thanks Moof)

Modified: wwwsearch/ClientCookie/trunk/ClientCookie/_Util.py
==============================================================================
--- wwwsearch/ClientCookie/trunk/ClientCookie/_Util.py	(original)
+++ wwwsearch/ClientCookie/trunk/ClientCookie/_Util.py	Wed Jan 11 21:33:02 2006
@@ -13,7 +13,7 @@
     True = 1
     False = 0
 
-import re, string, time
+import re, string, time, copy
 from types import TupleType
 from cStringIO import StringIO
 
@@ -554,12 +554,8 @@
     # file-like object that always claims to be at end-of-file...
     def read(self, size=-1): return ""
     def readline(self, size=-1): return ""
-    # ...and also supports these response methods
-    def info(self):
-        return self.headers
-    def geturl(self):
-        return self.url
-
+    def __iter__(self): return self
+    def next(self): return ""
 
 class response_seek_wrapper(seek_wrapper):
     """Avoids unnecessarily clobbering urllib.addinfourl methods on .close().
@@ -576,32 +572,50 @@
     .__iter__()
     .next()
 
-    and the following attributes are supported.
+    and the following attributes are supported if present (i.e. in Python 2.4
+    or newer):
 
     .code
     .msg
 
-    Also supports pickling (but the stdlib does something to prevent it, IIRC).
+    Also supports pickling (but the stdlib currently does something to prevent
+    it: http://python.org/sf/1144636).
 
     """
 
     def __init__(self, wrapped):
         seek_wrapper.__init__(self, wrapped)
-        self.msg = wrapped.msg
-        self.code = wrapped.code
+        self.url = self.wrapped.geturl()
+        try:
+            self.msg = wrapped.msg
+            self.code = wrapped.code
+        except AttributeError:
+            pass  # pre-2.4
         self._headers = self.wrapped.info()
 
     def close(self):
-        self.url = self.wrapped.url
-        self.wrapped.close()
-        self.wrapped = eoffile()
+        wrapped = self.wrapped
+        wrapped.close()
+
+        new_wrapped = eoffile()
+        new_wrapped.url = self.url
+        try:
+            new_wrapped.url = self.url
+            new_wrapped.code = self.code
+        except AttributeError:
+            pass  # pre-2.4
+        new_wrapped._headers = self._headers
+        self.wrapped = new_wrapped
 
     def info(self):
         return self._headers
 
+    def geturl(self):
+        return self.url
+
     def __copy__(self):
         cpy = seek_wrapper.__copy__(self)
-        cpy._headers = self.wrapped.info().copy()
+        cpy._headers = copy.copy(self._headers)
         return cpy
 
     def set_data(self, data):


More information about the wwwsearch-commits mailing list