U
    3d                     @   sL   d dl Zd dlmZ G dd dejjZG dd deZG dd de	Z
dS )	    N)utilsc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )
XmlHandlerc                 C   s   || _ d|fg| _d| _d S )Nroot )
connectionnodescurrent_text)selfZ	root_noder    r
   5/tmp/pip-unpacked-wheel-d7dsrkjd/boto/jsonresponse.py__init__   s    zXmlHandler.__init__c                 C   sT   d| _ | jd d ||| j}|d k	rPt|tr@| j| n| j||f d S )Nr      )r   r   startElementr   
isinstancetupleappend)r	   nameattrstr
   r
   r   r   "   s    
zXmlHandler.startElementc                 C   sB   | j d d || j| j | j d d |kr8| j   d| _d S )Nr   r   r   r   )r   
endElementr   r   popr	   r   r
   r
   r   r   +   s    
zXmlHandler.endElementc                 C   s   |  j |7  _ d S N)r   )r	   contentr
   r
   r   
characters1   s    zXmlHandler.charactersc                 C   s&   t |ts|d}tj||  d S )Nzutf-8)r   bytesencodexmlsaxparseString)r	   sr
   r
   r   parse4   s    

zXmlHandler.parseN)__name__
__module____qualname__r   r   r   r   r"   r
   r
   r
   r   r      s
   	r   c                   @   s6   e Zd ZdddZdd Zd	d
 Zdd Zdd ZdS )ElementNSetmemberitemFc                 C   sT   t |  || _|| _t|| _t|| _|d kr>g | _n|| _|| _	|| _
d S r   )dictr   r   element_namer   Zmklistlist_markeritem_markerstackpythonize_nameparent)r	   r   r-   r0   r2   r.   r/   r1   r
   r
   r   r   <   s    
zElement.__init__c              	   C   sZ   || kr| | S | D ]<}| | }t |trzt||W   S  tk
rN   Y qX qtd S r   )r   r&   getattrAttributeError)r	   keyker
   r
   r   __getattr__L   s    
zElement.__getattr__c                 C   s   | j rt |}|S r   r1   r   r   r
   r
   r   get_nameX   s    
zElement.get_namec                 C   s   | j | | jD ]<}||rt| j|| j| j| j}|| | |< |  S qt	| j dkr| j d }t
| j|| j | | j| j| j}|| | |< ||fS d S d S )Nr   r   )r0   r   r.   endswithListElementr   r/   r1   r:   lenr&   )r	   r   r   r   lmlr-   r7   r
   r
   r   r   ]   s&    

 

 zElement.startElementc                 C   s^   t | jdkr| j  | }|rZt| jtrB|| j| |< nt| jtrZ| j	| d S Nr   )
r=   r0   r   stripr   r2   r&   r:   r<   r   )r	   r   valuer   r
   r
   r   r   o   s    
zElement.endElement)NNNNr'   r)   F)r#   r$   r%   r   r8   r:   r   r   r
   r
   r
   r   r&   :   s           
r&   c                   @   s:   e Zd ZdddgddfddZdd Zd	d
 Zdd ZdS )r<   Nr(   r)   Fc                 C   s,   t |  || _|| _|| _|| _|| _d S r   )listr   r   r-   r.   r/   r1   )r	   r   r-   r.   r/   r1   r
   r
   r   r   |   s    
zListElement.__init__c                 C   s   | j rt |}|S r   r9   r   r
   r
   r   r:      s    
zListElement.get_namec                 C   s   | j D ]@}||rt| j|| j | j| j}t| | || |  S q|| jkr|t| j|| | j | j| jd}| 	| |S d S d S )N)r2   r.   r/   r1   )
r.   r;   r<   r   r/   r1   setattrr:   r&   r   )r	   r   r   r   r>   r?   r7   r
   r
   r   r      s$    

 



zListElement.startElementc                 C   sp   || j krZt| dkrlg }| D ]$}t|trt|dkr|| q|D ]}| | qHnt| | || d S r@   )r-   r=   r   r&   r   removerD   r:   )r	   r   rB   r   emptyr7   r
   r
   r   r      s    

zListElement.endElement)r#   r$   r%   r   r:   r   r   r
   r
   r
   r   r<   z   s    

r<   )Zxml.saxr   Zbotor   r   ContentHandlerr   r,   r&   rC   r<   r
   r
   r
   r   <module>   s   @