[wwwsearch-commits] r44119 - in wwwsearch/mechanize/trunk: mechanize test
jjlee at codespeak.net
jjlee at codespeak.net
Sat Jun 9 18:49:18 CEST 2007
Author: jjlee
Date: Sat Jun 9 18:49:18 2007
New Revision: 44119
Modified:
wwwsearch/mechanize/trunk/mechanize/_mechanize.py
wwwsearch/mechanize/trunk/test/test_browser.doctest
wwwsearch/mechanize/trunk/test/test_browser.py
Log:
Fix selection of global form using .select_form() (titus at idyll.org)
Modified: wwwsearch/mechanize/trunk/mechanize/_mechanize.py
==============================================================================
--- wwwsearch/mechanize/trunk/mechanize/_mechanize.py (original)
+++ wwwsearch/mechanize/trunk/mechanize/_mechanize.py Sat Jun 9 18:49:18 2007
@@ -493,7 +493,10 @@
nr, if supplied, is the sequence number of the form (where 0 is the
first). Note that control 0 is the first form matching all the other
arguments (if supplied); it is not necessarily the first control in the
- form.
+ form. The "global form" (consisting of all form controls not contained
+ in any FORM element) is considered not to be part of this sequence and
+ to have no name, so will not be matched unless both name and nr are
+ None.
"""
if not self.viewing_html():
@@ -502,6 +505,12 @@
raise ValueError(
"at least one argument must be supplied to specify form")
+ global_form = self._factory.global_form
+ if nr is None and name is None and \
+ predicate is not None and predicate(global_form):
+ self.form = global_form
+ return
+
orig_nr = nr
for form in self.forms():
if name is not None and name != form.name:
Modified: wwwsearch/mechanize/trunk/test/test_browser.doctest
==============================================================================
--- wwwsearch/mechanize/trunk/test/test_browser.doctest (original)
+++ wwwsearch/mechanize/trunk/test/test_browser.doctest Sat Jun 9 18:49:18 2007
@@ -252,3 +252,28 @@
1
>>> iter(br.forms()).next().find_control(nr=0).name
'b'
+
+
+
+.select_form() works with the global form
+
+>>> import ClientForm
+>>> from mechanize._response import test_html_response
+>>> br = TestBrowser2()
+>>> br.visit_response(test_html_response("""\
+... <html><head><title></title></head><body>
+... <input type="text" name="a" value="b"></input>
+... <form>
+... <input type="text" name="p" value="q"></input>
+... </form>
+... </body></html>"""))
+>>> def has_a(form):
+... try:
+... form.find_control(name="a")
+... except ClientForm.ControlNotFoundError:
+... return False
+... else:
+... return True
+>>> br.select_form(predicate=has_a)
+>>> br.form.find_control(name="a").value
+'b'
Modified: wwwsearch/mechanize/trunk/test/test_browser.py
==============================================================================
--- wwwsearch/mechanize/trunk/test/test_browser.py (original)
+++ wwwsearch/mechanize/trunk/test/test_browser.py Sat Jun 9 18:49:18 2007
@@ -394,7 +394,7 @@
self.assertRaises(mechanize.FormNotFoundError, b.select_form,
name="blah")
self.assertRaises(mechanize.FormNotFoundError, b.select_form,
- predicate=lambda x: True)
+ predicate=lambda form: form is not b.global_form())
self.assertRaises(mechanize.LinkNotFoundError, b.find_link,
name="blah")
self.assertRaises(mechanize.LinkNotFoundError, b.find_link,
More information about the wwwsearch-commits
mailing list