3 Pf @ sd d dl Z d dlZd dlmZ d dlmZ ddlmZ ddlm Z dd Z G d d d eZdd ZdS ) N)LockFile) MkdirLockFile ) BaseCache)CacheControllerc C s t j}|t jt jB O }tt dr*|t jO }tt dr>|t jO }yt j| W n tt fk rd Y nX t j | ||}yt j|dS t j| Y nX d S )N O_NOFOLLOWO_BINARYwb) osO_WRONLYO_CREATO_EXCLhasattrr r removeIOErrorOSErroropenfdopenclose)filenameZfmodeflagsfd r /usr/lib/python3.6/file_cache.py_secure_open_write s r c @ sB e Zd ZdddZedd Zd d Zdd Zd d Zdd Z dS ) FileCacheF Nc C sN |d k r|d k rt d|r t}|d kr,t}|| _|| _|| _|| _|| _d S )Nz/Cannot use use_dir_lock and lock_class together) ValueErrorr r directoryforeverfilemodedirmode lock_class)selfr r r! r" Zuse_dir_lockr# r r r __init__4 s zFileCache.__init__c C s t j| j j S )N)hashlibZsha224encodeZ hexdigest)xr r r r' G s zFileCache.encodec C s4 | j |}t|d d |g }tjj| jf| S )N )r' listr pathjoinr )r$ nameZhashedpartsr r r _fnK s z FileCache._fnc C s8 | j |}tjj|sd S t|d }|j S Q R X d S )Nrb)r/ r r+ existsr read)r$ keyr- fhr r r getR s z FileCache.getc C s| | j |}ytjtjj|| j W n ttfk r< Y nX | j|*}t |j| j }|j| W d Q R X W d Q R X d S )N)r/ r makedirsr+ dirnamer" r r r# r r! write)r$ r3 valuer- lockr4 r r r setZ s z FileCache.setc C s | j |}| jstj| d S )N)r/ r r r )r$ r3 r- r r r deleteh s zFileCache.delete)Fr r NN) __name__ __module____qualname__r% staticmethodr' r/ r5 r; r<