B
    v9a                 @   sR  d ddddddddd	d
ddddddddddddgZ dZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 G dd	 d	eZdd ZG dd dZi fddZdRd d ZdSd!dZeZG d"d dZG d#d dZejd$d% ZdTd&d'Zd(d) Zd*ZyeeZW n ek
r&   Y nX d+d, Zd-d. Zeeed/Zd0d Zd1d2d3d4d5d6d7d8Z e e_ d9d: Z!d;d< Z"d=d> Z#d?d@ Z$dUdAdBdCdZ%G dDdE dEej&Z'dVdAdBdFdZ(dGd Z)dWdHdZ*dXdIdZ+G dJd dZ,dYdKdZ-dZdLdZ.e-Z/d[dMdZ0G dNd dZ1dOgZ2G dPd dZ3yeZ4ddQl5T W n e6k
rL   Y nX dS )\CommentdumpElementElementTree
fromstringfromstringlist	iselement	iterparseparse
ParseErrorPIProcessingInstructionQName
SubElementtostringtostringlistTreeBuilderVERSIONXMLXMLID	XMLParserXMLPullParserregister_namespacez1.3.0    N   )ElementPathc               @   s   e Zd ZdS )r
   N)__name__
__module____qualname__ r   r   !/usr/lib/python3.7/ElementTree.pyr
   i   s   	c             C   s
   t | dS )Ntag)hasattr)elementr   r   r   r   w   s    c               @   s  e Zd ZdZdZdZdZi fddZdd Zdd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd8d d!Zd9d"d#Zd:d$d%Zd;d&d'Zd(d) Zd<d*d+Zd,d- Zd.d/ Zd0d1 Zd=d2d3Zd>d4d5Z d6d7 Z!dS )?r   Nc             K   sD   t |tstd|jjf | }|| || _|| _g | _	d S )Nzattrib must be dict, not %s)

isinstancedict	TypeError	__class__r   copyupdater    attrib	_children)selfr    r)   extrar   r   r   __init__   s    

zElement.__init__c             C   s   d| j j| jt| f S )Nz<%s %r at %#x>)r&   r   r    id)r+   r   r   r   __repr__   s    zElement.__repr__c             C   s   |  ||S )N)r&   )r+   r    r)   r   r   r   makeelement   s    	zElement.makeelementc             C   s0   |  | j| j}| j|_| j|_| |d d < |S )N)r0   r    r)   texttail)r+   elemr   r   r   r'      s
    zElement.copyc             C   s
   t | jS )N)lenr*   )r+   r   r   r   __len__   s    zElement.__len__c             C   s   t jdtdd t| jdkS )NzyThe behavior of this method will change in future versions.  Use specific 'len(elem)' or 'elem is not None' test instead.   )
stacklevelr   )warningswarnFutureWarningr4   r*   )r+   r   r   r   __bool__   s    
zElement.__bool__c             C   s
   | j | S )N)r*   )r+   indexr   r   r   __getitem__   s    zElement.__getitem__c             C   s   || j |< d S )N)r*   )r+   r<   r"   r   r   r   __setitem__   s    zElement.__setitem__c             C   s   | j |= d S )N)r*   )r+   r<   r   r   r   __delitem__   s    zElement.__delitem__c             C   s   |  | | j| d S )N)_assert_is_elementr*   append)r+   
subelementr   r   r   rA      s    
zElement.appendc             C   s(   x|D ]}|  | qW | j| d S )N)r@   r*   extend)r+   elementsr"   r   r   r   rC      s    
zElement.extendc             C   s   |  | | j|| d S )N)r@   r*   insert)r+   r<   rB   r   r   r   rE      s    
zElement.insertc             C   s    t |tstdt|j d S )Nzexpected an Element, not %s)r#   _Element_Pyr%   typer   )r+   er   r   r   r@      s    
zElement._assert_is_elementc             C   s   | j | d S )N)r*   remove)r+   rB   r   r   r   rI     s    zElement.removec             C   s   t jdtdd | jS )NzaThis method will be removed in future versions.  Use 'list(elem)' or iteration over elem instead.r6   )r7   )r8   r9   DeprecationWarningr*   )r+   r   r   r   getchildren  s    
zElement.getchildrenc             C   s   t | ||S )N)r   find)r+   path
namespacesr   r   r   rL   "  s    	zElement.findc             C   s   t | |||S )N)r   findtext)r+   rM   defaultrN   r   r   r   rO   -  s    zElement.findtextc             C   s   t | ||S )N)r   findall)r+   rM   rN   r   r   r   rQ   ;  s    	zElement.findallc             C   s   t | ||S )N)r   iterfind)r+   rM   rN   r   r   r   rR   F  s    	zElement.iterfindc             C   s    | j   g | _d  | _| _d S )N)r)   clearr*   r1   r2   )r+   r   r   r   rS   Q  s    
zElement.clearc             C   s   | j ||S )N)r)   get)r+   keyrP   r   r   r   rT   \  s    zElement.getc             C   s   || j |< d S )N)r)   )r+   rU   valuer   r   r   seti  s    zElement.setc             C   s
   | j  S )N)r)   keys)r+   r   r   r   rX   s  s    zElement.keysc             C   s
   | j  S )N)r)   items)r+   r   r   r   rY   |  s    	zElement.itemsc             c   sH   |dkrd }|d ks| j |kr$| V  x| jD ]}||E d H  q,W d S )N*)r    r*   iter)r+   r    rH   r   r   r   r[     s    zElement.iterc             C   s   t jdtdd t| |S )NzbThis method will be removed in future versions.  Use 'elem.iter()' or 'list(elem.iter())' instead.r6   )r7   )r8   r9   PendingDeprecationWarninglistr[   )r+   r    r   r   r   getiterator  s    
zElement.getiteratorc             c   s\   | j }t|ts|d k	rd S | j}|r,|V  x*| D ]"}| E d H  |j}|r2|V  q2W d S )N)r    r#   strr1   itertextr2   )r+   r    trH   r   r   r   r`     s    
zElement.itertext)N)NN)N)N)N)N)N)"r   r   r   r    r)   r1   r2   r-   r/   r0   r'   r5   r;   r=   r>   r?   rA   rC   rE   r@   rI   rK   rL   rO   rQ   rR   rS   rT   rW   rX   rY   r[   r^   r`   r   r   r   r   r   |   s>   	







	

	c             K   s,   |  }|| | ||}| | |S )N)r'   r(   r0   rA   )parentr    r)   r,   r"   r   r   r   r     s
    

c             C   s   t t}| |_|S )N)r   r   r1   )r1   r"   r   r   r   r     s    	c             C   s&   t t}| |_|r"|jd | |_|S )N )r   r   r1   )targetr1   r"   r   r   r   r     s
    
c               @   sV   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd ZdS )r   Nc             C   s   |rd||f }|| _ d S )Nz{%s}%s)r1   )r+   Ztext_or_urir    r   r   r   r-     s    zQName.__init__c             C   s   | j S )N)r1   )r+   r   r   r   __str__  s    zQName.__str__c             C   s   d| j j| jf S )Nz<%s %r>)r&   r   r1   )r+   r   r   r   r/     s    zQName.__repr__c             C   s
   t | jS )N)hashr1   )r+   r   r   r   __hash__  s    zQName.__hash__c             C   s    t |tr| j|jkS | j|kS )N)r#   r   r1   )r+   otherr   r   r   __le__  s    
zQName.__le__c             C   s    t |tr| j|jk S | j|k S )N)r#   r   r1   )r+   rh   r   r   r   __lt__  s    
zQName.__lt__c             C   s    t |tr| j|jkS | j|kS )N)r#   r   r1   )r+   rh   r   r   r   __ge__  s    
zQName.__ge__c             C   s    t |tr| j|jkS | j|kS )N)r#   r   r1   )r+   rh   r   r   r   __gt__  s    
zQName.__gt__c             C   s    t |tr| j|jkS | j|kS )N)r#   r   r1   )r+   rh   r   r   r   __eq__  s    
zQName.__eq__)N)r   r   r   r-   re   r/   rg   ri   rj   rk   rl   rm   r   r   r   r   r     s   
c               @   s   e Zd ZdddZdd Zdd Zddd	Zdd
dZdddZd ddZ	d!ddZ
d"ddZd#ddZd$ddddZdd ZdS )%r   Nc             C   s   || _ |r| | d S )N)_rootr	   )r+   r"   filer   r   r   r-   *  s    zElementTree.__init__c             C   s   | j S )N)rn   )r+   r   r   r   getroot0  s    zElementTree.getrootc             C   s
   || _ d S )N)rn   )r+   r"   r   r   r   _setroot4  s    zElementTree._setrootc             C   s   d}t |dst|d}d}zZ|d krHt }t |drH||| _| jS x|d}|sZP || qJW | | _| jS |r|  X d S )NFreadrbT_parse_wholei   )r!   openr   rt   rn   rr   feedclose)r+   sourceparserclose_sourcedatar   r   r   r	   >  s&    




zElementTree.parsec             C   s   | j |S )N)rn   r[   )r+   r    r   r   r   r[   c  s    
zElementTree.iterc             C   s   t jdtdd t| |S )NzbThis method will be removed in future versions.  Use 'tree.iter()' or 'list(tree.iter())' instead.r6   )r7   )r8   r9   r\   r]   r[   )r+   r    r   r   r   r^   p  s    
zElementTree.getiteratorc             C   s:   |d d dkr,d| }t jd| tdd | j||S )Nr   /.zThis search is broken in 1.3 and earlier, and will be fixed in a future version.  If you rely on the current behaviour, change it to %rr6   )r7   )r8   r9   r:   rn   rL   )r+   rM   rN   r   r   r   rL   y  s    
zElementTree.findc             C   s<   |d d dkr,d| }t jd| tdd | j|||S )Nr   r|   r}   zThis search is broken in 1.3 and earlier, and will be fixed in a future version.  If you rely on the current behaviour, change it to %rr6   )r7   )r8   r9   r:   rn   rO   )r+   rM   rP   rN   r   r   r   rO     s    
zElementTree.findtextc             C   s:   |d d dkr,d| }t jd| tdd | j||S )Nr   r|   r}   zThis search is broken in 1.3 and earlier, and will be fixed in a future version.  If you rely on the current behaviour, change it to %rr6   )r7   )r8   r9   r:   rn   rQ   )r+   rM   rN   r   r   r   rQ     s    
zElementTree.findallc             C   s:   |d d dkr,d| }t jd| tdd | j||S )Nr   r|   r}   zThis search is broken in 1.3 and earlier, and will be fixed in a future version.  If you rely on the current behaviour, change it to %rr6   )r7   )r8   r9   r:   rn   rR   )r+   rM   rN   r   r   r   rR     s    
zElementTree.iterfindT)short_empty_elementsc         	   C   s   |s
d}n|t krtd| |s4|dkr0d}nd}| }t||}|dkr|sd|d kr|dkr|}	|dkrdd l}
|
 }	|d	|	f  |d
krt|| j n,t| j|\}}t | }||| j|||d W d Q R X d S )Nxmlzunknown method %rc14nzutf-8zus-ascii)zutf-8zus-asciiunicoder   r   z$<?xml version='1.0' encoding='%s'?>
r1   )r~   )	
_serialize
ValueErrorlower_get_writerlocalegetpreferredencoding_serialize_textrn   _namespaces)r+   file_or_filenameencodingZxml_declarationdefault_namespacemethodr~   Z	enc_lowerwriteZdeclared_encodingr   qnamesrN   Z	serializer   r   r   r     s2    
zElementTree.writec             C   s   | j |ddS )Nr   )r   )r   )r+   ro   r   r   r   
write_c14n  s    zElementTree.write_c14n)NN)N)N)N)N)NN)N)N)NNNN)r   r   r   r-   rp   rq   r	   r[   r^   rL   rO   rQ   rR   r   r   r   r   r   r   r     s    


%

	



   5c             c   s"  y
| j }W nP tk
rZ   |dkr.t| d}nt| d|dd}| |j V  W d Q R X Y nX |dkrl|V  nt }t| tjr| }nft| tjrt	| }|
|j nBt }dd |_||_ y| j|_| j|_W n tk
r   Y nX tj||ddd}|
|j |j V  W d Q R X d S )	Nr   wxmlcharrefreplace)r   errorsc               S   s   dS )NTr   r   r   r   r   <lambda>4      z_get_writer.<locals>.<lambda>
)r   r   newline)r   AttributeErrorru   
contextlib	ExitStackr#   ioBufferedIOBase	RawIOBaseBufferedWritercallbackdetachwritableseekabletellTextIOWrapper)r   r   r   ro   stackr   r   r   r     s>    



r   c                s  d d ii  rd <  fdd}x|   D ]} | j}t|tr\|jkr||j n<t|trx|kr|| n |d k	r|tk	r|tk	rt| xR| 	 D ]F\}}t|tr|j}|kr|| t|tr|jkr||j qW | j}t|tr2|jkr2||j q2W fS )N c                s   y| d d dkr| dd   dd\}}|}|d krjt|}|d krZdt }|dkrj||< |rd||f | < q|| < n rtd| | < W n tk
r   t|  Y nX d S )Nr   {}zns%dr   z%s:%sz<cannot use non-qualified names with default_namespace option)rsplitrT   _namespace_mapr4   r   r%   _raise_serialization_error)Zqnameurir    prefix)r   rN   r   r   r   	add_qnameQ  s&    


z_namespaces.<locals>.add_qname)
r[   r    r#   r   r1   r_   r   r   r   rY   )r3   r   r   r    rU   rV   r1   r   )r   rN   r   r   r   F  s4    




r   c             K   s  |j }|j}|tkr$| d|  n|tkr<| d|  nt|| }|d kr|r\| t| x|D ]}t| ||d |d qbW n0| d|  t| }	|	s|rD|rx@t| dd dD ](\}
}|rd| }| d	|t	|
f  qW xZt|	D ]N\}}
t
|tr|j}t
|
tr$||
j }
nt	|
}
| d
|| |
f  qW |sZt|sZ|s| d |rt| t| x |D ]}t| ||d |d qzW | d| d  n| d |jr| t|j d S )Nz	<!--%s-->z<?%s?>)r~   <c             S   s   | d S )Nr   r   )xr   r   r   r     r   z _serialize_xml.<locals>.<lambda>)rU   :z xmlns%s="%s"z %s="%s">z</z />)r    r1   r   r   _escape_cdata_serialize_xmlr]   rY   sorted_escape_attribr#   r   r4   r2   )r   r3   r   rN   r~   kwargsr    r1   rH   rY   vkr   r   r   r     sT    





r   )ZareabaseZbasefontbrcolframehrZimginputZisindexlinkmetaZparamc             K   s  |j }|j}|tkr(| dt|  n|tkrD| dt|  n||| }|d kr|rd| t| x|D ]}t| ||d  qjW n<| d|  t| }|s|rH|rx@t| dd dD ](\}	}
|
rd|
 }
| d|
t	|	f  qW xZt|D ]N\}
}	t
|
tr|
j}
t
|	tr(||	j }	nt|	}	| d	||
 |	f  qW | d
 | }|r|dksr|dkr|| | n| t| x|D ]}t| ||d  qW |tkr| d| d
  |jr| t|j d S )Nz	<!--%s-->z<?%s?>r   c             S   s   | d S )Nr   r   )r   r   r   r   r     r   z!_serialize_html.<locals>.<lambda>)rU   r   z xmlns%s="%s"z %s="%s"r   ZscriptZstylez</)r    r1   r   r   r   _serialize_htmlr]   rY   r   r   r#   r   _escape_attrib_htmlr   
HTML_EMPTYr2   )r   r3   r   rN   r   r    r1   rH   rY   r   r   Zltagr   r   r   r     sT    





r   c             C   s.   x|  D ]}| | q
W |jr*| |j d S )N)r`   r2   )r   r3   partr   r   r   r     s    r   )r   htmlr1   c             C   sP   t d| rtdx.tt D ]\}}||ks:|| kr"t|= q"W | t|< d S )Nzns\d+$z'Prefix format reserved for internal use)rematchr   r]   r   rY   )r   r   r   r   r   r   r   r     s    
r   r   ZrdfZwsdlZxsZxsiZdc)z$http://www.w3.org/XML/1998/namespacezhttp://www.w3.org/1999/xhtmlz+http://www.w3.org/1999/02/22-rdf-syntax-ns#z http://schemas.xmlsoap.org/wsdl/z http://www.w3.org/2001/XMLSchemaz)http://www.w3.org/2001/XMLSchema-instancez http://purl.org/dc/elements/1.1/c             C   s   t d| t| jf d S )Nzcannot serialize %r (type %s))r%   rG   r   )r1   r   r   r   r      s    r   c          	   C   sf   y@d| kr|  dd} d| kr*|  dd} d| kr>|  dd} | S  ttfk
r`   t|  Y nX d S )N&z&amp;r   z&lt;r   z&gt;)replacer%   r   r   )r1   r   r   r   r   %  s    r   c          	   C   s   yd| kr|  dd} d| kr*|  dd} d| kr>|  dd} d| krR|  dd} d	| krf|  d	d
} d| krz|  dd
} d
| kr|  d
d} d| kr|  dd} | S  ttfk
r   t|  Y nX d S )Nr   z&amp;r   z&lt;r   z&gt;"z&quot;z
r   z&#10;	z&#09;)r   r%   r   r   )r1   r   r   r   r   5  s(    r   c          	   C   sf   y@d| kr|  dd} d| kr*|  dd} d| kr>|  dd} | S  ttfk
r`   t|  Y nX d S )Nr   z&amp;r   z&gt;r   z&quot;)r   r%   r   r   )r1   r   r   r   r   Q  s    r   T)r~   c            C   s6   |dkrt  nt  }t| j||||d | S )Nr   )r   r~   )r   StringIOBytesIOr   r   getvalue)r"   r   r   r~   streamr   r   r   r   `  s    c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )_ListDataStreamc             C   s
   || _ d S )N)lst)r+   r   r   r   r   r-   u  s    z_ListDataStream.__init__c             C   s   dS )NTr   )r+   r   r   r   r   x  s    z_ListDataStream.writablec             C   s   dS )NTr   )r+   r   r   r   r   {  s    z_ListDataStream.seekablec             C   s   | j | d S )N)r   rA   )r+   br   r   r   r   ~  s    z_ListDataStream.writec             C   s
   t | jS )N)r4   r   )r+   r   r   r   r     s    z_ListDataStream.tellN)r   r   r   r-   r   r   r   r   r   r   r   r   r   s  s
   r   c            C   s&   g }t |}t| j||||d |S )N)r   r~   )r   r   r   )r"   r   r   r~   r   r   r   r   r   r     s
    c             C   sL   t | tst| } | jtjdd |  j}|r<|d dkrHtjd d S )Nr   )r   r   )r#   r   r   sysstdoutrp   r2   )r3   r2   r   r   r   r     s    

c             C   s   t  }|| | |S )N)r   r	   )rx   ry   treer   r   r   r	     s    	c                sf   t ||d fddG fdddtjj}| d _~d tdsbtdd	 S )
N)events_parserc              3   sb   zNx,  E d H  d} | s"P |  qW  }  E d H  |_W d  r\  X d S )Ni @  )read_eventsrr   rv   _close_and_return_rootrootrw   )r{   r   )rz   it
pullparserrx   r   r   iterator  s    

ziterparse.<locals>.iteratorc                   s   e Zd Z  jZdS )z$iterparse.<locals>.IterParseIteratorN)r   r   r   __next__r   )r   r   r   IterParseIterator  s   r   Frr   rs   T)r   collectionsabcIteratorr   r!   ru   )rx   r   ry   r   r   )rz   r   r   r   rx   r   r     s    

c               @   s<   e Zd ZdddddZdd Zdd Zd	d
 Zdd ZdS )r   N)r   c            C   s<   t  | _|ptt d| _|d kr(d}| j| j| d S )N)rd   )end)r   deque_events_queuer   r   r   
_setevents)r+   r   r   r   r   r   r-     s
    
zXMLPullParser.__init__c          
   C   sZ   | j d krtd|rVy| j | W n. tk
rT } z| j| W d d }~X Y nX d S )Nz!feed() called after end of stream)r   r   rv   SyntaxErrorr   rA   )r+   r{   excr   r   r   rv     s    
zXMLPullParser.feedc             C   s   | j  }d | _ |S )N)r   rw   )r+   r   r   r   r   r     s    
z$XMLPullParser._close_and_return_rootc             C   s   |    d S )N)r   )r+   r   r   r   rw     s    zXMLPullParser.closec             c   s2   | j }x&|r,| }t|tr$|q|V  qW d S )N)r   popleftr#   	Exception)r+   r   eventr   r   r   r     s    
zXMLPullParser.read_events)N)r   r   r   r-   rv   r   rw   r   r   r   r   r   r     s
   
c             C   s"   |st t d}||  | S )N)rd   )r   r   rv   rw   )r1   ry   r   r   r   r     s    
c             C   sV   |st t d}||  | }i }x&| D ]}|d}|r0|||< q0W ||fS )N)rd   r.   )r   r   rv   rw   r[   rT   )r1   ry   r   Zidsr3   r.   r   r   r   r   '  s    


c             C   s0   |st t d}x| D ]}|| qW | S )N)rd   )r   r   rv   rw   )Zsequencery   r1   r   r   r   r   ?  s
    	
c               @   s>   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd ZdS )r   Nc             C   s.   g | _ g | _d | _d | _|d kr$t}|| _d S )N)_data_elem_last_tailr   _factory)r+   Zelement_factoryr   r   r   r-   ^  s    zTreeBuilder.__init__c             C   s   | j S )N)r   )r+   r   r   r   rw   g  s    zTreeBuilder.closec             C   s>   | j r:| jd k	r4d| j }| jr,|| j_n|| j_g | _ d S )Nr   )r   r   joinr   r2   r1   )r+   r1   r   r   r   _flushm  s    

zTreeBuilder._flushc             C   s   | j | d S )N)r   rA   )r+   r{   r   r   r   r{   y  s    zTreeBuilder.datac             C   sF   |    | || | _}| jr0| jd | | j| d| _|S )Nr   r   )r   r   r   r   rA   r   )r+   r    Zattrsr3   r   r   r   start}  s    zTreeBuilder.startc             C   s    |    | j | _d| _| jS )Nr   )r   r   popr   r   )r+   r    r   r   r   r     s    zTreeBuilder.end)N)	r   r   r   r-   rw   r   r{   r   r   r   r   r   r   r   Q  s   
	sentinelc               @   sh   e Zd ZeddfddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZeZdd Zdd ZdS )r   Nc             C   sV  |t k	rtjdtdd yddlm} W n> tk
rf   ydd l}W n tk
r`   tdY nX Y nX ||d}|d krt	 }| | _
| _| | _| _|j| _i | _| j|_t|dr| j|_t|d	r| j|_t|d
r|j|_t|dr|j|_t|dr|j|_d|_d|_d|_ d | _!i | _"yd|j# | _$W n t%k
rP   Y nX d S )Nz.The html argument of XMLParser() is deprecatedr6   )r7   r   )expatz7No module named expat; use SimpleXMLTreeBuilder insteadr   r   r   r{   commentpir   zExpat %d.%d.%d)&	_sentinelr8   r9   rJ   xml.parsersr   ImportErrorZpyexpatZParserCreater   ry   r   rd   _targeterror_error_names_defaultZDefaultHandlerExpandr!   _startStartElementHandler_endEndElementHandlerr{   ZCharacterDataHandlerr   ZCommentHandlerr   ZProcessingInstructionHandlerZbuffer_textordered_attributesspecified_attributes_doctypeentityversion_infoversionr   )r+   r   rd   r   r   ry   r   r   r   r-     sN    




zXMLParser.__init__c             C   s   | j }|j}x|D ]}|dkrDd|_d|_||| jfdd}||_q|dkrf||| jfdd}||_q|dkr||fdd}||_q|d	kr||fd
d}||_	qt
d| qW d S )Nr   r   c             S   s   |||| |f d S )Nr   )r    Z	attrib_inr   rA   r   r   r   r   handler  s    z%XMLParser._setevents.<locals>.handlerr   c             S   s   |||| f d S )Nr   )r    r   rA   r   r   r   r   r    s    zstart-nsc             S   s   ||| p
d|pdff d S )Nr   r   )r   r   r   rA   r   r   r   r    s    zend-nsc             S   s   ||d f d S )Nr   )r   r   rA   r   r   r   r    s    zunknown event %r)r   rA   r  r	  r  r  r  r  ZStartNamespaceDeclHandlerZEndNamespaceDeclHandlerr   )r+   Zevents_queueZevents_to_reportry   rA   Z
event_namer  r   r   r   r     s(    
zXMLParser._seteventsc             C   s&   t |}|j|_|j|jf|_|d S )N)r
   codelinenooffsetZposition)r+   rV   errr   r   r   _raiseerror  s    zXMLParser._raiseerrorc             C   sF   y| j | }W n2 tk
r@   |}d|kr2d| }|| j |< Y nX |S )Nr   r   )r  KeyError)r+   rU   namer   r   r   _fixname  s    zXMLParser._fixnamec             C   sV   | j }||}i }|rHx0tdt|dD ]}||d  |||| < q(W | j||S )Nr   r6   r   )r  ranger4   rd   r   )r+   r    Z	attr_listZfixnamer)   ir   r   r   r    s    zXMLParser._startc             C   s   | j | |S )N)rd   r   r  )r+   r    r   r   r   r    s    zXMLParser._endc          	   C   s  |d d }|dkry| j j}W n tk
r4   d S X y|| j|dd   W nZ tk
r   ddlm} |d|| jj	| jj
f }d|_| jj	|_| jj
|_|Y nX nD|dkr|d d	 d
krg | _n"| jd k	r|dkrd | _d S | }|sd S | j| t| j}|dkr| jd }|dkrb|dkrb| j\}}}	}
|	r|	dd }	n*|dkr|dkr| j\}}}
d }	nd S t| j dr| j ||	|
dd  n:| j| jkr| ||	|
dd  | ||	|
dd  d | _d S )Nr   r   r   r   )r   z'undefined entity %s: line %d, column %d   r   	   z	<!DOCTYPEr   r6   ZPUBLIC   ZSYSTEM   doctype)rd   r{   r   r  r  r   r   r   ry   ZErrorLineNumberZErrorColumnNumberr  r  r  r
  striprA   r4   r!   r  _XMLParser__doctype)r+   r1   r   Zdata_handlerr   r  nrG   r  pubidsystemr   r   r   r    sZ    





zXMLParser._defaultc             C   s   t dt d S )Nz[This method of XMLParser is deprecated.  Define doctype() method on the TreeBuilder target.)r8   r9   rJ   )r+   r  r!  r"  r   r   r   r  K  s    zXMLParser.doctypec          
   C   sF   y| j |d W n. | jk
r@ } z| | W d d }~X Y nX d S )Nr   )ry   Parser  r  )r+   r{   r   r   r   r   rv   [  s    zXMLParser.feedc          
   C   s   y| j dd W n. | jk
r@ } z| | W d d }~X Y nX z,y| jj}W n tk
rd   Y nX | S W d | ` | `| `| `X d S )Nr   r   )	ry   r#  r  r  rd   rw   r   r   r   )r+   r   Zclose_handlerr   r   r   rw   b  s    
zXMLParser.close)r   r   r   r   r-   r   r  r  r  r  r  r  r  rv   rw   r   r   r   r   r     s   .!4)rZ   )N)N)N)NN)NN)N)NN)N)N)N)7__all__r   r   r   r8   r   r   Zcollections.abcr   r   r   r   r
   r   r   r   r   r   r   r   r   contextmanagerr   r   r   r   rW   	NameErrorr   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   r   r   r   r   r   r   r   r   rF   Z_elementtreer   r   r   r   r   <module>K   s     A

0 t4
=22

05


I Y