[wwwsearch-commits] r36071 - in wwwsearch/mechanize/trunk: mechanize test
jjlee at codespeak.net
jjlee at codespeak.net
Sun Dec 31 02:25:03 CET 2006
Author: jjlee
Date: Sun Dec 31 02:25:01 2006
New Revision: 36071
Modified:
wwwsearch/mechanize/trunk/mechanize/_mechanize.py
wwwsearch/mechanize/trunk/test/test_browser.doctest
Log:
Fix .set_response() to close current response first. Add a new method .visit_response() .
Modified: wwwsearch/mechanize/trunk/mechanize/_mechanize.py
==============================================================================
--- wwwsearch/mechanize/trunk/mechanize/_mechanize.py (original)
+++ wwwsearch/mechanize/trunk/mechanize/_mechanize.py Sun Dec 31 02:25:01 2006
@@ -114,7 +114,7 @@
self.request_class = request_class
self.request = None
- self.set_response(None)
+ self._set_response(None, False)
# do this last to avoid __getattr__ problems
UserAgentBase.__init__(self)
@@ -175,14 +175,7 @@
visit = True
if visit:
- if self._response is not None:
- self._response.close()
- if self.request is not None and update_history:
- self._history.add(self.request, self._response)
- self._response = None
- # we want self.request to be assigned even if UserAgentBase.open
- # fails
- self.request = request
+ self._visit_request(request, update_history)
success = True
try:
@@ -205,7 +198,7 @@
## raise
if visit:
- self.set_response(response)
+ self._set_response(response, False)
response = copy.copy(self._response)
elif response is not None:
response = _upgrade.upgrade_response(response)
@@ -239,7 +232,12 @@
"""Replace current response with (a copy of) response.
response may be None.
+
+ This is intended mostly for HTML-preprocessing.
"""
+ self._set_response(response, True)
+
+ def _set_response(self, response, close_current):
# sanity check, necessary but far from sufficient
if not (response is None or
(hasattr(response, "info") and hasattr(response, "geturl") and
@@ -251,9 +249,32 @@
self.form = None
if response is not None:
response = _upgrade.upgrade_response(response)
+ if close_current and self._response is not None:
+ self._response.close()
self._response = response
self._factory.set_response(response)
+ def visit_response(self, response, request=None):
+ """Visit the response, as if it had been .open()ed.
+
+ Unlike .set_response(), this updates history rather than replacing the
+ current response.
+ """
+ if request is None:
+ request = _request.Request(response.geturl())
+ self._visit_request(request, True)
+ self._set_response(response, False)
+
+ def _visit_request(self, request, update_history):
+ if self._response is not None:
+ self._response.close()
+ if self.request is not None and update_history:
+ self._history.add(self.request, self._response)
+ self._response = None
+ # we want self.request to be assigned even if UserAgentBase.open
+ # fails
+ self.request = request
+
def geturl(self):
"""Get URL of current document."""
if self._response is None:
@@ -566,9 +587,6 @@
".select_form()?)" % (self.__class__, name))
return getattr(form, name)
-#---------------------------------------------------
-# Private methods.
-
def _filter_links(self, links,
text=None, text_regex=None,
name=None, name_regex=None,
Modified: wwwsearch/mechanize/trunk/test/test_browser.doctest
==============================================================================
--- wwwsearch/mechanize/trunk/test/test_browser.doctest (original)
+++ wwwsearch/mechanize/trunk/test/test_browser.doctest Sun Dec 31 02:25:01 2006
@@ -7,7 +7,7 @@
>>> class TestHttpHandler(mechanize.BaseHandler):
... def http_open(self, request):
-... return test_response()
+... return test_response(url=request.get_full_url())
>>> class TestHttpBrowser(TestBrowser2):
... handler_classes = TestBrowser2.handler_classes.copy()
... handler_classes["http"] = TestHttpHandler
@@ -25,6 +25,29 @@
>>> print response_impl(r)
eofresponse
+So should .set_response()
+
+>>> br.set_response(test_response())
+>>> print response_impl(r2)
+eofresponse
+
+
+.visit_response() works very similarly to .open()
+
+>>> br = TestHttpBrowser()
+>>> r = br.open("http://example.com")
+>>> r2 = test_response(url="http://example.com/2")
+>>> print response_impl(r2)
+StringI
+>>> br.visit_response(r2)
+>>> print response_impl(r)
+eofresponse
+>>> br.geturl() == br.request.get_full_url() == "http://example.com/2"
+True
+>>> junk = br.back()
+>>> br.geturl() == br.request.get_full_url() == "http://example.com"
+True
+
Warn early about some mistakes setting a response object
More information about the wwwsearch-commits
mailing list