o
    ȷeH;                     @   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                       sH  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	 	 	dDd-d.Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 ZdEd9d:Zd;d< Z	dFd=d>Z 	dFd?d@Z!		dCdAdBZ"  Z#S )G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__)selfaws_access_key_idaws_secret_access_keyportproxy
proxy_porthostr   r   r   r   r   	__class__ O/var/www/ideatree/venv/lib/python3.10/site-packages/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 )N
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r)t|j|j	||p,t
}|p1t }||fi |}	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r%t|j|j||| d}|j	}|
 D ]}	|	 dkr>||	 |_q1t|| }
tj||
 |S )N	/%s/%s/%sr/   r1   
connectionr%   )r3   r2   r4   r5   r6   r   r7   r   r8   r&   r'   r(   r%   r   r:   r;   r<   r=   )r   idr>   
dist_classurir)   rB   dr*   r+   rF   r#   r#   r$   	_get_infoT   s   


zCloudFrontConnection._get_infoc           	      C   s~   d| j ||f }| d|}| }tj| |jdkr%t|j|j||| d}| 	||_
t|| }tj|| |S )N/%s/%s/%s/configr/   r1   rI   )r3   r2   r4   r5   r6   r   r7   r   r8   r,   r%   r   r:   r;   r<   r=   )	r   rK   r>   config_classrM   r)   rB   rN   rF   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r8t
|j	|j|| |S )Nstreaming-distributiondistributionrP   text/xml)If-MatchContent-TypePUT   )
isinstancer	   r3   r2   to_xmlr4   r5   r6   r   r7   r   r8   r,   )	r   distribution_idr%   configr>   rM   headersr)   rB   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r;|| d}t	|| }t
j|| | ||_|S t|j|j|)NPOSTr0   rW   rU   data   rI   )r2   r3   r[   r4   r5   r6   r   r7   r   r:   r;   r<   r=   r,   r%   r   r8   )r   r]   r>   rL   r)   rB   rN   rF   r#   r#   r$   _create_object   s   

z#CloudFrontConnection._create_objectc                 C   sT   d| j ||f }| d|d|i}| }tj| |jdkr(t|j|j|d S )NrH   DELETErV      )	r3   r2   r4   r5   r6   r   r7   r   r8   )r   rK   r%   r>   rM   r)   rB   r#   r#   r$   _delete_object   s   
z#CloudFrontConnection._delete_objectc                 C      dt fg}| d|S )Nr   rT   )r   rG   r   r?   r#   r#   r$   get_all_distributions      
z*CloudFrontConnection.get_all_distributionsc                 C      |  |dtS NrT   )rO   r   r   r\   r#   r#   r$   get_distribution_info      z*CloudFrontConnection.get_distribution_infoc                 C   rl   rm   )rR   r   rn   r#   r#   r$   get_distribution_config      z,CloudFrontConnection.get_distribution_configc                 C      |  |||S Nr_   r   r\   r%   r]   r#   r#   r$   set_distribution_config   rp   z,CloudFrontConnection.set_distribution_config c                 C   "   t ||||||d}| |dtS )Noriginenabledcaller_referencecnamescommenttrusted_signersrT   )r   rd   r   r   r{   r|   r}   r~   r   r   r]   r#   r#   r$   create_distribution   s   z(CloudFrontConnection.create_distributionc                 C      |  ||dS rm   rg   r   r\   r%   r#   r#   r$   delete_distribution   rp   z(CloudFrontConnection.delete_distributionc                 C   rh   )Nr   rS   )r   rG   ri   r#   r#   r$   get_all_streaming_distributions   rk   z4CloudFrontConnection.get_all_streaming_distributionsc                 C   rl   NrS   )rO   r   rn   r#   r#   r$   get_streaming_distribution_info   rr   z4CloudFrontConnection.get_streaming_distribution_infoc                 C   rl   r   )rR   r	   rn   r#   r#   r$   !get_streaming_distribution_config   rr   z6CloudFrontConnection.get_streaming_distribution_configc                 C   rs   rt   ru   rv   r#   r#   r$   !set_streaming_distribution_config   rp   z6CloudFrontConnection.set_streaming_distribution_configc                 C   ry   )Nrz   rS   )r	   rd   r   r   r#   r#   r$   create_streaming_distribution   s   z2CloudFrontConnection.create_streaming_distributionc                 C   r   r   r   r   r#   r#   r$   delete_streaming_distribution   rr   z2CloudFrontConnection.delete_streaming_distributionc                 C   rh   )N%CloudFrontOriginAccessIdentitySummary!origin-access-identity/cloudfront)r   rG   ri   r#   r#   r$   get_all_origin_access_identity   s   z3CloudFrontConnection.get_all_origin_access_identityc                 C   rl   Nr   )rO   r
   r   	access_idr#   r#   r$   get_origin_access_identity_info   rr   z4CloudFrontConnection.get_origin_access_identity_infoc                 C   rl   r   )rR   r   r   r#   r#   r$   !get_origin_access_identity_config   s   z6CloudFrontConnection.get_origin_access_identity_configc                 C   rs   rt   ru   )r   r   r%   r]   r#   r#   r$   !set_origin_access_identity_config   s   z6CloudFrontConnection.set_origin_access_identity_configc                 C   s   t ||d}| |dtS )N)r}   r   r   )r   rd   r
   )r   r}   r   r]   r#   r#   r$   create_origin_access_identity   s   z2CloudFrontConnection.create_origin_access_identityc                 C   r   r   r   )r   r   r%   r#   r#   r$   delete_origin_access_identity   rr   z2CloudFrontConnection.delete_origin_access_identityc                 C   s   t |ts	t|}| |_d| j|f }| jd|ddi| d}| }|jdkr8t	|| }t
j|| |S t|j|j|)zQCreates a new invalidation request
            :see: http://goo.gl/8vECq
        z /%s/distribution/%s/invalidationr`   rW   rU   ra   rc   )rZ   r   rJ   r3   r2   r[   r4   r7   r   r:   r;   r<   r=   r   r8   )r   r\   pathsr}   rM   r)   rB   rF   r#   r#   r$   create_invalidation_request   s    

z0CloudFrontConnection.create_invalidation_requestc           	      C   sj   d| j ||f }| d|ddi}| }|jdkr-tg }t|| }tj	|| |S t
|j|j|)Nz#/%s/distribution/%s/invalidation/%sr/   rW   rU   rY   )r3   r2   r4   r7   r   r   r:   r;   r<   r=   r   r8   )	r   r\   
request_idr}   rM   r)   rB   r   rF   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 }q!d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MarkerMaxItemsz?%s=%sz&%s=%sr   )rJ   r\   	max_itemsmarker)r@   rA   )r9   popitemitemsr   r   rG   )r   r\   r   r   rM   paramskvr?   rC   rD   r#   r#   r$   get_invalidation_requests  s$   

z.CloudFrontConnection.get_invalidation_requests)NN)rx   Nrx   N)rx   rx   rt   )$__name__
__module____qualname__DefaultHostr3   r   r,   r.   rG   rO   rR   r_   rd   rg   rj   ro   rq   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r#   r#   r!   r$   r   &   s`    






r   )xml.saxr;   timer5   boto.connectionr   r   boto.cloudfront.distributionr   r   r   r   r   r	   boto.cloudfront.identityr
   r   r   boto.cloudfront.invalidationr   r   r   boto.resultsetr   boto.cloudfront.exceptionr   r   r#   r#   r#   r$   <module>   s   