This file is indexed.

/usr/lib/python2.7/dist-packages/zope/testing/formparser.txt is in python-zope.testing 4.1.2-0ubuntu7.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
Parsing HTML Forms
==================

Sometimes in functional tests, information from a generated form must
be extracted in order to re-submit it as part of a subsequent request.
The `zope.testing.formparser` module can be used for this purpose.

NOTE
   formparser doesn't support Python 3.

The scanner is implemented using the `FormParser` class.  The
constructor arguments are the page data containing the form and
(optionally) the URL from which the page was retrieved:

  >>> import zope.testing.formparser

  >>> page_text = '''\
  ... <html><body>
  ...   <form name="form1" action="/cgi-bin/foobar.py" method="POST">
  ...     <input type="hidden" name="f1" value="today" />
  ...     <input type="submit" name="do-it-now" value="Go for it!" />
  ...     <input type="IMAGE" name="not-really" value="Don't."
  ...            src="dont.png" />
  ...     <select name="pick-two" size="3" multiple>
  ...       <option value="one" selected>First</option>
  ...       <option value="two" label="Second">Another</option>
  ...       <optgroup>
  ...         <option value="three">Third</option>
  ...         <option selected="selected">Fourth</option>
  ...       </optgroup>
  ...     </select>
  ...   </form>
  ...
  ...   Just for fun, a second form, after specifying a base:
  ...   <base href="http://www.example.com/base/" />
  ...   <form action = 'sproing/sprung.html' enctype="multipart/form">
  ...     <textarea name="sometext" rows="5">Some text.</textarea>
  ...     <input type="Image" name="action" value="Do something."
  ...            src="else.png" />
  ...     <input type="text" value="" name="multi" size="2" />
  ...     <input type="text" value="" name="multi" size="3" />
  ...   </form>
  ... </body></html>
  ... '''

  >>> parser = zope.testing.formparser.FormParser(page_text)
  >>> forms = parser.parse()

  >>> len(forms)
  2
  >>> forms.form1 is forms[0]
  True
  >>> forms.form1 is forms[1]
  False

More often, the `parse()` convenience function is all that's needed:

  >>> forms = zope.testing.formparser.parse(
  ...     page_text, "http://cgi.example.com/somewhere/form.html")

  >>> len(forms)
  2
  >>> forms.form1 is forms[0]
  True
  >>> forms.form1 is forms[1]
  False

Once we have the form we're interested in, we can check form
attributes and individual field values:

  >>> form = forms.form1
  >>> form.enctype
  'application/x-www-form-urlencoded'
  >>> form.method
  'post'

  >>> keys = form.keys()
  >>> keys.sort()
  >>> keys
  ['do-it-now', 'f1', 'not-really', 'pick-two']

  >>> not_really = form["not-really"]
  >>> not_really.type
  'image'
  >>> not_really.value
  "Don't."
  >>> not_really.readonly
  False
  >>> not_really.disabled
  False

Note that relative URLs are converted to absolute URLs based on the
``<base>`` element (if present) or using the base passed in to the
constructor.

  >>> form.action
  'http://cgi.example.com/cgi-bin/foobar.py'
  >>> not_really.src
  'http://cgi.example.com/somewhere/dont.png'

  >>> forms[1].action
  'http://www.example.com/base/sproing/sprung.html'
  >>> forms[1]["action"].src
  'http://www.example.com/base/else.png'

Fields which are repeated are reported as lists of objects that
represent each instance of the field::

  >>> field = forms[1]["multi"]
  >>> isinstance(field, list)
  True
  >>> [o.value for o in field]
  ['', '']
  >>> [o.size for o in field]
  [2, 3]

The ``<textarea>`` element provides some additional attributes:

  >>> ta = forms[1]["sometext"]
  >>> print ta.rows
  5
  >>> print ta.cols
  None
  >>> ta.value
  'Some text.'

The ``<select>`` element provides access to the options as well:

  >>> select = form["pick-two"]
  >>> select.multiple
  True
  >>> select.size
  3
  >>> select.type
  'select'
  >>> select.value
  ['one', 'Fourth']

  >>> options = select.options
  >>> len(options)
  4
  >>> [opt.label for opt in options]
  ['First', 'Second', 'Third', 'Fourth']
  >>> [opt.value for opt in options]
  ['one', 'two', 'three', 'Fourth']