B
    è?F[†  ã               @   sX   d dl Zd dlZd dlmZ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)ÚsixÚStringIOc               @   sJ   e Zd 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S )ÚResponseGroupz„A Generic "Response Group", which can
    be anything from the entire list of Items to
    specific response elements within an itemNc             C   s$   || _ || _g | _d| _tƒ | _dS )zInitialize this ItemN)Ú_connectionÚ	_nodenameÚ	_nodepathÚ_curobjr   Ú_xml)ÚselfÚ
connectionÚnodename© r   ú,lib/python3.7/site-packages/boto/ecs/item.pyÚ__init__    s
    zResponseGroup.__init__c             C   s   d| j j| jf S )Nz<%s: %s>)Ú	__class__Ú__name__Ú__dict__)r
   r   r   r   Ú__repr__(   s    zResponseGroup.__repr__c             C   s   | j  |¡S )N)r   Úget)r
   Únamer   r   r   r   .   s    zResponseGroup.getc             C   s   || j |< d S )N)r   )r
   r   Úvaluer   r   r   Úset1   s    zResponseGroup.setc             C   s   d| j | j ¡ | j f S )Nz<%s>%s</%s>)r   r	   Úgetvalue)r
   r   r   r   Úto_xml4   s    zResponseGroup.to_xmlc             C   sb   | j  d| ¡ | j |¡ t| jƒdkrHt| jƒ}|  ||¡ || _n| jr^| j 	|||¡ d S )Nz<%s>é   )
r	   Úwriter   ÚappendÚlenr   r   r   r   ÚstartElement)r
   r   Úattrsr   Úobjr   r   r   r   :   s    
zResponseGroup.startElementc             C   s–   | j  dt |¡ dd¡|f ¡ t| jƒdkr4d S d }|  |¡}t| jƒdkrr|sX|sd|  ||¡ | j	rˆd | _	n| j	rˆ| j	 
|||¡ | j ¡  d S )Nz%s</%s>z	&amp;amp;z&amp;r   r   )r	   r   ÚcgiÚescapeÚreplacer   r   r   r   r   Ú
endElementÚpop)r
   r   r   r   r    Zcurvalr   r   r   r$   E   s    "

zResponseGroup.endElement)NN)r   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r$   r   r   r   r   r      s   
r   c               @   s   e Zd ZdZddd„ZdS )ÚItemzA single ItemNc             C   s   t  | |d¡ dS )zInitialize this Itemr)   N)r   r   )r
   r   r   r   r   r   [   s    zItem.__init__)N)r   r&   r'   r(   r   r   r   r   r   r)   X   s   r)   c               @   sF   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZeZdd„ Z	dd„ Z
dS )ÚItemSetzbA special ResponseGroup that has built-in paging, and
    only creates new Items on the "Item" tagr   c             C   sN   t  | |d¡ g | _d | _|| _|| _|| _d | _d| _d| _	d| _
g | _d S )NZItemsr   F)r   r   ÚobjsÚiterÚpageÚactionÚparamsÚcurItemÚtotal_resultsÚtotal_pagesÚis_validÚerrors)r
   r   r.   r/   r-   r   r   r   r   c   s    zItemSet.__init__c             C   s4   |dkrt | jƒ| _n| jd k	r0| j |||¡ d S )Nr)   )r)   r   r0   r   )r
   r   r   r   r   r   r   r   p   s
    
zItemSet.startElementc             C   sº   |dkr|| _ n¦|dkr || _n–|dkr8|dkr¶d| _n~|dkrT| j |d dœ¡ nb|dkrl|| jd	 d< nJ|d
krœ| j | j¡ | j | j 	¡ ¡ d | _n| jd k	r¶| j 
|||¡ d S )NZTotalResultsZ
TotalPagesZIsValidÚTrueTÚCode)r6   ÚMessager7   éÿÿÿÿr)   )r1   r2   r3   r4   r   r+   r0   r	   r   r   r$   )r
   r   r   r   r   r   r   r$   w   s$    
zItemSet.endElementc          	   C   sŠ   | j dkrt | jƒ| _ y
t| j ƒS  tk
r„   d| _ g | _t| jƒt| jƒk r~|  jd7  _| j | j	| j
| j| ¡ t| ƒS ‚ Y nX dS )zSpecial paging functionalityNr   )r,   r+   ÚnextÚStopIterationÚintr-   r2   r   Zget_responser.   r/   )r
   r   r   r   Ú__next__‹   s    

zItemSet.__next__c             C   s   | S )Nr   )r
   r   r   r   Ú__iter__   s    zItemSet.__iter__c             C   s   x| D ]}qW t  | ¡S )z"Override to first fetch everything)r   r   )r
   Úitemr   r   r   r       s    
zItemSet.to_xmlN)r   )r   r&   r'   r(   r   r   r$   r<   r9   r=   r   r   r   r   r   r*   _   s   
r*   )Zxml.saxZxmlr!   Zboto.compatr   r   ZsaxZContentHandlerr   r)   r*   r   r   r   r   Ú<module>   s
   =