[wwwsearch-commits] r21732 - in wwwsearch/mechanize/trunk: .
mechanize
jjlee at codespeak.net
jjlee at codespeak.net
Fri Jan 6 02:06:34 CET 2006
Author: jjlee
Date: Fri Jan 6 02:06:33 2006
New Revision: 21732
Modified:
wwwsearch/mechanize/trunk/mechanize/_mechanize.py
wwwsearch/mechanize/trunk/test.py
Log:
Pluggable History (probably will change soon); Remove idiotic test assertions that Browser should work even after .close()
Modified: wwwsearch/mechanize/trunk/mechanize/_mechanize.py
==============================================================================
--- wwwsearch/mechanize/trunk/mechanize/_mechanize.py (original)
+++ wwwsearch/mechanize/trunk/mechanize/_mechanize.py Fri Jan 6 02:06:33 2006
@@ -439,6 +439,28 @@
)
+class History:
+ def __init__(self):
+ self._history = [] # LIFO
+ def add(self, request, response):
+ self._history.append((request, response))
+ def back(self, n, _response):
+ response = _response # XXX move Browser._response into this class?
+ while n > 0 or response is None:
+ try:
+ request, response = self._history.pop()
+ except IndexError:
+ raise BrowserStateError("already at start of history")
+ n -= 1
+ return request, response
+ def clear(self):
+ del self._history[:]
+ def close(self):
+ for request, response in self._history:
+ response.close()
+ del self._history[:]
+
+
if sys.version_info[:2] >= (2, 4):
from ClientCookie._Opener import OpenerMixin
else:
@@ -464,6 +486,7 @@
def __init__(self, default_encoding="latin-1",
factory=None,
+ history=None,
request_class=None,
forms_factory=None, # deprecated
links_factory=None, # deprecated
@@ -491,7 +514,9 @@
"""
self.default_encoding = default_encoding
- self._history = [] # LIFO
+ if history is None:
+ history = History()
+ self._history = history
self.request = self._response = None
self.form = None
self._forms = None
@@ -521,7 +546,8 @@
if self._response is not None:
self._response.close()
UserAgent.close(self)
- del self._history[:]
+ self._history.close()
+ self._history = None
self._forms = self._title = self._links = None
self.request = self._response = None
@@ -545,7 +571,7 @@
url = urlparse.urljoin(self._response.geturl(), url)
if self.request is not None and update_history:
- self._history.append((self.request, self._response))
+ self._history.add(self.request, self._response)
self._response = None
# we want self.request to be assigned even if UserAgent.open fails
self.request = self._request(url, data)
@@ -591,15 +617,13 @@
"""
if self._response is not None:
self._response.close()
- while n > 0 or self._response is None:
- try:
- self.request, self._response = self._history.pop()
- except IndexError:
- raise BrowserStateError("already at start of history")
- n -= 1
+ self.request, self._response = self._history.back(n, self._response)
self._parse_html(self._response)
return self._response
+ def clear_history(self):
+ self._history.clear()
+
def links(self, **kwds):
"""Return iterable over links (mechanize.Link objects)."""
if not self.viewing_html():
Modified: wwwsearch/mechanize/trunk/test.py
==============================================================================
--- wwwsearch/mechanize/trunk/test.py (original)
+++ wwwsearch/mechanize/trunk/test.py Fri Jan 6 02:06:33 2006
@@ -228,16 +228,12 @@
r6 = b.open("spam")
self.assertEquals(b.geturl(), "http://example.com/spam")
r7 = b.open("/spam")
+ self.assert_(same_response(b.response(), r7))
self.assertEquals(b.geturl(), "http://example.com/spam")
self.assert_(same_response(b.back(2), r5))
self.assertEquals(b.geturl(), "http://example.com/")
self.assertRaises(mechanize.BrowserStateError, b.back, 2)
- b.close() # history should work after close
- r8 = b.open("http://example.com/")
- r9 = b.open("http://example.com/foo")
- self.assert_(same_response(b.back(), r8))
-
- self.assert_(same_response(b.response(), r8))
+ r8 = b.open("/spam")
# even if we get a URLError, history and .response() should still get updated
error = urllib2.HTTPError("http://example.com/bad", 503, "Oops",
@@ -247,6 +243,9 @@
self.assertEqual(b.response().geturl(), error.geturl())
self.assert_(same_response(b.back(), r8))
+ b.close()
+ # XXX assert BrowserStateError
+
def test_viewing_html(self):
# XXX not testing multiple Content-Type headers
import mechanize
More information about the wwwsearch-commits
mailing list