a
    Dg                     @   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	   c/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/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 rJi S i }|  D ]~\}}|d urp||vrpqV| }|d}zt|}W n8 ty }	 z td| d|	 W Y d }	~	n
d }	~	0 0 ||||< qV|S )	NZWAGTAILFRONTENDCACHEZWAGTAILFRONTENDCACHE_LOCATIONdefaultz3wagtail.contrib.frontend_cache.backends.HTTPBackend)BACKENDZLOCATIONr   zCould not find backend 'z': )getattrr   itemscopypopr   ImportErrorr   )
backend_settingsbackendsZcache_locationZbackend_objectsbackend_nameZ_backend_configZbackend_configbackendZbackend_clser	   r	   r
   get_backends   s4    
r   c                 C   s   t | g||d d S N)r   r   )purge_urls_from_cache)urlr   r   r	   r	   r
   purge_url_from_cache9   s    r   c                 C   s"   ddl m} |t| || d S )N   )purge_urls_from_cache_task)Z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       z)_get_page_cached_urls.<locals>.<listcomp>)full_urlZspecificZget_cached_paths)pager	   r%   r
   _get_page_cached_urlsC   s    r+   c                 C   s   t | g||d d S r   )purge_pages_from_cache)r*   r   r   r	   r	   r
   purge_page_from_cacheK   s    r-   c                 C   s0   g }| D ]}| t| q|r,t||| d S N)extendr+   r   )pagesr   r   r    r*   r	   r	   r
   r,   O   s
    r,   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 r.   )setr    add_urlsselfr    r	   r	   r
   __init__[   s    zPurgeBatch.__init__c                 C   s   | j | dS )zAdds a single URLN)r    add)r5   r   r	   r	   r
   add_urla   s    zPurgeBatch.add_urlc                 C   s   | j | dS )z
        Adds multiple URLs from an iterable

        This is equivalent to running ``.add_url(url)`` on each URL
        individually
        N)r    updater4   r	   r	   r
   r3   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)r3   r+   )r5   r*   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)r:   )r5   r0   r*   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    )r5   r   r   r	   r	   r
   purge   s    zPurgeBatch.purge)N)NN)
r   r   r   __doc__r6   r8   r3   r:   r;   r<   r	   r	   r	   r
   r1   X   s   
		
r1   )NN)NN)NN)NN)NN)loggingZdjango.confr   Zdjango.core.exceptionsr   Zdjango.utils.module_loadingr   	getLoggerloggerr   r   r   r   r+   r-   r,   r1   r	   r	   r	   r
   <module>   s   

+



	