U .e9@s~ddlZddlZddlmZddlmZddlmZzeWne k rXe e fZYnXddZ Gdd d eZ d d ZdS) N)dedent) BaseCache)CacheControllerc Cstj}|tjtjBO}ttdr*|tjO}ttdr>|tjO}zt|Wntt fk rdYnXt |||}zt |dWSt |YnXdS)N O_NOFOLLOWO_BINARYwb) osO_WRONLYO_CREATO_EXCLhasattrrrremoveIOErrorOSErroropenfdopenclose)filenameZfmodeflagsfdrN/usr/lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py_secure_open_writes      rc@sBeZdZdddZeddZd d Zd d Zd dZddZ dS) FileCacheFNc Cs|dk r|dk rtdzddlm}ddlm}Wn$tk rXtd} t| YnX|rd|}n |dkrp|}||_||_||_ ||_ ||_ dS)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 ) ValueErrorZlockfilerZlockfile.mkdirlockfiler ImportErrorr directoryforeverfilemodedirmode lock_class) selfr!r"r#r$Z use_dir_lockr%rrZnoticerrr__init__:s&  zFileCache.__init__cCst|SN)hashlibZsha224encodeZ hexdigest)xrrrr*aszFileCache.encodecCs4||}t|dd|g}tjj|jf|S)N)r*listr pathjoinr!)r&nameZhashedpartsrrr_fnes z FileCache._fnc CsR||}z,t|d}|W5QRWSQRXWntk rLYdSXdS)Nrb)r2rreadFileNotFoundError)r&keyr0fhrrrgetls    z FileCache.getc Cs|||}zttj||jWnttfk r<YnX||*}t |j|j }| |W5QRXW5QRXdSr() r2r makedirsr.dirnamer$rrr%rr#write)r&r6valuer0lockr7rrrsetus  z FileCache.setcCs8||}|js4zt|Wntk r2YnXdSr()r2r"r rr5)r&r6r0rrrdeletes  zFileCache.delete)FrrNN) __name__ __module__ __qualname__r' staticmethodr*r2r8r>r?rrrrr8s '  rcCst|}||S)z\Return the file cache path based on the URL. This does not ensure the file exists! )rZ cache_urlr2)ZurlZ filecacher6rrrurl_to_file_paths rD)r)r textwraprcacherZ controllerrr5 NameErrorrrrrrDrrrrs   )T