B
    ?F[                 @   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
   0lib/python3.7/site-packages/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	   Z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saxZ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 )N)dictr   r   element_namer   Zmklistlist_markeritem_markerstackpythonize_nameparent)r	   r   r)   r,   r.   r*   r+   r-   r
   r
   r   r   <   s    
zElement.__init__c          	   C   sX   || kr| | S x>| D ]6}| | }t |try
t||S  tk
rJ   Y qX qW td S )N)r   r"   getattrAttributeError)r	   keyker
   r
   r   __getattr__L   s    



zElement.__getattr__c             C   s   | j rt |}|S )N)r-   r   )r	   r   r
   r
   r   get_nameX   s    
zElement.get_namec             C   s   | j | xB| jD ]8}||rt| j|| j| j| j}|| | |< |S qW t	| j dkr| j d }t
| j|| j | | j| j| j}|| | |< ||fS d S d S )Nr   r   )r,   r   r*   endswithListElementr   r+   r-   r5   lenr"   )r	   r   r   r   lmlr)   r3   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   )
r8   r,   r   stripr   r.   r"   r5   r7   r   )r	   r   valuer   r
   r
   r   r   o   s    
zElement.endElement)NNNNr#   r%   F)r   r    r!   r   r4   r5   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 )r7   Nr$   )r&   r'   Fc             C   s,   t |  || _|| _|| _|| _|| _d S )N)listr   r   r)   r*   r+   r-   )r	   r   r)   r*   r+   r-   r
   r
   r   r   |   s    
zListElement.__init__c             C   s   | j rt |}|S )N)r-   r   )r	   r   r
   r
   r   r5      s    
zListElement.get_namec             C   s   xF| j D ]<}||rt| j|| j | j| j}t| | || |S qW || jkr|t| j|| | j | j| jd}| 	| |S d S d S )N)r.   r*   r+   r-   )
r*   r6   r7   r   r+   r-   setattrr5   r"   r   )r	   r   r   r   r9   r:   r3   r
   r
   r   r      s    




zListElement.startElementc             C   sx   || j krbt| dkrtg }x,| D ]$}t|tr t|dkr || q W x*|D ]}| | qNW nt| | || d S )Nr   )r)   r8   r   r"   r   remover>   r5   )r	   r   r<   r   emptyr3   r
   r
   r   r      s    



zListElement.endElement)r   r    r!   r   r5   r   r   r
   r
   r
   r   r7   z   s   r7   )Zxml.saxr   Zbotor   r   ZContentHandlerr   r(   r"   r=   r7   r
   r
   r
   r   <module>   s   @