
    Bh                         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
 d dlmZ d dlmZmZmZ d dlmZ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 d Zd Zd Z d Z!d Z"d Z#d Z$d Z%y)    N)	timedelta)settings)add_never_cache_headerspatch_response_headerspatch_vary_headers)
iri_to_uri)now)_get_cache_key_get_cache_version_set_cache_version)
EXPIRE_NOWMAX_EXPIRATION_TTL)get_toolbar_from_request)get_response_headers)get_cms_setting)get_timezone_name)get_default_language_for_sitec           
      x   t        | d      r| j                  }nt        t        j                        }dt        d      t        j                  |t        j                  t        | j                               j                  d            j                         fz  }t        j                  r|dt               z  z  }|S )z
    Generate a cache key based on the request path and language.
    The language is determined following django-cms's language resolution order.
    LANGUAGE_CODEz%s:%d:%s:%sCACHE_PREFIXzutf-8z.%s)hasattrr   r   r   SITE_IDr   hashlibsha1r   get_full_pathencode	hexdigestUSE_TZr   )requestlanguage	cache_keys      >/home/dcms/DCMS/lib/python3.12/site-packages/cms/cache/page.py_page_cache_keyr#      s    
 w(((01A1AB'Z 5 5 78??HISSU	! I U.000	    c                 .   ddl m} | j                  }t        |      }|j                  j
                  }|s|j                  st        d      st        |        | S t               }|j                  j                         }g }t               }|D ]J  }	|	j                  ||      }
|	j                  |      }|j                  |
       |
s:|s=|t        |      z  }L t         |vr|rt#        d |D              }nt$        }t#        t        d      d   |      }
|
dkD  r|t'        | |
       t)        | t+        |             t-               }|t/        |
      z   }t1        |       }|j                  t3        |      | j4                  ||f|
|	       t7        |       | S )
Nr   cache
PAGE_CACHEc              3       K   | ]  }|  y w)N ).0xs     r"   	<genexpr>z!set_page_cache.<locals>.<genexpr>K   s     %FAa%Fs   CACHE_DURATIONScontent)cache_timeout)secondsversion)django.core.cacher'   _requestr   useris_authenticated_cache_disabledr   r   r	   content_rendererget_rendered_placeholderssetget_cache_expirationget_vary_cache_onappendr   minr   r   r   sortedr   r   r   r#   r/   r   )responser'   r   toolbarr7   	timestampplaceholdersplaceholder_ttl_listvary_cache_on_setphttlvary_cache_onmin_placeholder_ttlr3   expires_datetimeresponse_headerss                   r"   set_page_cacherM   +   s   'G&w/G||44722/,:W) I++EEGL 
4 %%gy9,,W5##C(= ]!33
4 --"%%F1E%F"F #5/"34Y?ATU7"83?x0A)BC(*G  )9S+AA3H=II($$$$
   	 w'Or$   c                 V    ddl m} |j                  t        |       t	                     S Nr   r&   r2   )r4   r'   getr#   r   )r   r'   s     r"   get_page_cacherQ   j   s!    '99_W-7I7K9LLr$   c                 J    ddl m} |j                  d| j                  z        S )Nr   r&   cms:xframe_options:%s)r4   r'   rP   pk)pager'   s     r"   get_xframe_cacherV   p   s    '99,tww677r$   c                     ddl m} |j                  d| j                  z  |t	                      t        t	                      y )Nr   r&   rS   r2   )r4   r'   r;   rT   r   r   )rU   xframe_optionsr'   s      r"   set_xframe_cacherY   v   s1    '	II%/I[I]I^)+,r$   c                 $    t        d| ||      dz   S )Npage_urlz_type:absolute_url)r
   )page_lookuplangsite_ids      r"   _page_url_keyr_   }   s    *k4ADXXXr$   c                     ddl m} |j                  t        | ||      |t	        d      d   t                      t        t                      y )Nr   r&   r.   r/   r2   )r4   r'   r;   r_   r   r   r   )r\   r]   r^   urlr'   s        r"   set_page_url_cacherb      sG    '	IIk41)*95"$	   )+,r$   c                 Z    ddl m} |j                  t        | ||      t	                     S rO   )r4   r'   rP   r_   r   )r\   r]   r^   r'   s       r"   get_page_url_cacherd      s%    '99];g>HZH\9]]r$   )&r   datetimer   django.confr   django.utils.cacher   r   r   django.utils.encodingr   django.utils.timezoner	   	cms.cacher
   r   r   cms.constantsr   r   cms.toolbar.utilsr   cms.utils.compat.responser   cms.utils.confr   cms.utils.helpersr   cms.utils.i18nr   r#   rM   rQ   rV   rY   r_   rb   rd   r*   r$   r"   <module>rq      sd        
 - % L L 8 6 : * / 8*<~M8-Y	-^r$   