U
    {h                     @   s|   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ ddlmZ e d	Zd
gZG dd
 d
eZdS )    N)defaultdict)urlparse)warn)ImproperlyConfigured)RemovedInWagtail70Warning   )BaseBackendzwagtail.frontendcacheCloudfrontBackendc                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	r	   c                    s   dd l }t | |jd|d|d|dd| _z|d| _W n tk
rf   tdY nX t	| jt
rd	|kr| j| j  nt| j | _d S )
Nr   Z
cloudfrontZAWS_ACCESS_KEY_IDZAWS_SECRET_ACCESS_KEYZAWS_SESSION_TOKEN)Zaws_access_key_idZaws_secret_access_keyZaws_session_tokenZDISTRIBUTION_IDzIThe setting 'WAGTAILFRONTENDCACHE' requires the object 'DISTRIBUTION_ID'.Z	HOSTNAMES)boto3super__init__clientgetpopcloudfront_distribution_idKeyErrorr   
isinstancedictZ	hostnamesextendkeyslist)selfparamsr
   	__class__ z/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/contrib/frontend_cache/backends/cloudfront.pyr      s$    
zCloudfrontBackend.__init__c                 C   s   t t}|D ]p}t|}d }t| jtrbtdtd |j}|| jkrR| j	|}qht
d|| n| j}|r|| |j q| D ]\}}| || qd S )NzpUsing a `DISTRIBUTION_ID` mapping is deprecated - use `HOSTNAMES` in combination with multiple backends instead.)categoryz[Couldn't purge '%s' from CloudFront. Hostname '%s' not found in the DISTRIBUTION_ID mapping)r   r   r   r   r   r   r   r   hostnamer   loggerwarningappendpathitems_create_invalidation)r   urlsZpaths_by_distribution_idurlZ
url_parseddistribution_idhostpathsr   r   r   purge_batch/   s,    
zCloudfrontBackend.purge_batchc                 C   s   |  |g d S )N)r*   )r   r&   r   r   r   purgeM   s    zCloudfrontBackend.purgec                 C   s   dd l }z,| jj|t||dtt dd W nV |jjk
r } z4|D ]*}t	
d|||jd d |jd d  qNW 5 d }~X Y nX d S )	Nr   )ZQuantityZItems)PathsZCallerReference)ZDistributionIdZInvalidationBatchzPCouldn't purge path '%s' from CloudFront (DistributionId=%s). ClientError: %s %sErrorZCodeMessage)botocorer   Zcreate_invalidationlenstruuiduuid4
exceptionsZClientErrorr   errorresponse)r   r'   r)   r/   er"   r   r   r   r$   P   s"    

z&CloudfrontBackend._create_invalidation)__name__
__module____qualname__r   r*   r+   r$   __classcell__r   r   r   r   r	      s   )loggingr2   collectionsr   urllib.parser   warningsr   Zdjango.core.exceptionsr   Zwagtail.utils.deprecationr   baser   	getLoggerr   __all__r	   r   r   r   r   <module>   s   
