
    LȂi                         S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r	  SSK
JrJr  SSKJr  SSKJr   " S S\5      rg)	zFile-based cache backend    N)md5)DEFAULT_TIMEOUT	BaseCache)locks)file_move_safec                      ^  \ rS rSrSr\R                  rU 4S jr\	S4S jr
SS jrS r\	S4S jr\	S4S	 jrSS
 jrS rSS jrS rS rSS jrS rS rS rSrU =r$ )FileBasedCache   z.djcachec                    > [         TU ]  U5        [        R                  R	                  U5      U l        U R                  5         g N)super__init__ospathabspath_dir
_createdir)selfdirparams	__class__s      UD:\sksbv-state-backend\venv\Lib\site-packages\django/core/cache/backends/filebased.pyr   FileBasedCache.__init__   s.     GGOOC(	    Nc                 V    U R                  X5      (       a  gU R                  XX45        gNFT)has_keyset)r   keyvaluetimeoutversions        r   addFileBasedCache.add   s%    <<%%W.r   c                 J   U R                  X5      n [        US5       nU R                  U5      (       dA  [        R                  " [
        R                  " UR                  5       5      5      sS S S 5        $  S S S 5        U$ ! , (       d  f       U$ = f! [         a     U$ f = f)Nrb)	_key_to_fileopen_is_expiredpickleloadszlib
decompressreadFileNotFoundError)r   r   defaultr"   fnamefs         r   getFileBasedCache.get    s    !!#/	eT"a''**!<<(AB #"* #
  #"
  ! 		s5   B AB-	B 8B 
BB B 
B"!B"c                 
   U R                  U5      nUR                  [        R                  " X@R                  5      5        UR                  [
        R                  " [        R                  " X0R                  5      5      5        g r   )get_backend_timeoutwriter*   dumpspickle_protocolr,   compress)r   filer!   r    expirys        r   _write_contentFileBasedCache._write_content*   sQ    ))'2

6<<(<(<=>

4==e5I5I!JKLr   c                    U R                  5         U R                  X5      nU R                  5         [        R                  " U R
                  S9u  pgSn [        US5       n	U R                  XU5        S S S 5        [        XuSS9  SnU(       d  [        R                  " U5        g g ! , (       d  f       N9= f! U(       d  [        R                  " U5        f f = f)N)r   FwbT)allow_overwrite)r   r'   _culltempfilemkstempr   r(   r=   r   r   remove)
r   r   r    r!   r"   r1   fdtmp_pathrenamedr2   s
             r   r   FileBasedCache.set/   s    !!#/

''DII6	$b$1##A6  8DAG		(#   
 		(# s$   B8 !B'4B8 '
B51B8 8 Cc                 b    [        U R                  X5      S5       n [        R                  " U[        R                  5        U R                  U5      (       a    [        R                  " U5        S S S 5        g[        R                  " [        R                  " UR                  5       5      5      nUR                  S5        U R                  XBU5         [        R                  " U5        S S S 5        g! [        R                  " U5        f = f! , (       d  f       g = f! [         a     gf = f)Nzr+bFr   T)r(   r'   r   lockLOCK_EXr)   unlockr*   r+   r,   r-   r.   seekr=   r/   )r   r   r!   r"   r2   previous_values         r   touchFileBasedCache.touch>   s    	d''5u=
$JJq%--0''**$ LLO >= *0dooaffh6O)Pq	++AG#LLO >= LLO >= ! 		sX   D! D;C5D1D! :AC5D,D! 5DD
DD! D! !
D.-D.c                 B    U R                  U R                  X5      5      $ r   )_deleter'   r   r   r"   s      r   deleteFileBasedCache.deleteO   s    ||D--c;<<r   c                     UR                  U R                  5      (       a$  [        R                  R	                  U5      (       d  g [        R
                  " U5        g! [         a     gf = fr   )
startswithr   r   r   existsrE   r/   r   r1   s     r   rS   FileBasedCache._deleteR   sV    		**"''..2G2G	IIe  ! 		s   A 
A+*A+c                     U R                  X5      n [        US5       nU R                  U5      (       + sS S S 5        $ ! , (       d  f       g = f! [         a     gf = f)Nr&   F)r'   r(   r)   r/   )r   r   r"   r1   r2   s        r   r   FileBasedCache.has_key\   sQ    !!#/	eT"a++A.. #""  		s+   A ?	A 
A	A A 
AAc                 &   U R                  5       n[        U5      nX R                  :  a  gU R                  S:X  a  U R	                  5       $ [
        R                  " U[        X R                  -  5      5      nU H  nU R                  U5        M     g)z
Remove random cache entries if max_entries is reached at a ratio
of num_entries / cull_frequency. A value of 0 for CULL_FREQUENCY means
that the entire cache will be purged.
Nr   )	_list_cache_fileslen_max_entries_cull_frequencyclearrandomsampleintrS   )r   filelistnum_entriesr1   s       r   rB   FileBasedCache._culld   sx     ))+(m***1$::<==3{=Q=Q/Q+RSELL r   c                     [         R                  " S5      n [         R                  " U R                  SSS9  [         R                  " U5        g ! [         R                  " U5        f = f)N?   i  T)exist_ok)r   umaskmakedirsr   )r   	old_umasks     r   r   FileBasedCache._creatediru   sC     HHUO		 KK		548HHYBHHYs    A A'c           
          U R                  XS9n[        R                  R                  U R                  SR                  [        UR                  5       SS9R                  5       U R                  /5      5      $ )z}
Convert a key into a cache file path. Basically this is the
root cache path joined with the md5sum of the key and a suffix.
)r"    F)usedforsecurity)	make_and_validate_keyr   r   joinr   r   encode	hexdigestcache_suffixrT   s      r   r'   FileBasedCache._key_to_file~   sf    
 (((>ww||IIGG

e<FFH%%
 	
r   c                 T    U R                  5        H  nU R                  U5        M     g)z
Remove all the cache files.
N)r_   rS   rZ   s     r   rc   FileBasedCache.clear   s#     ++-ELL .r   c                      [         R                  " U5      nUbE  U[        R                  " 5       :  a,  UR	                  5         U R                  UR                  5        gg! [         a    Sn NWf = f)z<
Take an open cache file `f` and delete it if it's expired.
r   TF)r*   loadEOFErrortimecloserS   name)r   r2   exps      r   r)   FileBasedCache._is_expired   s]    	++a.C ?sTYY[0GGILL   	C	s   A! !A0/A0c                     [         R                   " SU R                   3U R                  S9 Vs/ sH-  n[        R                  R                  U R                  U5      PM/     sn$ s  snf )zy
Get a list of paths to all the cache files. These are all the files
in the root cache dir that end on the cache_suffix.
*)root_dir)globrx   r   r   r   ru   rZ   s     r   r_    FileBasedCache._list_cache_files   sY     Qt'8'8&9#:TYYO
O GGLLE*O
 	
 
s   3A%)r   )NNr   )__name__
__module____qualname____firstlineno__rx   r*   HIGHEST_PROTOCOLr9   r   r   r#   r3   r=   r   rP   rU   rS   r   rB   r   r'   rc   r)   r_   __static_attributes____classcell__)r   s   @r   r	   r	      sy    L--O
 '6t M
 '6t $ "1$ "= " 
  
 
r   r	   )__doc__r   r   r*   rd   rC   r   r,   hashlibr   django.core.cache.backends.baser   r   django.core.filesr   django.core.files.mover   r	    r   r   <module>r      s7      	       F # 1Z
Y Z
r   