U
    W+dH;                     @   s   d dl Zd dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZ d d
lmZ d dlmZ G dd deZdS )    N)AWSAuthConnection)handler)DistributionDistributionSummaryDistributionConfig)StreamingDistributionStreamingDistributionSummaryStreamingDistributionConfig)OriginAccessIdentity)OriginAccessIdentitySummary)OriginAccessIdentityConfig)InvalidationBatchInvalidationSummaryInvalidationListResultSet)	ResultSet)CloudFrontServerErrorc                       s2  e Zd ZdZdZdddddedddddf fdd	Zdd	 Zd
d ZdCd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dDd!d"Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, ZdEd-d.Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 ZdFd9d:Zd;d< ZdGd=d>Z dHd?d@Z!dIdAdBZ"  Z#S )JCloudFrontConnectionzcloudfront.amazonaws.comz
2010-11-01Nr   Tc                    s,   t t| j|||d||||||	||
d d S )NT)debugsecurity_tokenvalidate_certshttps_connection_factoryprofile_name)superr   __init__)selfZaws_access_key_idZaws_secret_access_keyportproxyZ
proxy_porthostr   r   r   r   r   	__class__ </tmp/pip-unpacked-wheel-dlxw5sjy/boto/cloudfront/__init__.pyr   +   s         zCloudFrontConnection.__init__c                 C   s0   |j }| D ]}| dkr||   S qd S )Netag)msgkeyslower)r   responseresponse_headerskeyr    r    r!   get_etag7   s
    zCloudFrontConnection.get_etagc                 C   s   dgS )NZ
cloudfrontr    )r   r    r    r!   _required_auth_capability>   s    z.CloudFrontConnection._required_auth_capabilityc                 C   s   |sdt fg}| dd| j|f }| }tj| |jdkrRt|j|j	||pXt
}|pbt }||f|}	t|	| }
tj||
 |	S )Nr   GET/%s/%s,  )r   make_requestVersionreadbotologr   statusr   reasonr   dictr   
XmlHandlerxmlsaxparseString)r   resourcetagsresult_set_classresult_set_kwargsr&   bodyrs_class	rs_kwargsrshr    r    r!   _get_all_objectsC   s    


z%CloudFrontConnection._get_all_objectsc                 C   s   d| j ||f }| d|}| }tj| |jdkrJt|j|j||| d}|j	}|
 D ]}	|	 dkrb||	 |_qbt|| }
tj||
 |S )N	/%s/%s/%sr+   r-   
connectionr"   )r/   r.   r0   r1   r2   r   r3   r   r4   r#   r$   r%   r"   r   r6   r7   r8   r9   )r   idr:   
dist_classurir&   r>   dr'   r(   rB   r    r    r!   	_get_infoT   s    

zCloudFrontConnection._get_infoc           	      C   s~   d| j ||f }| d|}| }tj| |jdkrJt|j|j||| d}| 	||_
t|| }tj|| |S )N/%s/%s/%s/configr+   r-   rE   )r/   r.   r0   r1   r2   r   r3   r   r4   r)   r"   r   r6   r7   r8   r9   )	r   rG   r:   Zconfig_classrI   r&   r>   rJ   rB   r    r    r!   _get_configd   s    

z CloudFrontConnection._get_configc           	      C   sz   t |trd}nd}d| j||f }|dd}| d||| }| }tj| |j	dkrpt
|j	|j|| |S )Nstreaming-distributiondistributionrL   text/xml)If-MatchContent-TypePUT   )
isinstancer	   r/   r.   to_xmlr0   r1   r2   r   r3   r   r4   r)   )	r   distribution_idr"   configr:   rI   headersr&   r>   r    r    r!   _set_configq   s    


z CloudFrontConnection._set_configc                 C   s   | j dd| j|f ddi| d}| }tj| |jdkrv|| d}t	|| }t
j|| | ||_|S t|j|j|d S )NPOSTr,   rR   rP   data   rE   )r.   r/   rV   r0   r1   r2   r   r3   r   r6   r7   r8   r9   r)   r"   r   r4   )r   rX   r:   rH   r&   r>   rJ   rB   r    r    r!   _create_object   s    

z#CloudFrontConnection._create_objectc                 C   sT   d| j ||f }| d|d|i}| }tj| |jdkrPt|j|j|d S )NrD   DELETErQ      )	r/   r.   r0   r1   r2   r   r3   r   r4   )r   rG   r"   r:   rI   r&   r>   r    r    r!   _delete_object   s    
z#CloudFrontConnection._delete_objectc                 C   s   dt fg}| d|S )Nr   rO   )r   rC   r   r;   r    r    r!   get_all_distributions   s    
z*CloudFrontConnection.get_all_distributionsc                 C   s   |  |dtS NrO   )rK   r   r   rW   r    r    r!   get_distribution_info   s    z*CloudFrontConnection.get_distribution_infoc                 C   s   |  |dtS re   )rM   r   rf   r    r    r!   get_distribution_config   s    z,CloudFrontConnection.get_distribution_configc                 C   s   |  |||S NrZ   r   rW   r"   rX   r    r    r!   set_distribution_config   s    z,CloudFrontConnection.set_distribution_config c                 C   s"   t ||||||d}| |dtS )Noriginenabledcaller_referencecnamescommenttrusted_signersrO   )r   r_   r   r   ro   rp   rq   rr   rs   rt   rX   r    r    r!   create_distribution   s     z(CloudFrontConnection.create_distributionc                 C   s   |  ||dS re   rb   r   rW   r"   r    r    r!   delete_distribution   s    z(CloudFrontConnection.delete_distributionc                 C   s   dt fg}| d|S )Nr   rN   )r   rC   rc   r    r    r!   get_all_streaming_distributions   s    
z4CloudFrontConnection.get_all_streaming_distributionsc                 C   s   |  |dtS NrN   )rK   r   rf   r    r    r!   get_streaming_distribution_info   s    z4CloudFrontConnection.get_streaming_distribution_infoc                 C   s   |  |dtS r{   )rM   r	   rf   r    r    r!   !get_streaming_distribution_config   s    z6CloudFrontConnection.get_streaming_distribution_configc                 C   s   |  |||S ri   rj   rk   r    r    r!   !set_streaming_distribution_config   s    z6CloudFrontConnection.set_streaming_distribution_configc                 C   s"   t ||||||d}| |dtS )Nrn   rN   )r	   r_   r   ru   r    r    r!   create_streaming_distribution   s     z2CloudFrontConnection.create_streaming_distributionc                 C   s   |  ||dS r{   rw   rx   r    r    r!   delete_streaming_distribution   s    z2CloudFrontConnection.delete_streaming_distributionc                 C   s   dt fg}| d|S )NZ%CloudFrontOriginAccessIdentitySummary!origin-access-identity/cloudfront)r   rC   rc   r    r    r!   get_all_origin_access_identity   s    z3CloudFrontConnection.get_all_origin_access_identityc                 C   s   |  |dtS Nr   )rK   r
   r   	access_idr    r    r!   get_origin_access_identity_info   s    z4CloudFrontConnection.get_origin_access_identity_infoc                 C   s   |  |dtS r   )rM   r   r   r    r    r!   !get_origin_access_identity_config   s    z6CloudFrontConnection.get_origin_access_identity_configc                 C   s   |  |||S ri   rj   )r   r   r"   rX   r    r    r!   !set_origin_access_identity_config   s    z6CloudFrontConnection.set_origin_access_identity_configc                 C   s   t ||d}| |dtS )N)rq   rs   r   )r   r_   r
   )r   rq   rs   rX   r    r    r!   create_origin_access_identity   s    z2CloudFrontConnection.create_origin_access_identityc                 C   s   |  ||dS r   rw   )r   r   r"   r    r    r!   delete_origin_access_identity   s    z2CloudFrontConnection.delete_origin_access_identityc                 C   s   t |tst|}| |_d| j|f }| jd|ddi| d}| }|jdkrpt	|| }t
j|| |S t|j|j|dS )zQCreates a new invalidation request
            :see: http://goo.gl/8vECq
        z /%s/distribution/%s/invalidationr[   rR   rP   r\   r^   N)rU   r   rF   r/   r.   rV   r0   r3   r   r6   r7   r8   r9   r   r4   )r   rW   pathsrq   rI   r&   r>   rB   r    r    r!   create_invalidation_request   s     

z0CloudFrontConnection.create_invalidation_requestc           	      C   sn   d| j ||f }| d|ddi}| }|jdkrZtg }t|| }tj	|| |S t
|j|j|d S )Nz#/%s/distribution/%s/invalidation/%sr+   rR   rP   rT   )r/   r.   r0   r3   r   r   r6   r7   r8   r9   r   r4   )	r   rW   Z
request_idrq   rI   r&   r>   r   rB   r    r    r!   invalidation_request_status	  s    
z0CloudFrontConnection.invalidation_request_statusc                 C   s   d| }t  }|r||d< |r&||d< |r\|d|  7 }| D ]\}}|d||f 7 }qBdtfg}t}	t | |||d}
| j|||	|
dS )	a  
        Get all invalidation requests for a given CloudFront distribution.
        This returns an instance of an InvalidationListResultSet that
        automatically handles all of the result paging, etc. from CF - you just
        need to keep iterating until there are no more results.

        :type distribution_id: string
        :param distribution_id: The id of the CloudFront distribution

        :type marker: string
        :param marker: Use this only when paginating results and only in
                       follow-up request after you've received a response where
                       the results are truncated. Set this to the value of the
                       Marker element in the response you just received.

        :type max_items: int
        :param max_items: Use this only when paginating results and only in a
                          follow-up request to indicate the maximum number of
                          invalidation requests you want in the response. You
                          will need to pass the next_marker property from the
                          previous InvalidationListResultSet response in the
                          follow-up request in order to get the next 'page' of
                          results.

        :rtype: :class:`boto.cloudfront.invalidation.InvalidationListResultSet`
        :returns: An InvalidationListResultSet iterator that lists invalidation
                  requests for a given CloudFront distribution. Automatically
                  handles paging the results.
        zdistribution/%s/invalidationMarkerZMaxItemsz?%s=%sz&%s=%sr   )rF   rW   	max_itemsmarker)r<   r=   )r5   popitemitemsr   r   rC   )r   rW   r   r   rI   paramskvr;   r?   r@   r    r    r!   get_invalidation_requests  s&    
 
z.CloudFrontConnection.get_invalidation_requests)NN)rm   Nrm   N)rm   Nrm   N)rm   rm   )N)N)NN)$__name__
__module____qualname__ZDefaultHostr/   r   r)   r*   rC   rK   rM   rZ   r_   rb   rd   rg   rh   rl   rv   ry   rz   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   __classcell__r    r    r   r!   r   &   sp           

      
     

 
 
  r   )Zxml.saxr7   timer1   Zboto.connectionr   r   Zboto.cloudfront.distributionr   r   r   r   r   r	   Zboto.cloudfront.identityr
   r   r   Zboto.cloudfront.invalidationr   r   r   Zboto.resultsetr   Zboto.cloudfront.exceptionr   r   r    r    r    r!   <module>   s   