<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
U
    .e9                     @   s~   d dl Z d dlZd dlmZ ddlmZ ddlmZ ze W n e	k
rX   e
efZY nX dd ZG dd	 d	eZd
d ZdS )    N)dedent   )	BaseCache)CacheControllerc              	   C   s   t j}|t jt jB O }tt dr*|t jO }tt dr>|t jO }zt |  W n tt	fk
rd   Y nX t 
| ||}zt |dW S    t |  Y nX d S )N
O_NOFOLLOWO_BINARYwb)osO_WRONLYO_CREATO_EXCLhasattrr   r   removeIOErrorOSErroropenfdopenclose)filenameZfmodeflagsfd r   N/usr/lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py_secure_open_write   s     




r   c                   @   sB   e Zd ZdddZedd Zd	d
 Zdd Zdd Zdd Z	dS )	FileCacheF    Nc           
      C   s   |d k	r|d k	rt dzddlm} ddlm} W n$ tk
rX   td}	t|	Y nX |rd|}n|d krp|}|| _|| _|| _	|| _
|| _d S )Nz/Cannot use use_dir_lock and lock_class togetherr   )LockFile)MkdirLockFilez
            NOTE: In order to use the FileCache you must have
            lockfile installed. You can install it via pip:
              pip install lockfile
            )
ValueErrorZlockfiler   Zlockfile.mkdirlockfiler   ImportErrorr   	directoryforeverfilemodedirmode
lock_class)
selfr!   r"   r#   r$   Zuse_dir_lockr%   r   r   Znoticer   r   r   __init__:   s&    
zFileCache.__init__c                 C   s   t |   S N)hashlibZsha224encodeZ	hexdigest)xr   r   r   r*   a   s    zFileCache.encodec                 C   s4   |  |}t|d d |g }tjj| jf| S )N   )r*   listr	   pathjoinr!   )r&   nameZhashedpartsr   r   r   _fne   s    
zFileCache._fnc              
   C   sR   |  |}z,t|d}| W  5 Q R  W S Q R X W n tk
rL   Y d S X d S )Nrb)r2   r   readFileNotFoundError)r&   keyr0   fhr   r   r   getl   s    
 zFileCache.getc              
   C   s|   |  |}zttj|| j W n ttfk
r<   Y nX | |*}t	|j| j
}|| W 5 Q R X W 5 Q R X d S r(   )r2   r	   makedirsr.   dirnamer$   r   r   r%   r   r#   write)r&   r6   valuer0   lockr7   r   r   r   setu   s    
zFileCache.setc                 C   s8   |  |}| js4zt| W n tk
r2   Y nX d S r(   )r2   r"   r	   r   r5   )r&   r6   r0   r   r   r   delete   s    
zFileCache.delete)Fr   r   NN)
__name__
__module____qualname__r'   staticmethodr*   r2   r8   r>   r?   r   r   r   r   r   8   s        
'
	r   c                 C   s   t | }||S )z\Return the file cache path based on the URL.

    This does not ensure the file exists!
    )r   Z	cache_urlr2   )ZurlZ	filecacher6   r   r   r   url_to_file_path   s    
rD   )r)   r	   textwrapr   cacher   Z
controllerr   r5   	NameErrorr   r   r   r   rD   r   r   r   r   <module>   s   )T