From jjlee at codespeak.net Wed Jul 5 22:18:03 2006
From: jjlee at codespeak.net (jjlee at codespeak.net)
Date: Wed, 5 Jul 2006 22:18:03 +0200 (CEST)
Subject: [wwwsearch-commits] r29654 - wwwsearch/mechanize/trunk/mechanize
Message-ID: <20060705201803.27FD1100A7@code0.codespeak.net>
Author: jjlee
Date: Wed Jul 5 22:18:02 2006
New Revision: 29654
Added:
wwwsearch/mechanize/trunk/mechanize/_seek.py
Log:
Add missing module _seek.py
Added: wwwsearch/mechanize/trunk/mechanize/_seek.py
==============================================================================
--- (empty file)
+++ wwwsearch/mechanize/trunk/mechanize/_seek.py Wed Jul 5 22:18:02 2006
@@ -0,0 +1,11 @@
+from urllib2 import BaseHandler
+from _response import response_seek_wrapper
+
+
+class SeekableProcessor(BaseHandler):
+ """Make responses seekable."""
+
+ def any_response(self, request, response):
+ if not hasattr(response, "seek"):
+ return response_seek_wrapper(response)
+ return response
From jjlee at codespeak.net Wed Jul 5 22:18:32 2006
From: jjlee at codespeak.net (jjlee at codespeak.net)
Date: Wed, 5 Jul 2006 22:18:32 +0200 (CEST)
Subject: [wwwsearch-commits] r29655 - wwwsearch/mechanize/trunk
Message-ID: <20060705201832.420C8100AC@code0.codespeak.net>
Author: jjlee
Date: Wed Jul 5 22:18:31 2006
New Revision: 29655
Modified:
wwwsearch/mechanize/trunk/0.1-changes.txt
Log:
Explain how to get a sequence from iterable return values
Modified: wwwsearch/mechanize/trunk/0.1-changes.txt
==============================================================================
--- wwwsearch/mechanize/trunk/0.1-changes.txt (original)
+++ wwwsearch/mechanize/trunk/0.1-changes.txt Wed Jul 5 22:18:31 2006
@@ -31,7 +31,7 @@
- .forms() and .links() now both return iterators (in fact, generators),
not sequences (not really an interface change: these were always
documented to return iterables, but it will no doubt break some client
- code).
+ code). Use e.g. list(browser.forms()) if you want a list.
- .links no longer raises LinkNotFoundError (was accidental -- only
.click_link() / .find_link() should raise this).
From jjlee at codespeak.net Wed Jul 5 22:54:42 2006
From: jjlee at codespeak.net (jjlee at codespeak.net)
Date: Wed, 5 Jul 2006 22:54:42 +0200 (CEST)
Subject: [wwwsearch-commits] r29657 - in wwwsearch/mechanize/trunk:
mechanize test
Message-ID: <20060705205442.6BE44100AF@code0.codespeak.net>
Author: jjlee
Date: Wed Jul 5 22:54:41 2006
New Revision: 29657
Modified:
wwwsearch/mechanize/trunk/mechanize/_http.py
wwwsearch/mechanize/trunk/test/test_urllib2.py
Log:
Fix UnboundLocalError for Refresh with URL but no '=' (titus)
Modified: wwwsearch/mechanize/trunk/mechanize/_http.py
==============================================================================
--- wwwsearch/mechanize/trunk/mechanize/_http.py (original)
+++ wwwsearch/mechanize/trunk/mechanize/_http.py Wed Jul 5 22:54:41 2006
@@ -433,9 +433,10 @@
if ii != -1:
pause, newurl_spec = float(refresh[:ii]), refresh[ii+1:]
jj = newurl_spec.find("=")
+ key = None
if jj != -1:
key, newurl = newurl_spec[:jj], newurl_spec[jj+1:]
- if key.strip().lower() != "url":
+ if key is None or key.strip().lower() != "url":
debug("bad Refresh header: %r" % refresh)
return response
else:
Modified: wwwsearch/mechanize/trunk/test/test_urllib2.py
==============================================================================
--- wwwsearch/mechanize/trunk/test/test_urllib2.py (original)
+++ wwwsearch/mechanize/trunk/test/test_urllib2.py Wed Jul 5 22:54:41 2006
@@ -778,14 +778,20 @@
# XXX test processor constructor optional args
h = HTTPRefreshProcessor(max_time=None, honor_time=False)
- for val in ['0; url="http://example.com/foo/"', "2"]:
+ for val, valid in [
+ ('0; url="http://example.com/foo/"', True),
+ ("2", True),
+ # in the past, this failed with UnboundLocalError
+ ('0; "http://example.com/foo/"', False),
+ ]:
o = h.parent = MockOpener()
req = Request("http://example.com/")
headers = MockHeaders({"refresh": val})
r = MockResponse(200, "OK", headers, "")
newr = h.http_response(req, r)
- self.assertEqual(o.proto, "http")
- self.assertEqual(o.args, (req, r, "refresh", "OK", headers))
+ if valid:
+ self.assertEqual(o.proto, "http")
+ self.assertEqual(o.args, (req, r, "refresh", "OK", headers))
def test_redirect(self):
from_url = "http://example.com/a.html"
From jjlee at codespeak.net Sun Jul 9 14:35:54 2006
From: jjlee at codespeak.net (jjlee at codespeak.net)
Date: Sun, 9 Jul 2006 14:35:54 +0200 (CEST)
Subject: [wwwsearch-commits] r29894 - wwwsearch/mechanize/trunk
Message-ID: <20060709123554.8C1FA1007B@code0.codespeak.net>
Author: jjlee
Date: Sun Jul 9 14:35:52 2006
New Revision: 29894
Modified:
wwwsearch/mechanize/trunk/README.html.in
Log:
HTML fixes
Modified: wwwsearch/mechanize/trunk/README.html.in
==============================================================================
--- wwwsearch/mechanize/trunk/README.html.in (original)
+++ wwwsearch/mechanize/trunk/README.html.in Sun Jul 9 14:35:52 2006
@@ -171,7 +171,7 @@
""")}
-so anything you would normally import from urllib2 can
+
so anything you would normally import from urllib2 can
(and should, by preference, to insulate you from future changes) be
imported from mechanize instead. In many cases if you import an
object from mechanize it will be the very same object you would get if
@@ -333,7 +333,8 @@
EncodingFinder public, I guess (but probably
improve it first). (For example: support Mark Pilgrim's universal
encoding detector?)
- clean_url(): test browser behaviour. I think
From jjlee at codespeak.net Sun Jul 9 14:37:52 2006
From: jjlee at codespeak.net (jjlee at codespeak.net)
Date: Sun, 9 Jul 2006 14:37:52 +0200 (CEST)
Subject: [wwwsearch-commits] r29895 - wwwsearch/mechanize/trunk/mechanize
Message-ID: <20060709123752.1AE361007B@code0.codespeak.net>
Author: jjlee
Date: Sun Jul 9 14:37:50 2006
New Revision: 29895
Modified:
wwwsearch/mechanize/trunk/mechanize/_html.py
Log:
Simplify CachingGeneratorFunction implementation a bit
Modified: wwwsearch/mechanize/trunk/mechanize/_html.py
==============================================================================
--- wwwsearch/mechanize/trunk/mechanize/_html.py (original)
+++ wwwsearch/mechanize/trunk/mechanize/_html.py Sun Jul 9 14:37:50 2006
@@ -40,19 +40,15 @@
def __init__(self, iterable):
self._cache = []
-
# wrap iterable to make it non-restartable (otherwise, repeated
# __call__ would give incorrect results)
- def make_gen():
- for item in iterable:
- yield item
- self._generator = make_gen()
+ self._iterator = iter(iterable)
def __call__(self):
cache = self._cache
for item in cache:
yield item
- for item in self._generator:
+ for item in self._iterator:
cache.append(item)
yield item
From jjlee at codespeak.net Sun Jul 9 15:35:44 2006
From: jjlee at codespeak.net (jjlee at codespeak.net)
Date: Sun, 9 Jul 2006 15:35:44 +0200 (CEST)
Subject: [wwwsearch-commits] r29900 - wwwsearch/mechanize/trunk/mechanize
Message-ID: <20060709133544.D93BD1007E@code0.codespeak.net>
Author: jjlee
Date: Sun Jul 9 15:35:44 2006
New Revision: 29900
Modified:
wwwsearch/mechanize/trunk/mechanize/_html.py
Log:
Fix RobustTitleFactory (titus)
Modified: wwwsearch/mechanize/trunk/mechanize/_html.py
==============================================================================
--- wwwsearch/mechanize/trunk/mechanize/_html.py (original)
+++ wwwsearch/mechanize/trunk/mechanize/_html.py Sun Jul 9 15:35:44 2006
@@ -413,7 +413,7 @@
self._bs = soup
self._encoding = encoding
- def title(soup):
+ def title(self):
import BeautifulSoup
title = self._bs.first("title")
if title == BeautifulSoup.Null:
From jjlee at codespeak.net Wed Jul 12 00:04:18 2006
From: jjlee at codespeak.net (jjlee at codespeak.net)
Date: Wed, 12 Jul 2006 00:04:18 +0200 (CEST)
Subject: [wwwsearch-commits] r29964 - wwwsearch/mechanize/trunk
Message-ID: <20060711220418.499B21007E@code0.codespeak.net>
Author: jjlee
Date: Wed Jul 12 00:04:17 2006
New Revision: 29964
Modified:
wwwsearch/mechanize/trunk/README.html.in
wwwsearch/mechanize/trunk/setup.py
Log:
Declare a setuptools dependency on BeautifulSoup version 2
Modified: wwwsearch/mechanize/trunk/README.html.in
==============================================================================
--- wwwsearch/mechanize/trunk/README.html.in (original)
+++ wwwsearch/mechanize/trunk/README.html.in Wed Jul 12 00:04:17 2006
@@ -296,8 +296,6 @@
integrate docstring and non-docstring docs.
2.3 or above.
mechanize depends on ClientForm. +
mechanize depends on ClientForm. The + setup.py script also declares a dependency on BeautifulSoup, + but there is no true dependency: the declaration is there only to avoid + confusing people who don't realise that mechanize is not compatible with + BeautifulSoup version 3 -- only BeautifulSoup version 2 is currently + supported. A future version of mechanize will support BeautifulSoup + version 3.