509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
¹'¾YL!  ã               @   s‚   d Z ddlmZ ddlmZ ddlmZmZ ddlmZm	Z	 G dd„ dej
ƒZdd	„ ZG d
d„ deƒZG dd„ deƒZdd„ ZdS )aI  
SAX-based adapter to copy trees from/to the Python standard library.

Use the `ElementTreeContentHandler` class to build an ElementTree from
SAX events.

Use the `ElementTreeProducer` class or the `saxify()` function to fire
the SAX events of an ElementTree against a SAX ContentHandler.

See http://codespeak.net/lxml/sax.html
é    )ÚContentHandler)Úetree)ÚElementTreeÚ
SubElement)ÚCommentÚProcessingInstructionc               @   s   e Zd ZdZdS )ÚSaxErrorzGeneral SAX error.
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   ú/usr/lib64/python3.6/sax.pyr      s   r   c             C   s0   | d dkr$t | dd … jddƒƒS d | fS d S )Nr   ú{é   ú})ÚtupleÚsplit)Útagr   r   r   Ú	_getNsTag   s    r   c               @   s˜   e Zd ZdZd dd„Zdd„ Zeeej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dd„ Zd"dd„Zdd„ Zdd„ ZeZdS )#ÚElementTreeContentHandlerz/Build an lxml ElementTree from SAX events.
    Nc             C   sL   t j| ƒ d | _g | _g | _d | _d d gi| _i | _|d krBtj	}|| _
d S )N)r   Ú__init__Ú_rootÚ_root_siblingsÚ_element_stackÚ_default_nsÚ_ns_mappingÚ_new_mappingsr   ZElementÚ_makeelement)ÚselfZmakeelementr   r   r   r   "   s    
z"ElementTreeContentHandler.__init__c             C   s
   t | jƒS )z=Contains the generated ElementTree after parsing is finished.)r   r   )r   r   r   r   Ú
_get_etree.   s    z$ElementTreeContentHandler._get_etree)Údocc             C   s   d S )Nr   )r   Zlocatorr   r   r   ÚsetDocumentLocator4   s    z,ElementTreeContentHandler.setDocumentLocatorc             C   s   d S )Nr   )r   r   r   r   ÚstartDocument7   s    z'ElementTreeContentHandler.startDocumentc             C   s   d S )Nr   )r   r   r   r   ÚendDocument:   s    z%ElementTreeContentHandler.endDocumentc             C   sR   || j |< y| j| j|ƒ W n  tk
r>   |g| j|< Y nX |d krN|| _d S )N)r   r   ÚappendÚKeyErrorr   )r   ÚprefixÚurir   r   r   ÚstartPrefixMapping=   s    
z,ElementTreeContentHandler.startPrefixMappingc             C   s(   | j | }|jƒ  |d kr$|d | _d S )Nr   éÿÿÿÿ)r   Úpopr   )r   r'   Zns_uri_listr   r   r   ÚendPrefixMappingF   s    
z*ElementTreeContentHandler.endPrefixMappingc             C   s4   |\}}|rd| }n| j r,d| j |f }n|}|S )Nz{%s}%s)r   )r   Zns_name_tupleÚns_uriÚ
local_nameÚel_tagr   r   r   Ú	_buildTagL   s    
z#ElementTreeContentHandler._buildTagc             C   s   | j |ƒ}|rri }y|jƒ }W n tk
r:   |jƒ }Y nX x8|D ]*\}}|d r\d| }	n|d }	|||	< qBW nd }| j}
| jd krÔ| j||| jƒ }| _| jrÆt	|dƒrÆx| jD ]}|j
|ƒ q´W | jd d …= nt|
d ||| jƒ}|
j|ƒ | jjƒ  d S )Nr   z{%s}%sr   Úaddpreviousr*   )r0   Z	iteritemsÚAttributeErrorÚitemsr   r   r   r   r   Úhasattrr1   r   r%   Úclear)r   Úns_nameÚqnameÚ
attributesZel_nameZattrsZiter_attributesZ
name_tupleÚvalueZ	attr_nameZelement_stackÚelementÚsiblingr   r   r   ÚstartElementNSV   s0    





z(ElementTreeContentHandler.startElementNSc             C   s6   t ||ƒ}| jd kr"| jj|ƒ n| jd j|ƒ d S )Nr   r*   )r   r   r   r%   r   )r   ÚtargetÚdataZpir   r   r   ÚprocessingInstructionw   s    

z/ElementTreeContentHandler.processingInstructionc             C   s.   | j jƒ }| j|ƒ}||jkr*td| ƒ‚d S )NzUnexpected element closed: )r   r+   r0   r   r   )r   r6   r7   r:   r/   r   r   r   ÚendElementNS~   s    


z&ElementTreeContentHandler.endElementNSc             C   s0   |rt dd„ |jƒ D ƒƒ}| jd |f||ƒ d S )Nc             S   s   g | ]\}}d |f|f‘qS )Nr   )Ú.0ÚkÚvr   r   r   ú
<listcomp>‡   s    z:ElementTreeContentHandler.startElement.<locals>.<listcomp>)Údictr3   r<   )r   Únamer8   r   r   r   ÚstartElement„   s    z&ElementTreeContentHandler.startElementc             C   s   | j d |f|ƒ d S )N)r@   )r   rF   r   r   r   Ú
endElement‹   s    z$ElementTreeContentHandler.endElementc             C   sP   | j d }y|d }|jpd| |_W n$ tk
rJ   |jp>d| |_Y nX d S )Nr   Ú r*   r*   )r   ÚtailÚ
IndexErrorÚtext)r   r>   Zlast_elementr   r   r   Ú
charactersŽ   s    
z$ElementTreeContentHandler.characters)N)N)N)r	   r
   r   r   r   r    Úpropertyr   r"   r#   r$   r)   r,   r0   r<   r?   r@   rG   rH   rM   ZignorableWhitespacer   r   r   r   r      s"   
	

!

r   c               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚElementTreeProducerz5Produces SAX events for an element and children.
    c             C   sT   y|j ƒ }W n tk
r$   |}Y nX || _|| _ddlm} || _|i i ƒ| _d S )Nr   )ÚAttributesNSImpl)Zgetrootr2   Ú_elementÚ_content_handlerZxml.sax.xmlreaderrP   Ú_attr_classÚ_empty_attributes)r   Úelement_or_treeÚcontent_handlerr:   Z
attr_classr   r   r   r   ž   s    
zElementTreeProducer.__init__c             C   sÈ   | j jƒ  | j}t|dƒrrg }|jƒ }x&t|dd ƒtkrL|j|ƒ |jƒ }q(W x"|d d d… D ]}| j|i ƒ q^W | j|i ƒ t|dƒrº|j	ƒ }x(t|dd ƒtkr¸| j|i ƒ |j	ƒ }q’W | j j
ƒ  d S )NÚgetpreviousr   r   Úgetnextr*   )rR   r#   rQ   r4   rW   Úgetattrr   r%   Ú_recursive_saxifyrX   r$   )r   r:   Zsiblingsr;   r   r   r   Úsaxify©   s"    



zElementTreeProducer.saxifyc             C   sx  | j }|j}|tks|tkrJ|tkr4|j|j|jƒ |jrF|j|jƒ d S g }| j	}|j
ƒ }|r²i }i }	x:|D ]2\}
}t|
ƒ}|||< ||d |d ||ƒ|	|< qnW | j||	ƒ}n| j}t|ƒ\}}|||||ƒ}x|D ]\}}|j||ƒ qØW |j||f||ƒ |j�r|j|jƒ x|D ]}| j||ƒ �qW |j||f|ƒ x|D ]\}}|j|ƒ �qHW |j�rt|j|jƒ d S )Nr   r   )rR   r   r   r   r?   r=   rL   rJ   rM   Ú_build_qnamer3   r   rS   rT   r)   r<   rZ   r@   r,   )r   r:   ÚprefixesrV   r   Únew_prefixesZbuild_qnameZattribsZattr_valuesZattr_qnamesZattr_ns_namer9   Zattr_ns_tupleZsax_attributesr-   r.   r7   r'   r(   Zchildr   r   r   rZ   À   sJ    

z%ElementTreeProducer._recursive_saxifyc             C   s\   |d kr|S y|| }W n6 t k
rN   dt|ƒ  }||< |j||fƒ Y nX |d | S )Nzns%02dú:)r&   Úlenr%   )r   r-   r.   r]   r^   r'   r   r   r   r\   ë   s    z ElementTreeProducer._build_qnameN)r	   r
   r   r   r   r[   rZ   r\   r   r   r   r   rO   ›   s
   +rO   c             C   s   t | |ƒjƒ S )zlOne-shot helper to generate SAX events from an XML tree and fire
    them against a SAX ContentHandler.
    )rO   r[   )rU   rV   r   r   r   r[   õ   s    r[   N)r   Zxml.sax.handlerr   Zlxmlr   Z
lxml.etreer   r   r   r   Z	LxmlErrorr   r   r   ÚobjectrO   r[   r   r   r   r   Ú<module>   s   |Z