o
    h                     @   s   d dl Z d dlmZ d dlmZ d dlmZ e dZG dd deZ	ddd	Z
dd
dZdddZdd ZdddZdddZG dd dZdS )    N)settings)ImproperlyConfigured)import_stringzwagtail.frontendcachec                   @   s   e Zd ZdS ) InvalidFrontendCacheBackendErrorN)__name__
__module____qualname__ r	   r	   d/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/contrib/frontend_cache/utils.pyr   
   s    r   c           
      C   s   | d u r
t tdd } | d u rt tdd }|d urdd|di} | d u r%i S i }|  D ]9\}}|d ur8||vr8q+| }|d}zt|}W n ty] }	 z
td| d|	 d }	~	ww ||||< q+|S )	NWAGTAILFRONTENDCACHEWAGTAILFRONTENDCACHE_LOCATIONdefaultz3wagtail.contrib.frontend_cache.backends.HTTPBackend)BACKENDLOCATIONr   zCould not find backend 'z': )getattrr   itemscopypopr   ImportErrorr   )
backend_settingsbackendscache_locationbackend_objectsbackend_name_backend_configbackend_configbackendbackend_clser	   r	   r
   get_backends   s8   
r   c                 C      t | g||d d S N)r   r   )purge_urls_from_cache)urlr   r   r	   r	   r
   purge_url_from_cache9      r$   c                 C   s"   ddl m} |t| || d S )N   )purge_urls_from_cache_task)tasksr'   enqueuelist)urlsr   r   r'   r	   r	   r
   r"   =   s   r"   c                    s*   | j   d u r	g S  fdd| j D S )Nc                    s   g | ]	} | d  qS )/)lstrip).0pathpage_urlr	   r
   
<listcomp>H   s    z)_get_page_cached_urls.<locals>.<listcomp>)full_urlspecificget_cached_paths)pager	   r0   r
   _get_page_cached_urlsC   s   r7   c                 C   r    r!   )purge_pages_from_cache)r6   r   r   r	   r	   r
   purge_page_from_cacheK   r%   r9   c                 C   s4   g }| D ]	}| t| q|rt||| d S d S N)extendr7   r"   )pagesr   r   r+   r6   r	   r	   r
   r8   O   s   r8   c                   @   sD   e Zd ZdZdddZdd Zdd Zd	d
 Zdd ZdddZ	dS )
PurgeBatchz:Represents a list of URLs to be purged in a single requestNc                 C   s"   t  | _|d ur| | d S d S r:   )setr+   add_urlsselfr+   r	   r	   r
   __init__[   s   zPurgeBatch.__init__c                 C      | j | dS )zAdds a single URLN)r+   add)rA   r#   r	   r	   r
   add_urla   s   zPurgeBatch.add_urlc                 C   rC   )z
        Adds multiple URLs from an iterable

        This is equivalent to running ``.add_url(url)`` on each URL
        individually
        N)r+   updater@   r	   r	   r
   r?   e   s   zPurgeBatch.add_urlsc                 C   s   |  t| dS )z
        Adds all URLs for the specified page

        This combines the page's full URL with each path that is returned by
        the page's `.get_cached_paths` method
        N)r?   r7   )rA   r6   r	   r	   r
   add_pagen   s   zPurgeBatch.add_pagec                 C   s   |D ]}|  | qdS )z
        Adds multiple pages from a QuerySet or an iterable

        This is equivalent to running ``.add_page(page)`` on each page
        individually
        N)rG   )rA   r<   r6   r	   r	   r
   	add_pagesw   s   zPurgeBatch.add_pagesc                 C   s   t | j|| dS )a  
        Performs the purge of all the URLs in this batch

        This method takes two optional keyword arguments: backend_settings and backends

        - backend_settings can be used to override the WAGTAILFRONTENDCACHE setting for
          just this call

        - backends can be set to a list of backend names. When set, the invalidation request
          will only be sent to these backends
        N)r"   r+   )rA   r   r   r	   r	   r
   purge   s   zPurgeBatch.purger:   NN)
r   r   r   __doc__rB   rE   r?   rG   rH   rI   r	   r	   r	   r
   r=   X   s    
		
r=   rJ   )loggingdjango.confr   django.core.exceptionsr   django.utils.module_loadingr   	getLoggerloggerr   r   r$   r"   r7   r9   r8   r=   r	   r	   r	   r
   <module>   s    


+


	