
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
)2Y%                 @   sx  d dl mZmZ d dlmZmZ d dlmZmZmZm	Z	 d dlm
Z
 d dlZye W n ek
rl   eZY nX dddd	d
dgZG dd deZeddeidZedjdd d7D deidZeddeidZedZd8ddZd9ddZdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd:d)d*Zd+d, Z G d-d de!Z"e" Z#ddd.e#fd/d	Z$d0d
 Z%d1d2 Z&d3d4 Z'd5d6 Z(dS );    )XPathElementBase)
fromstringXHTML_NAMESPACE)_forms_xpath_options_xpath_nons_transform_result)defsNFormNotFound	fill_formfill_form_htmlinsert_errorsinsert_errors_htmlDefaultErrorCreatorc               @   s   e Zd ZdZdS )r   z*
    Raised when no form can be found
    N)__name__
__module____qualname____doc__ r   r    /usr/lib64/python3.6/formfill.pyr      s   zKdescendant-or-self::form[name=$name]|descendant-or-self::x:form[name=$name]x)Z
namespaces|c             C   s   g | ]}d | qS )zdescendant-or-self::r   ).0Z_tagr   r   r   
<listcomp>   s    r   inputselecttextareax:inputx:select
x:textareaz-//label[@for=$for_id]|//x:label[@for=$for_id]z"descendant-or-self::*[@name=$name]c             C   s   t | ||d} t| | d S )N)form_id
form_index)
_find_form
_fill_form)elvaluesr!   r"   r   r   r   r      s    c             C   s@   t | }t| trt| }n
tj| }t||||d t||S )N)r!   r"   )type
isinstance
basestringr   copydeepcopyr   r	   )htmlr&   r!   r"   result_typedocr   r   r   r   &   s    


c             C   s   i }t |dr|j }t| }x|D ]}|jd}|s8q$t|rl|j|g }t|ttfs`|g}t|| q$||krxq$q$|j|d}|d ||< || }t|ttfry|| }W q t	k
r   w$Y qX n
|dkrq$t
|| q$W d S )Nmixednamer      )hasattrr/   _input_xpathget_takes_multipler(   listtuple_fill_multiple
IndexError_fill_single)r%   r&   ZcountsZinputsr   r0   valueindexr   r   r   r$   /   s4    



r$   c             C   s<   t | jdkr| jdrdS | jddj }|d	kr8dS dS )
Nr   ZmultipleTr'    radiocheckboxF)r>   r?   )r   tagr4   lower)r   r'   r   r   r   r5   M   s    r5   c             C   s   | j ddj }|dkrj| j d}|d krZ|s4d}n|d }t|trN|dk}t| | qt| ||k nn|dkr| j d}t| ||k nLt| jd	kstx8t| D ],}|j d}|d kr|j	 }t
|||k qW d S )
Nr'   r=   r?   r;   Fr   Zonr>   r   )r4   rA   r(   r)   _checkr   r@   AssertionErrorr   Ztext_content_select)r   r;   r'   vresultZoptionr   r   r   r8   V   s(    



r8   c             C   s(   |r| j dd nd| jkr$| jd= d S )NZcheckedr=   )setattrib)r%   Zcheckr   r   r   rB   r   s    
rB   c             C   s(   |r| j dd nd| jkr$| jd= d S )NZselectedr=   )rG   rH   )r%   r   r   r   r   rD   y   s    
rD   c             C   s&   t | jdkr|| _n| jd| d S )Nr   r;   )r   r@   textrG   )r   r;   r   r   r   r:      s    r:   c             C   s   |d kr0|d kr0t | }x|D ]}|S W td|d k	r| j|}|d k	rN|S t| |d}|rf|d S tdtdjt| f |d k	rt | }y|| S  tk
r   td|t|f Y nX d S )NzNo forms in page)r0   r   z-No form with the name or id of %r (forms: %s)z, z3There is no form with the index %r (%i forms found))	r   r   get_element_by_id_form_name_xpathidjoin_find_form_idsr9   len)r%   r!   r"   formsformr   r   r   r#      s0    

r#   c             c   s   t | }|sdV  d S xtt|D ]h\}}|jdrf|jdrXd|jd|jdf V  q|jdV  q |jdr~|jdV  q d| V  q W d S )Nz
(no forms)rL   r0   z%s or %sz(unnamed form %s))r   	enumerater4   )r%   rP   r<   rQ   r   r   r   rN      s    



rN   c               @   s4   e Zd ZdZdZdZdZdZdZdd Z	dd	 Z
d
S )r   TZdivzerror-messagezerror-blockZInvalidc             K   s<   x6|j  D ]*\}}t| |s(td| t| || q
W d S )NzUnexpected keyword argument: %s)itemsr2   	TypeErrorsetattr)selfkwr0   r;   r   r   r   __init__   s
    

zDefaultErrorCreator.__init__c             C   s  |j | j}| jr |jd| j |rH| jrH|jd|jddd | j  |d ksX|dkr^| j}t|trt|j	| n"t|t
std| |p| j|_|r| jr| jr|j|_d |_|jd| n
|j	| nD|j }|j|}| jr|j|| n|j|_d |_|j|d | d S )Nclassr=    z.Bad message; should be a string or element: %rr   r1   )Zmakeelementerror_container_tagerror_message_classrG   error_block_classr4   default_messager(   r   appendr)   rC   rI   block_insideinsert_beforetailinsertZ	getparentr<   )rV   r%   is_blockmessageerror_elparentposr   r   r   __call__   s2    




zDefaultErrorCreator.__call__N)r   r   r   ra   r`   r[   r\   r]   r^   rX   ri   r   r   r   r   r      s   errorc       
      C   sz   t | ||d} xf|j D ]Z\}}|d kr*qxFt| ||D ]6\}}	t|	ttd tfs`td|	 t||	|| q8W qW d S )N)r!   r"   zBad message: %r)	r#   rS   _find_elements_for_namer(   r)   r'   r   rC   _insert_error)
r%   errorsr!   r"   error_classerror_creatorr0   rj   rf   re   r   r   r   r      s    
c             K   s>   t | }t| trt| }n
tj| }t||f| t||S )N)r'   r(   r)   r   r*   r+   r   r	   )r,   r&   rW   r-   r.   r   r   r   r      s    


c             C   s   t | jtjkst | jdkr$d}nd}t | jdkrD|rDt| | | jdr|t| | jdd}|r|x|D ]}t|| qjW || || d S )Nr   FTrQ   rL   )Zfor_id)r   r@   r
   Z
empty_tags
_add_classr4   _label_for_xpath)r%   rj   rn   ro   rd   ZlabelsZlabelr   r   r   rl     s    


rl   c             C   s6   | j dr&| jd| j dd |  n| jd| d S )NrY   rZ   )r4   rG   )r%   
class_namer   r   r   rp     s    
rp   c             c   s   |d kr| |fV  d S |j drH| j|dd  }|d k	rD||fV  d S t| |d}|s\d S t|ttfs||d |fV  d S x*t||D ]\}}|d krq||fV  qW d S )N#r1   )r0   r   )
startswithrJ   _name_xpathr(   r6   r7   zip)rQ   r0   rj   r%   Zelserrr   r   r   rk     s$    


rk   )r   r   r   r   r   r    )NN)NN)NN))Z
lxml.etreer   r   Z	lxml.htmlr   r   r   r   r   r	   r
   r*   r)   	NameErrorstr__all__LookupErrorr   rK   rM   r3   rq   ru   r   r   r$   r5   r8   rB   rD   r:   r#   rN   objectr   Zdefault_error_creatorr   r   rl   rp   rk   r   r   r   r   <module>   sN   
 

		
.	