Imported Upstream version 4.6.0
[platform/upstream/python-lxml.git] / doc / html / apidoc / _modules / lxml / html / formfill.html
1
2
3 <!DOCTYPE html>
4 <html class="writer-html5" lang="en" >
5 <head>
6   <meta charset="utf-8">
7   
8   <meta name="viewport" content="width=device-width, initial-scale=1.0">
9   
10   <title>lxml.html.formfill &mdash; lxml  documentation</title>
11   
12
13   
14   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
15   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
16
17   
18   
19   
20   
21
22   
23   <!--[if lt IE 9]>
24     <script src="../../../_static/js/html5shiv.min.js"></script>
25   <![endif]-->
26   
27     
28       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
29         <script src="../../../_static/jquery.js"></script>
30         <script src="../../../_static/underscore.js"></script>
31         <script src="../../../_static/doctools.js"></script>
32         <script src="../../../_static/language_data.js"></script>
33     
34     <script type="text/javascript" src="../../../_static/js/theme.js"></script>
35
36     
37     <link rel="index" title="Index" href="../../../genindex.html" />
38     <link rel="search" title="Search" href="../../../search.html" /> 
39 </head>
40
41 <body class="wy-body-for-nav">
42
43    
44   <div class="wy-grid-for-nav">
45     
46     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
47       <div class="wy-side-scroll">
48         <div class="wy-side-nav-search" >
49           
50
51           
52             <a href="../../../index.html" class="icon icon-home" alt="Documentation Home"> lxml
53           
54
55           
56             
57             <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
58           
59           </a>
60
61           
62             
63             
64               <div class="version">
65                 4.6.0
66               </div>
67             
68           
69
70           
71 <div role="search">
72   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
73     <input type="text" name="q" placeholder="Search docs" />
74     <input type="hidden" name="check_keywords" value="yes" />
75     <input type="hidden" name="area" value="default" />
76   </form>
77 </div>
78
79           
80         </div>
81
82         
83         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
84           
85             
86             
87               
88             
89             
90               <ul>
91 <li class="toctree-l1"><a class="reference internal" href="../../../lxml.html">lxml package</a><ul>
92 <li class="toctree-l2"><a class="reference internal" href="../../../lxml.html.html">lxml.html package</a><ul>
93 <li class="toctree-l3"><a class="reference internal" href="../../../lxml.html.ElementSoup.html">lxml.html.ElementSoup module</a></li>
94 <li class="toctree-l3"><a class="reference internal" href="../../../lxml.html._diffcommand.html">lxml.html._diffcommand module</a></li>
95 <li class="toctree-l3"><a class="reference internal" href="../../../lxml.html._setmixin.html">lxml.html._setmixin module</a></li>
96 <li class="toctree-l3"><a class="reference internal" href="../../../lxml.html.builder.html">lxml.html.builder module</a></li>
97 <li class="toctree-l3"><a class="reference internal" href="../../../lxml.html.clean.html">lxml.html.clean module</a></li>
98 <li class="toctree-l3"><a class="reference internal" href="../../../lxml.html.defs.html">lxml.html.defs module</a></li>
99 <li class="toctree-l3"><a class="reference internal" href="../../../lxml.html.diff.html">lxml.html.diff module</a></li>
100 <li class="toctree-l3"><a class="reference internal" href="../../../lxml.html.formfill.html">lxml.html.formfill module</a></li>
101 <li class="toctree-l3"><a class="reference internal" href="../../../lxml.html.html5parser.html">lxml.html.html5parser module</a></li>
102 <li class="toctree-l3"><a class="reference internal" href="../../../lxml.html.soupparser.html">lxml.html.soupparser module</a></li>
103 </ul>
104 </li>
105 <li class="toctree-l2"><a class="reference internal" href="../../../lxml.isoschematron.html">lxml.isoschematron package</a></li>
106 <li class="toctree-l2"><a class="reference internal" href="../../../lxml.ElementInclude.html">lxml.ElementInclude module</a></li>
107 <li class="toctree-l2"><a class="reference internal" href="../../../lxml._elementpath.html">lxml._elementpath module</a></li>
108 <li class="toctree-l2"><a class="reference internal" href="../../../lxml.builder.html">lxml.builder module</a></li>
109 <li class="toctree-l2"><a class="reference internal" href="../../../lxml.cssselect.html">lxml.cssselect module</a></li>
110 <li class="toctree-l2"><a class="reference internal" href="../../../lxml.doctestcompare.html">lxml.doctestcompare module</a></li>
111 <li class="toctree-l2"><a class="reference internal" href="../../../lxml.etree.html">lxml.etree module</a></li>
112 <li class="toctree-l2"><a class="reference internal" href="../../../lxml.objectify.html">lxml.objectify module</a></li>
113 <li class="toctree-l2"><a class="reference internal" href="../../../lxml.sax.html">lxml.sax module</a></li>
114 </ul>
115 </li>
116 </ul>
117
118             
119           
120         </div>
121         
122       </div>
123     </nav>
124
125     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
126
127       
128       <nav class="wy-nav-top" aria-label="top navigation">
129         
130           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
131           <a href="../../../index.html">lxml</a>
132         
133       </nav>
134
135
136       <div class="wy-nav-content">
137         
138         <div class="rst-content">
139         
140           
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156 <div role="navigation" aria-label="breadcrumbs navigation">
157
158   <ul class="wy-breadcrumbs">
159     
160       <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
161         
162           <li><a href="../../index.html">Module code</a> &raquo;</li>
163         
164           <li><a href="../../lxml.html">lxml</a> &raquo;</li>
165         
166           <li><a href="../html.html">lxml.html</a> &raquo;</li>
167         
168       <li>lxml.html.formfill</li>
169     
170     
171       <li class="wy-breadcrumbs-aside">
172         
173       </li>
174     
175   </ul>
176
177   
178   <hr/>
179 </div>
180           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
181            <div itemprop="articleBody">
182             
183   <h1>Source code for lxml.html.formfill</h1><div class="highlight"><pre>
184 <span></span><span class="kn">from</span> <span class="nn">lxml.etree</span> <span class="kn">import</span> <span class="n">XPath</span><span class="p">,</span> <span class="n">ElementBase</span>
185 <span class="kn">from</span> <span class="nn">lxml.html</span> <span class="kn">import</span> <span class="n">fromstring</span><span class="p">,</span> <span class="n">XHTML_NAMESPACE</span>
186 <span class="kn">from</span> <span class="nn">lxml.html</span> <span class="kn">import</span> <span class="n">_forms_xpath</span><span class="p">,</span> <span class="n">_options_xpath</span><span class="p">,</span> <span class="n">_nons</span><span class="p">,</span> <span class="n">_transform_result</span>
187 <span class="kn">from</span> <span class="nn">lxml.html</span> <span class="kn">import</span> <span class="n">defs</span>
188 <span class="kn">import</span> <span class="nn">copy</span>
189
190 <span class="k">try</span><span class="p">:</span>
191     <span class="n">basestring</span>
192 <span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span>
193     <span class="c1"># Python 3</span>
194     <span class="n">basestring</span> <span class="o">=</span> <span class="nb">str</span>
195
196 <span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;FormNotFound&#39;</span><span class="p">,</span> <span class="s1">&#39;fill_form&#39;</span><span class="p">,</span> <span class="s1">&#39;fill_form_html&#39;</span><span class="p">,</span>
197            <span class="s1">&#39;insert_errors&#39;</span><span class="p">,</span> <span class="s1">&#39;insert_errors_html&#39;</span><span class="p">,</span>
198            <span class="s1">&#39;DefaultErrorCreator&#39;</span><span class="p">]</span>
199
200 <div class="viewcode-block" id="FormNotFound"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill.FormNotFound">[docs]</a><span class="k">class</span> <span class="nc">FormNotFound</span><span class="p">(</span><span class="ne">LookupError</span><span class="p">):</span>
201     <span class="sd">&quot;&quot;&quot;</span>
202 <span class="sd">    Raised when no form can be found</span>
203 <span class="sd">    &quot;&quot;&quot;</span></div>
204
205 <span class="n">_form_name_xpath</span> <span class="o">=</span> <span class="n">XPath</span><span class="p">(</span><span class="s1">&#39;descendant-or-self::form[name=$name]|descendant-or-self::x:form[name=$name]&#39;</span><span class="p">,</span> <span class="n">namespaces</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;x&#39;</span><span class="p">:</span><span class="n">XHTML_NAMESPACE</span><span class="p">})</span>
206 <span class="n">_input_xpath</span> <span class="o">=</span> <span class="n">XPath</span><span class="p">(</span><span class="s1">&#39;|&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s1">&#39;descendant-or-self::&#39;</span><span class="o">+</span><span class="n">_tag</span> <span class="k">for</span> <span class="n">_tag</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;input&#39;</span><span class="p">,</span><span class="s1">&#39;select&#39;</span><span class="p">,</span><span class="s1">&#39;textarea&#39;</span><span class="p">,</span><span class="s1">&#39;x:input&#39;</span><span class="p">,</span><span class="s1">&#39;x:select&#39;</span><span class="p">,</span><span class="s1">&#39;x:textarea&#39;</span><span class="p">)]),</span>
207                                <span class="n">namespaces</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;x&#39;</span><span class="p">:</span><span class="n">XHTML_NAMESPACE</span><span class="p">})</span>
208 <span class="n">_label_for_xpath</span> <span class="o">=</span> <span class="n">XPath</span><span class="p">(</span><span class="s1">&#39;//label[@for=$for_id]|//x:label[@for=$for_id]&#39;</span><span class="p">,</span>
209                                <span class="n">namespaces</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;x&#39;</span><span class="p">:</span><span class="n">XHTML_NAMESPACE</span><span class="p">})</span>
210 <span class="n">_name_xpath</span> <span class="o">=</span> <span class="n">XPath</span><span class="p">(</span><span class="s1">&#39;descendant-or-self::*[@name=$name]&#39;</span><span class="p">)</span>
211
212 <div class="viewcode-block" id="fill_form"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill.fill_form">[docs]</a><span class="k">def</span> <span class="nf">fill_form</span><span class="p">(</span>
213     <span class="n">el</span><span class="p">,</span>
214     <span class="n">values</span><span class="p">,</span>
215     <span class="n">form_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
216     <span class="n">form_index</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
217     <span class="p">):</span>
218     <span class="n">el</span> <span class="o">=</span> <span class="n">_find_form</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">form_id</span><span class="o">=</span><span class="n">form_id</span><span class="p">,</span> <span class="n">form_index</span><span class="o">=</span><span class="n">form_index</span><span class="p">)</span>
219     <span class="n">_fill_form</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span></div>
220
221 <div class="viewcode-block" id="fill_form_html"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill.fill_form_html">[docs]</a><span class="k">def</span> <span class="nf">fill_form_html</span><span class="p">(</span><span class="n">html</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">form_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">form_index</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
222     <span class="n">result_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
223     <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">html</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
224         <span class="n">doc</span> <span class="o">=</span> <span class="n">fromstring</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
225     <span class="k">else</span><span class="p">:</span>
226         <span class="n">doc</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
227     <span class="n">fill_form</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">form_id</span><span class="o">=</span><span class="n">form_id</span><span class="p">,</span> <span class="n">form_index</span><span class="o">=</span><span class="n">form_index</span><span class="p">)</span>
228     <span class="k">return</span> <span class="n">_transform_result</span><span class="p">(</span><span class="n">result_type</span><span class="p">,</span> <span class="n">doc</span><span class="p">)</span></div>
229
230 <div class="viewcode-block" id="_fill_form"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill._fill_form">[docs]</a><span class="k">def</span> <span class="nf">_fill_form</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">values</span><span class="p">):</span>
231     <span class="n">counts</span> <span class="o">=</span> <span class="p">{}</span>
232     <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="s1">&#39;mixed&#39;</span><span class="p">):</span>
233         <span class="c1"># For Paste request parameters</span>
234         <span class="n">values</span> <span class="o">=</span> <span class="n">values</span><span class="o">.</span><span class="n">mixed</span><span class="p">()</span>
235     <span class="n">inputs</span> <span class="o">=</span> <span class="n">_input_xpath</span><span class="p">(</span><span class="n">el</span><span class="p">)</span>
236     <span class="k">for</span> <span class="nb">input</span> <span class="ow">in</span> <span class="n">inputs</span><span class="p">:</span>
237         <span class="n">name</span> <span class="o">=</span> <span class="nb">input</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">)</span>
238         <span class="k">if</span> <span class="ow">not</span> <span class="n">name</span><span class="p">:</span>
239             <span class="k">continue</span>
240         <span class="k">if</span> <span class="n">_takes_multiple</span><span class="p">(</span><span class="nb">input</span><span class="p">):</span>
241             <span class="n">value</span> <span class="o">=</span> <span class="n">values</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="p">[])</span>
242             <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span>
243                 <span class="n">value</span> <span class="o">=</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
244             <span class="n">_fill_multiple</span><span class="p">(</span><span class="nb">input</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
245         <span class="k">elif</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
246             <span class="k">continue</span>
247         <span class="k">else</span><span class="p">:</span>
248             <span class="n">index</span> <span class="o">=</span> <span class="n">counts</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
249             <span class="n">counts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">index</span> <span class="o">+</span> <span class="mi">1</span>
250             <span class="n">value</span> <span class="o">=</span> <span class="n">values</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
251             <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span>
252                 <span class="k">try</span><span class="p">:</span>
253                     <span class="n">value</span> <span class="o">=</span> <span class="n">value</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
254                 <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
255                     <span class="k">continue</span>
256             <span class="k">elif</span> <span class="n">index</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
257                 <span class="k">continue</span>
258             <span class="n">_fill_single</span><span class="p">(</span><span class="nb">input</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span></div>
259
260 <div class="viewcode-block" id="_takes_multiple"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill._takes_multiple">[docs]</a><span class="k">def</span> <span class="nf">_takes_multiple</span><span class="p">(</span><span class="nb">input</span><span class="p">):</span>
261     <span class="k">if</span> <span class="n">_nons</span><span class="p">(</span><span class="nb">input</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;select&#39;</span> <span class="ow">and</span> <span class="nb">input</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;multiple&#39;</span><span class="p">):</span>
262         <span class="c1"># FIXME: multiple=&quot;0&quot;?</span>
263         <span class="k">return</span> <span class="kc">True</span>
264     <span class="nb">type</span> <span class="o">=</span> <span class="nb">input</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;type&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
265     <span class="k">if</span> <span class="nb">type</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;radio&#39;</span><span class="p">,</span> <span class="s1">&#39;checkbox&#39;</span><span class="p">):</span>
266         <span class="k">return</span> <span class="kc">True</span>
267     <span class="k">return</span> <span class="kc">False</span></div>
268
269 <div class="viewcode-block" id="_fill_multiple"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill._fill_multiple">[docs]</a><span class="k">def</span> <span class="nf">_fill_multiple</span><span class="p">(</span><span class="nb">input</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
270     <span class="nb">type</span> <span class="o">=</span> <span class="nb">input</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;type&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
271     <span class="k">if</span> <span class="nb">type</span> <span class="o">==</span> <span class="s1">&#39;checkbox&#39;</span><span class="p">:</span>
272         <span class="n">v</span> <span class="o">=</span> <span class="nb">input</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;value&#39;</span><span class="p">)</span>
273         <span class="k">if</span> <span class="n">v</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
274             <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
275                 <span class="n">result</span> <span class="o">=</span> <span class="kc">False</span>
276             <span class="k">else</span><span class="p">:</span>
277                 <span class="n">result</span> <span class="o">=</span> <span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
278                 <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
279                     <span class="c1"># The only valid &quot;on&quot; value for an unnamed checkbox is &#39;on&#39;</span>
280                     <span class="n">result</span> <span class="o">=</span> <span class="n">result</span> <span class="o">==</span> <span class="s1">&#39;on&#39;</span>
281             <span class="n">_check</span><span class="p">(</span><span class="nb">input</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
282         <span class="k">else</span><span class="p">:</span>
283             <span class="n">_check</span><span class="p">(</span><span class="nb">input</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">)</span>
284     <span class="k">elif</span> <span class="nb">type</span> <span class="o">==</span> <span class="s1">&#39;radio&#39;</span><span class="p">:</span>
285         <span class="n">v</span> <span class="o">=</span> <span class="nb">input</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;value&#39;</span><span class="p">)</span>
286         <span class="n">_check</span><span class="p">(</span><span class="nb">input</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">)</span>
287     <span class="k">else</span><span class="p">:</span>
288         <span class="k">assert</span> <span class="n">_nons</span><span class="p">(</span><span class="nb">input</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;select&#39;</span>
289         <span class="k">for</span> <span class="n">option</span> <span class="ow">in</span> <span class="n">_options_xpath</span><span class="p">(</span><span class="nb">input</span><span class="p">):</span>
290             <span class="n">v</span> <span class="o">=</span> <span class="n">option</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;value&#39;</span><span class="p">)</span>
291             <span class="k">if</span> <span class="n">v</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
292                 <span class="c1"># This seems to be the default, at least on IE</span>
293                 <span class="c1"># FIXME: but I&#39;m not sure</span>
294                 <span class="n">v</span> <span class="o">=</span> <span class="n">option</span><span class="o">.</span><span class="n">text_content</span><span class="p">()</span>
295             <span class="n">_select</span><span class="p">(</span><span class="n">option</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">)</span></div>
296
297 <div class="viewcode-block" id="_check"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill._check">[docs]</a><span class="k">def</span> <span class="nf">_check</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">check</span><span class="p">):</span>
298     <span class="k">if</span> <span class="n">check</span><span class="p">:</span>
299         <span class="n">el</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">&#39;checked&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
300     <span class="k">else</span><span class="p">:</span>
301         <span class="k">if</span> <span class="s1">&#39;checked&#39;</span> <span class="ow">in</span> <span class="n">el</span><span class="o">.</span><span class="n">attrib</span><span class="p">:</span>
302             <span class="k">del</span> <span class="n">el</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="s1">&#39;checked&#39;</span><span class="p">]</span></div>
303
304 <div class="viewcode-block" id="_select"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill._select">[docs]</a><span class="k">def</span> <span class="nf">_select</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">select</span><span class="p">):</span>
305     <span class="k">if</span> <span class="n">select</span><span class="p">:</span>
306         <span class="n">el</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">&#39;selected&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
307     <span class="k">else</span><span class="p">:</span>
308         <span class="k">if</span> <span class="s1">&#39;selected&#39;</span> <span class="ow">in</span> <span class="n">el</span><span class="o">.</span><span class="n">attrib</span><span class="p">:</span>
309             <span class="k">del</span> <span class="n">el</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="s1">&#39;selected&#39;</span><span class="p">]</span></div>
310
311 <div class="viewcode-block" id="_fill_single"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill._fill_single">[docs]</a><span class="k">def</span> <span class="nf">_fill_single</span><span class="p">(</span><span class="nb">input</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
312     <span class="k">if</span> <span class="n">_nons</span><span class="p">(</span><span class="nb">input</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;textarea&#39;</span><span class="p">:</span>
313         <span class="nb">input</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">value</span>
314     <span class="k">else</span><span class="p">:</span>
315         <span class="nb">input</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">&#39;value&#39;</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span></div>
316
317 <div class="viewcode-block" id="_find_form"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill._find_form">[docs]</a><span class="k">def</span> <span class="nf">_find_form</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">form_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">form_index</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
318     <span class="k">if</span> <span class="n">form_id</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">form_index</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
319         <span class="n">forms</span> <span class="o">=</span> <span class="n">_forms_xpath</span><span class="p">(</span><span class="n">el</span><span class="p">)</span>
320         <span class="k">for</span> <span class="n">form</span> <span class="ow">in</span> <span class="n">forms</span><span class="p">:</span>
321             <span class="k">return</span> <span class="n">form</span>
322         <span class="k">raise</span> <span class="n">FormNotFound</span><span class="p">(</span>
323             <span class="s2">&quot;No forms in page&quot;</span><span class="p">)</span>
324     <span class="k">if</span> <span class="n">form_id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
325         <span class="n">form</span> <span class="o">=</span> <span class="n">el</span><span class="o">.</span><span class="n">get_element_by_id</span><span class="p">(</span><span class="n">form_id</span><span class="p">)</span>
326         <span class="k">if</span> <span class="n">form</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
327             <span class="k">return</span> <span class="n">form</span>
328         <span class="n">forms</span> <span class="o">=</span> <span class="n">_form_name_xpath</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">form_id</span><span class="p">)</span>
329         <span class="k">if</span> <span class="n">forms</span><span class="p">:</span>
330             <span class="k">return</span> <span class="n">forms</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
331         <span class="k">else</span><span class="p">:</span>
332             <span class="k">raise</span> <span class="n">FormNotFound</span><span class="p">(</span>
333                 <span class="s2">&quot;No form with the name or id of </span><span class="si">%r</span><span class="s2"> (forms: </span><span class="si">%s</span><span class="s2">)&quot;</span>
334                 <span class="o">%</span> <span class="p">(</span><span class="nb">id</span><span class="p">,</span> <span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_find_form_ids</span><span class="p">(</span><span class="n">el</span><span class="p">))))</span>               
335     <span class="k">if</span> <span class="n">form_index</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
336         <span class="n">forms</span> <span class="o">=</span> <span class="n">_forms_xpath</span><span class="p">(</span><span class="n">el</span><span class="p">)</span>
337         <span class="k">try</span><span class="p">:</span>
338             <span class="k">return</span> <span class="n">forms</span><span class="p">[</span><span class="n">form_index</span><span class="p">]</span>
339         <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
340             <span class="k">raise</span> <span class="n">FormNotFound</span><span class="p">(</span>
341                 <span class="s2">&quot;There is no form with the index </span><span class="si">%r</span><span class="s2"> (</span><span class="si">%i</span><span class="s2"> forms found)&quot;</span>
342                 <span class="o">%</span> <span class="p">(</span><span class="n">form_index</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">forms</span><span class="p">)))</span></div>
343
344 <div class="viewcode-block" id="_find_form_ids"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill._find_form_ids">[docs]</a><span class="k">def</span> <span class="nf">_find_form_ids</span><span class="p">(</span><span class="n">el</span><span class="p">):</span>
345     <span class="n">forms</span> <span class="o">=</span> <span class="n">_forms_xpath</span><span class="p">(</span><span class="n">el</span><span class="p">)</span>
346     <span class="k">if</span> <span class="ow">not</span> <span class="n">forms</span><span class="p">:</span>
347         <span class="k">yield</span> <span class="s1">&#39;(no forms)&#39;</span>
348         <span class="k">return</span>
349     <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">form</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">forms</span><span class="p">):</span>
350         <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;id&#39;</span><span class="p">):</span>
351             <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">):</span>
352                 <span class="k">yield</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1"> or </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;id&#39;</span><span class="p">),</span>
353                                      <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">))</span>
354             <span class="k">else</span><span class="p">:</span>
355                 <span class="k">yield</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;id&#39;</span><span class="p">)</span>
356         <span class="k">elif</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">):</span>
357             <span class="k">yield</span> <span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">)</span>
358         <span class="k">else</span><span class="p">:</span>
359             <span class="k">yield</span> <span class="s1">&#39;(unnamed form </span><span class="si">%s</span><span class="s1">)&#39;</span> <span class="o">%</span> <span class="n">index</span></div>
360
361 <span class="c1">############################################################</span>
362 <span class="c1">## Error filling</span>
363 <span class="c1">############################################################</span>
364
365 <div class="viewcode-block" id="DefaultErrorCreator"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill.DefaultErrorCreator">[docs]</a><span class="k">class</span> <span class="nc">DefaultErrorCreator</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
366     <span class="n">insert_before</span> <span class="o">=</span> <span class="kc">True</span>
367     <span class="n">block_inside</span> <span class="o">=</span> <span class="kc">True</span>
368     <span class="n">error_container_tag</span> <span class="o">=</span> <span class="s1">&#39;div&#39;</span>
369     <span class="n">error_message_class</span> <span class="o">=</span> <span class="s1">&#39;error-message&#39;</span>
370     <span class="n">error_block_class</span> <span class="o">=</span> <span class="s1">&#39;error-block&#39;</span>
371     <span class="n">default_message</span> <span class="o">=</span> <span class="s2">&quot;Invalid&quot;</span>
372
373     <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
374         <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">kw</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
375             <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
376                 <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span>
377                     <span class="s2">&quot;Unexpected keyword argument: </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
378             <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
379
380     <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">el</span><span class="p">,</span> <span class="n">is_block</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
381         <span class="n">error_el</span> <span class="o">=</span> <span class="n">el</span><span class="o">.</span><span class="n">makeelement</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_container_tag</span><span class="p">)</span>
382         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_class</span><span class="p">:</span>
383             <span class="n">error_el</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">&#39;class&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_class</span><span class="p">)</span>
384         <span class="k">if</span> <span class="n">is_block</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_block_class</span><span class="p">:</span>
385             <span class="n">error_el</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">&#39;class&#39;</span><span class="p">,</span> <span class="n">error_el</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;class&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">+</span><span class="s1">&#39; &#39;</span><span class="o">+</span><span class="bp">self</span><span class="o">.</span><span class="n">error_block_class</span><span class="p">)</span>
386         <span class="k">if</span> <span class="n">message</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">message</span> <span class="o">==</span> <span class="s1">&#39;&#39;</span><span class="p">:</span>
387             <span class="n">message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_message</span>
388         <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">ElementBase</span><span class="p">):</span>
389             <span class="n">error_el</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
390         <span class="k">else</span><span class="p">:</span>
391             <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">basestring</span><span class="p">),</span> <span class="p">(</span>
392                 <span class="s2">&quot;Bad message; should be a string or element: </span><span class="si">%r</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">message</span><span class="p">)</span>
393             <span class="n">error_el</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">message</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_message</span>
394         <span class="k">if</span> <span class="n">is_block</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">block_inside</span><span class="p">:</span>
395             <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">insert_before</span><span class="p">:</span>
396                 <span class="n">error_el</span><span class="o">.</span><span class="n">tail</span> <span class="o">=</span> <span class="n">el</span><span class="o">.</span><span class="n">text</span>
397                 <span class="n">el</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="kc">None</span>
398                 <span class="n">el</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">error_el</span><span class="p">)</span>
399             <span class="k">else</span><span class="p">:</span>
400                 <span class="n">el</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error_el</span><span class="p">)</span>
401         <span class="k">else</span><span class="p">:</span>
402             <span class="n">parent</span> <span class="o">=</span> <span class="n">el</span><span class="o">.</span><span class="n">getparent</span><span class="p">()</span>
403             <span class="n">pos</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">el</span><span class="p">)</span>
404             <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">insert_before</span><span class="p">:</span>
405                 <span class="n">parent</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">pos</span><span class="p">,</span> <span class="n">error_el</span><span class="p">)</span>
406             <span class="k">else</span><span class="p">:</span>
407                 <span class="n">error_el</span><span class="o">.</span><span class="n">tail</span> <span class="o">=</span> <span class="n">el</span><span class="o">.</span><span class="n">tail</span>
408                 <span class="n">el</span><span class="o">.</span><span class="n">tail</span> <span class="o">=</span> <span class="kc">None</span>
409                 <span class="n">parent</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">pos</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">error_el</span><span class="p">)</span></div>
410
411 <span class="n">default_error_creator</span> <span class="o">=</span> <span class="n">DefaultErrorCreator</span><span class="p">()</span>
412     
413
414 <div class="viewcode-block" id="insert_errors"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill.insert_errors">[docs]</a><span class="k">def</span> <span class="nf">insert_errors</span><span class="p">(</span>
415     <span class="n">el</span><span class="p">,</span>
416     <span class="n">errors</span><span class="p">,</span>
417     <span class="n">form_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
418     <span class="n">form_index</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
419     <span class="n">error_class</span><span class="o">=</span><span class="s2">&quot;error&quot;</span><span class="p">,</span>
420     <span class="n">error_creator</span><span class="o">=</span><span class="n">default_error_creator</span><span class="p">,</span>
421     <span class="p">):</span>
422     <span class="n">el</span> <span class="o">=</span> <span class="n">_find_form</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">form_id</span><span class="o">=</span><span class="n">form_id</span><span class="p">,</span> <span class="n">form_index</span><span class="o">=</span><span class="n">form_index</span><span class="p">)</span>
423     <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">error</span> <span class="ow">in</span> <span class="n">errors</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
424         <span class="k">if</span> <span class="n">error</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
425             <span class="k">continue</span>
426         <span class="k">for</span> <span class="n">error_el</span><span class="p">,</span> <span class="n">message</span> <span class="ow">in</span> <span class="n">_find_elements_for_name</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">error</span><span class="p">):</span>
427             <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="p">(</span><span class="n">basestring</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="kc">None</span><span class="p">),</span> <span class="n">ElementBase</span><span class="p">)),</span> <span class="p">(</span>
428                 <span class="s2">&quot;Bad message: </span><span class="si">%r</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">message</span><span class="p">)</span>
429             <span class="n">_insert_error</span><span class="p">(</span><span class="n">error_el</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">error_class</span><span class="p">,</span> <span class="n">error_creator</span><span class="p">)</span></div>
430
431 <div class="viewcode-block" id="insert_errors_html"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill.insert_errors_html">[docs]</a><span class="k">def</span> <span class="nf">insert_errors_html</span><span class="p">(</span><span class="n">html</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
432     <span class="n">result_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
433     <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">html</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
434         <span class="n">doc</span> <span class="o">=</span> <span class="n">fromstring</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
435     <span class="k">else</span><span class="p">:</span>
436         <span class="n">doc</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
437     <span class="n">insert_errors</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span>
438     <span class="k">return</span> <span class="n">_transform_result</span><span class="p">(</span><span class="n">result_type</span><span class="p">,</span> <span class="n">doc</span><span class="p">)</span></div>
439
440 <div class="viewcode-block" id="_insert_error"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill._insert_error">[docs]</a><span class="k">def</span> <span class="nf">_insert_error</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">error</span><span class="p">,</span> <span class="n">error_class</span><span class="p">,</span> <span class="n">error_creator</span><span class="p">):</span>
441     <span class="k">if</span> <span class="n">_nons</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span> <span class="ow">in</span> <span class="n">defs</span><span class="o">.</span><span class="n">empty_tags</span> <span class="ow">or</span> <span class="n">_nons</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;textarea&#39;</span><span class="p">:</span>
442         <span class="n">is_block</span> <span class="o">=</span> <span class="kc">False</span>
443     <span class="k">else</span><span class="p">:</span>
444         <span class="n">is_block</span> <span class="o">=</span> <span class="kc">True</span>
445     <span class="k">if</span> <span class="n">_nons</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span> <span class="o">!=</span> <span class="s1">&#39;form&#39;</span> <span class="ow">and</span> <span class="n">error_class</span><span class="p">:</span>
446         <span class="n">_add_class</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">error_class</span><span class="p">)</span>
447     <span class="k">if</span> <span class="n">el</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;id&#39;</span><span class="p">):</span>
448         <span class="n">labels</span> <span class="o">=</span> <span class="n">_label_for_xpath</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">for_id</span><span class="o">=</span><span class="n">el</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;id&#39;</span><span class="p">))</span>
449         <span class="k">if</span> <span class="n">labels</span><span class="p">:</span>
450             <span class="k">for</span> <span class="n">label</span> <span class="ow">in</span> <span class="n">labels</span><span class="p">:</span>
451                 <span class="n">_add_class</span><span class="p">(</span><span class="n">label</span><span class="p">,</span> <span class="n">error_class</span><span class="p">)</span>
452     <span class="n">error_creator</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">is_block</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span></div>
453
454 <div class="viewcode-block" id="_add_class"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill._add_class">[docs]</a><span class="k">def</span> <span class="nf">_add_class</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">class_name</span><span class="p">):</span>
455     <span class="k">if</span> <span class="n">el</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;class&#39;</span><span class="p">):</span>
456         <span class="n">el</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">&#39;class&#39;</span><span class="p">,</span> <span class="n">el</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;class&#39;</span><span class="p">)</span><span class="o">+</span><span class="s1">&#39; &#39;</span><span class="o">+</span><span class="n">class_name</span><span class="p">)</span>
457     <span class="k">else</span><span class="p">:</span>
458         <span class="n">el</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">&#39;class&#39;</span><span class="p">,</span> <span class="n">class_name</span><span class="p">)</span></div>
459
460 <div class="viewcode-block" id="_find_elements_for_name"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill._find_elements_for_name">[docs]</a><span class="k">def</span> <span class="nf">_find_elements_for_name</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">error</span><span class="p">):</span>
461     <span class="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
462         <span class="c1"># An error for the entire form</span>
463         <span class="k">yield</span> <span class="n">form</span><span class="p">,</span> <span class="n">error</span>
464         <span class="k">return</span>
465     <span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;#&#39;</span><span class="p">):</span>
466         <span class="c1"># By id</span>
467         <span class="n">el</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">get_element_by_id</span><span class="p">(</span><span class="n">name</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
468         <span class="k">if</span> <span class="n">el</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
469             <span class="k">yield</span> <span class="n">el</span><span class="p">,</span> <span class="n">error</span>
470         <span class="k">return</span>
471     <span class="n">els</span> <span class="o">=</span> <span class="n">_name_xpath</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">)</span>
472     <span class="k">if</span> <span class="ow">not</span> <span class="n">els</span><span class="p">:</span>
473         <span class="c1"># FIXME: should this raise an exception?</span>
474         <span class="k">return</span>
475     <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">error</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span>
476         <span class="k">yield</span> <span class="n">els</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">error</span>
477         <span class="k">return</span>
478     <span class="c1"># FIXME: if error is longer than els, should it raise an error?</span>
479     <span class="k">for</span> <span class="n">el</span><span class="p">,</span> <span class="n">err</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">els</span><span class="p">,</span> <span class="n">error</span><span class="p">):</span>
480         <span class="k">if</span> <span class="n">err</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
481             <span class="k">continue</span>
482         <span class="k">yield</span> <span class="n">el</span><span class="p">,</span> <span class="n">err</span></div>
483 </pre></div>
484
485            </div>
486            
487           </div>
488           <footer>
489   
490
491   <hr/>
492
493   <div role="contentinfo">
494     <p>
495         
496         &copy; Copyright 2020, lxml dev team
497
498     </p>
499   </div>
500     
501     
502     
503     Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
504     
505     <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
506     
507     provided by <a href="https://readthedocs.org">Read the Docs</a>. 
508
509 </footer>
510
511         </div>
512       </div>
513
514     </section>
515
516   </div>
517   
518
519   <script type="text/javascript">
520       jQuery(function () {
521           SphinxRtdTheme.Navigation.enable(true);
522       });
523   </script>
524
525   
526   
527     
528    
529
530 </body>
531 </html>