Ë
    õ%9jý  ã                  óÔ   — d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ d dlmZmZ d dlmZ e	rd dlmZ d d	lmZ  G d
„ d«      Z G d„ dee«      Z G d„ dee«      Zdd„Zy)é    )ÚannotationsN)Údedent)ÚIOÚTYPE_CHECKING)ÚPath)Ú	BaseCacheÚSeparateBodyBaseCache)ÚCacheController)Údatetime)ÚBaseFileLockc                  ó„   — e Zd ZdZ	 	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 dd„Zedd„«       Zdd„Zdd„Z	 d	 	 	 	 	 	 	 dd„Z	dd„Z
dd	„Zy)Ú_FileCacheMixinz2Shared implementation for both FileCache variants.Nc                ó¦   — 	 |€ddl m} |}|| _        || _        || _        || _        || _        y # t        $ r t        d«      }t        |«      ‚w xY w)Nr   )ÚFileLockz¹
            NOTE: In order to use the FileCache you must have
            filelock installed. You can install it via pip:
              pip install cachecontrol[filecache]
            )	Úfilelockr   ÚImportErrorr   Ú	directoryÚforeverÚfilemodeÚdirmodeÚ
lock_class)Úselfr   r   r   r   r   r   Únotices           úZ/var/www/html/truck-me/venv/lib/python3.12/site-packages/cachecontrol/caches/file_cache.pyÚ__init__z_FileCacheMixin.__init__   sg   € ð	&ØÐ!Ý-à%�
ð #ˆŒØˆŒØ ˆŒØˆŒØ$ˆ�øô ò 	&ÜðóˆFô ˜fÓ%Ð%ð	&ús	   ‚
0 ° Ac                ód   — t        j                  | j                  «       «      j                  «       S ©N)ÚhashlibÚsha224ÚencodeÚ	hexdigest)Úxs    r   r    z_FileCacheMixin.encode6   s    € ä�~‰~˜aŸh™h›jÓ)×3Ñ3Ó5Ð5ó    c                óœ   — | j                  |«      }t        |d d «      |gz   }t        j                  j                  | j
                  g|¢­Ž S )Né   )r    ÚlistÚosÚpathÚjoinr   )r   ÚnameÚhashedÚpartss       r   Ú_fnz_FileCacheMixin._fn:   sE   € ð —‘˜TÓ"ˆÜ�V˜B˜Q�ZÓ  F 8Ñ+ˆÜ�w‰w�|‰|˜DŸN™NÐ3¨UÒ3Ð3r#   c                ó¨   — | j                  |«      }	 t        |d«      5 }|j                  «       cd d d «       S # 1 sw Y   y xY w# t        $ r Y y w xY w)NÚrb)r-   ÚopenÚreadÚFileNotFoundError)r   Úkeyr*   Úfhs       r   Úgetz_FileCacheMixin.getA   sQ   € Ø�x‰x˜‹}ˆð	Ü�d˜DÓ!ð ! RØ—w‘w“y÷!÷ !ò !ûô !ò 	Ùð	ús*   “A Ÿ9¯	A ¹A¾A ÁA Á	AÁAc                óJ   — | j                  |«      }| j                  ||«       y r   ©r-   Ú_write)r   r3   ÚvalueÚexpiresr*   s        r   Úsetz_FileCacheMixin.setJ   s   € ð �x‰x˜‹}ˆØ�‰�D˜%Õ r#   c                ó  — t         j                  j                  |«      }t        j                  || j                  d¬«       | j                  |dz   «      5  t        j                  |¬«      \  }}	 t        j                  ||«       t        j                  |«       t        j                  || j                  «       t        j                  ||«       ddd«       y# t        j                  |«       w xY w# 1 sw Y   yxY w)z:
        Safely write the data to the given path.
        T)Úexist_okz.lock)ÚdirN)r'   r(   ÚdirnameÚmakedirsr   r   ÚtempfileÚmkstempÚwriteÚcloseÚchmodr   Úreplace)r   r(   Údatar?   Úfdr*   s         r   r8   z_FileCacheMixin._writeP   sµ   € ô
 —'‘'—/‘/ $Ó'ˆÜ
�‰�G˜TŸ\™\°DÕ9à�_‰_˜T G™^Ó,ñ 	#ä!×)Ñ)¨gÔ6‰JˆR�ðÜ—‘˜˜TÔ"ä—‘˜”Ü�H‰H�T˜4Ÿ=™=Ô)Ü�J‰J�t˜TÔ"÷	#ð 	#øô —‘˜•ú÷	#ð 	#ús%   ÁC5Á1CÂAC5ÃC2Ã2C5Ã5C>c                ó�   — | j                  |«      |z   }| j                  s	 t        j                  |«       y y # t        $ r Y y w xY wr   )r-   r   r'   Úremover2   )r   r3   Úsuffixr*   s       r   Ú_deletez_FileCacheMixin._deleteb   sD   € Ø�x‰x˜‹}˜vÑ%ˆØ�|Š|ðÜ—	‘	˜$•ð øô %ò Ùðús   ¢9 ¹	AÁA)Fi€  iÀ  N)r   z
str | Pathr   Úboolr   Úintr   rN   r   ztype[BaseFileLock] | NoneÚreturnÚNone)r"   ÚstrrO   rQ   )r*   rQ   rO   rQ   )r3   rQ   rO   zbytes | Noner   )r3   rQ   r9   Úbytesr:   zint | datetime | NonerO   rP   )r(   rQ   rG   rR   rO   rP   )r3   rQ   rK   rQ   rO   rP   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústaticmethodr    r-   r5   r;   r8   rL   © r#   r   r   r      s¦   „ Ù<ð
 ØØØ04ð%àð%ð ð%ð ð	%ð
 ð%ð .ð%ð 
ó%ð: ò6ó ð6ó4óð HLð!Øð!Ø$ð!Ø/Dð!à	ó!ó#ô$r#   r   c                  ó   — e Zd ZdZdd„Zy)Ú	FileCachezc
    Traditional FileCache: body is stored in memory, so not suitable for large
    downloads.
    c                ó(   — | j                  |d«       y )NÚ ©rL   ©r   r3   s     r   ÚdeletezFileCache.deleteq   s   € Ø�‰�S˜"Õr#   N©r3   rQ   rO   rP   )rS   rT   rU   rV   r_   rX   r#   r   rZ   rZ   k   s   „ ñô
r#   rZ   c                  ó(   — e Zd ZdZdd„Zdd„Zdd„Zy)	ÚSeparateBodyFileCachezh
    Memory-efficient FileCache: body is stored in a separate file, reducing
    peak memory usage.
    c                ób   — | j                  |«      dz   }	 t        |d«      S # t        $ r Y y w xY w)Nú.bodyr/   )r-   r0   r2   )r   r3   r*   s      r   Úget_bodyzSeparateBodyFileCache.get_body{   s8   € Ø�x‰x˜‹}˜wÑ&ˆð	Ü˜˜dÓ#Ð#øÜ ò 	Ùð	ús   –" ¢	.­.c                óP   — | j                  |«      dz   }| j                  ||«       y )Nrd   r7   )r   r3   Úbodyr*   s       r   Úset_bodyzSeparateBodyFileCache.set_body‚   s"   € Ø�x‰x˜‹}˜wÑ&ˆØ�‰�D˜$Õr#   c                óL   — | j                  |d«       | j                  |d«       y )Nr\   rd   r]   r^   s     r   r_   zSeparateBodyFileCache.delete†   s   € Ø�‰�S˜"ÔØ�‰�S˜'Õ"r#   N)r3   rQ   rO   zIO[bytes] | None)r3   rQ   rg   rR   rO   rP   r`   )rS   rT   rU   rV   re   rh   r_   rX   r#   r   rb   rb   u   s   „ ñó
ó ô#r#   rb   c                óN   — t        j                  | «      }|j                  |«      S )z\Return the file cache path based on the URL.

    This does not ensure the file exists!
    )r
   Ú	cache_urlr-   )ÚurlÚ	filecacher3   s      r   Úurl_to_file_pathrn   ‹   s#   € ô
 ×
#Ñ
# CÓ
(€CØ�=‰=˜ÓÐr#   )rl   rQ   rm   rZ   rO   rQ   )Ú
__future__r   r   r'   rA   Útextwrapr   Útypingr   r   Úpathlibr   Úcachecontrol.cacher   r	   Úcachecontrol.controllerr
   r   r   r   r   rZ   rb   rn   rX   r#   r   ú<module>ru      sZ   ðõ #ã Û 	Û Ý ß $Ý ç ?Ý 3áÝ!å%÷Rñ Rôj� ô ô#˜OÐ-Bô #ô,r#   