U
    3d                     @   sT   d dl Z d dlmZ d dlmZ G dd deZG dd deZG dd	 d	eZdS )
    N)urllib)	ResultSetc                   @   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d Zdd Zdd Zdd ZdS )InvalidationBatchzA simple invalidation request.
        :see: http://docs.amazonwebservices.com/AmazonCloudFront/2010-08-01/APIReference/index.html?InvalidationBatchDatatype.html
    N c                 C   s@   |pg | _ || _|| _| js*tt | _|r6|| _n|| _dS )z_Create a new invalidation request:
            :paths: An array of paths to invalidate
        N)pathsdistributioncaller_referencestruuidZuuid4
connection)selfr   r   r   r    r   @/tmp/pip-unpacked-wheel-d7dsrkjd/boto/cloudfront/invalidation.py__init__!   s    
zInvalidationBatch.__init__c                 C   s
   d| j  S )Nz<InvalidationBatch: %s>idr   r   r   r   __repr__2   s    zInvalidationBatch.__repr__c                 C   s   | j |S )z-Add another path to this invalidation request)r   appendr   pathr   r   r   add5   s    zInvalidationBatch.addc                 C   s   | j |S )z,Remove a path from this invalidation request)r   remover   r   r   r   r   9   s    zInvalidationBatch.removec                 C   s
   t | jS N)iterr   r   r   r   r   __iter__=   s    zInvalidationBatch.__iter__c                 C   s
   | j | S r   r   )r   ir   r   r   __getitem__@   s    zInvalidationBatch.__getitem__c                 C   s   || j |< d S r   r   )r   kvr   r   r   __setitem__C   s    zInvalidationBatch.__setitem__c                 C   s$   |d dksd| }t jj|ddS )zwEscape a path, make sure it begins with a slash and contains no invalid characters. Retain literal wildcard characters.r   /z/%sz/*)safe)r   parsequote)r   pr   r   r   escapeF   s    zInvalidationBatch.escapec                 C   sZ   | j dk	std}|d| j j 7 }| jD ]}|d| | 7 }q(|d| j 7 }|d7 }|S )zGet this batch as XMLNz'<?xml version="1.0" encoding="UTF-8"?>
zD<InvalidationBatch xmlns="http://cloudfront.amazonaws.com/doc/%s/">
z    <Path>%s</Path>
z*    <CallerReference>%s</CallerReference>
z</InvalidationBatch>
)r   AssertionErrorVersionr   r'   r   )r   sr&   r   r   r   to_xmlL   s    
zInvalidationBatch.to_xmlc                 C   s   |dkrg | _ d S )Nr   r   r   nameattrsr   r   r   r   startElementW   s    zInvalidationBatch.startElementc                 C   sX   |dkr| j | n>|dkr&|| _n.|dkr6|| _n|dkrF|| _n|dkrT|| _d S )NPathStatusIdZ
CreateTimeZCallerReference)r   r   statusr   Zcreate_timer   r   r-   valuer   r   r   r   
endElement\   s    zInvalidationBatch.endElement)NNNr   )__name__
__module____qualname____doc__r   r   r   r   r   r   r!   r'   r+   r/   r6   r   r   r   r   r      s   
r   c                   @   s<   e Zd ZdZdddZdd Zd	d
 Zdd ZdddZdS )InvalidationListResultSetaG  
    A resultset for listing invalidations on a given CloudFront distribution.
    Implements the iterator interface and transparently handles paging results
    from CF so even if you have many thousands of invalidations on the
    distribution you can iterate over all invalidations in a reasonably
    efficient manner.
    Nr   Fc	           	      C   sF   |pg | _ || _|| _|| _|| _|| _|d k| _|| _|p>g | _d S r   )	markersr   distribution_idmarkernext_marker	max_itemsauto_paginateis_truncated_inval_cache)	r   r<   r   r=   Zinvalidationsr>   r?   r@   rB   r   r   r   r   r   s    

z"InvalidationListResultSet.__init__c                 c   s^   | j }| j}| }|jD ]
}|V  q| js,dS |jrZ|j||j|jd}|jD ]
}|V  qLq,dS )zu
        A generator function for listing invalidation requests for a given
        CloudFront distribution.
        N)r>   r@   )r   r=   rC   rA   rB   Zget_invalidation_requestsr?   r@   )r   connr=   Z
result_setZinvalr   r   r   r   r      s    

z"InvalidationListResultSet.__iter__c                 C   s>   | j D ]2\}}||kr||| jd}| j| |  S qd S )N)r=   )r<   r=   rC   r   )r   r-   r.   r   Z	root_elemhandlerobjr   r   r   r/      s
    z&InvalidationListResultSet.startElementc                 C   sL   |dkr|  || _n2|dkr&|| _n"|dkr6|| _n|dkrHt|| _d S )NZIsTruncatedMarkerZ
NextMarkerZMaxItems)
to_booleanrB   r>   r?   intr@   r4   r   r   r   r6      s    z$InvalidationListResultSet.endElementtruec                 C   s   ||krdS dS d S )NTFr   )r   r5   Z
true_valuer   r   r   rH      s    z$InvalidationListResultSet.to_boolean)NNNNr   NNF)rJ   )	r7   r8   r9   r:   r   r   r/   r6   rH   r   r   r   r   r;   j   s            

r;   c                   @   sB   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S )InvalidationSummaryz
    Represents InvalidationSummary complex type in CloudFront API that lists
    the id and status of a given invalidation request.
    Nr   c                 C   s   || _ || _|| _|| _d S r   )r   r=   r   r3   )r   r   r=   r   r3   r   r   r   r      s    zInvalidationSummary.__init__c                 C   s
   d| j  S )Nz<InvalidationSummary: %s>r   r   r   r   r   r      s    zInvalidationSummary.__repr__c                 C   s   d S r   r   r,   r   r   r   r/      s    z InvalidationSummary.startElementc                 C   s"   |dkr|| _ n|dkr|| _d S )Nr2   r1   )r   r3   r4   r   r   r   r6      s    zInvalidationSummary.endElementc                 C   s   | j | jS )a  
        Returns a Distribution object representing the parent CloudFront
        distribution of the invalidation request listed in the
        InvalidationSummary.

        :rtype: :class:`boto.cloudfront.distribution.Distribution`
        :returns: A Distribution object representing the parent CloudFront
                  distribution  of the invalidation request listed in the
                  InvalidationSummary
        )r   Zget_distribution_infor=   r   r   r   r   get_distribution   s    z$InvalidationSummary.get_distributionc                 C   s   | j | j| jS )aa  
        Returns an InvalidationBatch object representing the invalidation
        request referred to in the InvalidationSummary.

        :rtype: :class:`boto.cloudfront.invalidation.InvalidationBatch`
        :returns: An InvalidationBatch object representing the invalidation
                  request referred to by the InvalidationSummary
        )r   Zinvalidation_request_statusr=   r   r   r   r   r   get_invalidation_request   s    	 z,InvalidationSummary.get_invalidation_request)NNr   r   )
r7   r8   r9   r:   r   r   r/   r6   rL   rM   r   r   r   r   rK      s     
rK   )	r
   Zboto.compatr   Zboto.resultsetr   objectr   r;   rK   r   r   r   r   <module>   s
   N?