U
    $Pf                     @   st   d dl mZ d dlZd dlZd dlZd dl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 G dd deZdS )    )unicode_literalsN   )compat_getenv)expand_pathwrite_json_filec                   @   sL   e Zd Zdd Zdd Zdd Zedd Zdd
dZdddZ	dd Z
dS )Cachec                 C   s
   || _ d S N)_ydl)selfZydl r   4/tmp/pip-unpacked-wheel-7zdooeg3/youtube_dl/cache.py__init__   s    zCache.__init__c                 C   s6   | j jd}|d kr.tdd}tj|d}t|S )NcachedirXDG_CACHE_HOMEz~/.cachez
youtube-dl)r	   paramsgetr   ospathjoinr   )r
   resZ
cache_rootr   r   r   _get_root_dir   s
    
zCache._get_root_dirc                 C   sL   t d|std| t d|s0td| tj|  |d||f S )Nz^[a-zA-Z0-9_.-]+$zinvalid section %rzinvalid key %rz%s.%s)rematchAssertionErrorr   r   r   r   )r
   sectionkeydtyper   r   r   _get_cache_fn   s      
zCache._get_cache_fnc                 C   s   | j jddk	S )Nr   F)r	   r   r   r
   r   r   r   enabled$   s    zCache.enabledjsonc              
   C   s   |dkst | jsd S | |||}zVzttj| W n0 tk
rl } z|jtj	kr\ W 5 d }~X Y nX t
|| W n0 tk
r   t }| jd||f  Y nX d S )Nr    zWriting cache to %r failed: %s)r   r   r   r   makedirsr   dirnameOSErrorerrnoEEXISTr   	Exception	traceback
format_excr	   report_warning)r
   r   r   datar   fnZosetbr   r   r   store(   s     
zCache.storeNc           	      C   s   |dkst | js|S | |||}zz6tj|ddd}t|W  5 Q R  W W S Q R X W nh tk
r   ztj	
|}W n. ttfk
r } zt|}W 5 d }~X Y nX | jd||f  Y nX W n tk
r   Y nX |S )Nr!   rzutf-8)encodingz#Cache retrieval from %s failed (%s))r   r   r   ioopenr    load
ValueErrorr   r   getsizer$   IOErrorstrr	   r*   )	r
   r   r   r   defaultZcache_fnZcachef	file_sizeZoer   r   r   r3   ;   s&    $
z
Cache.loadc                    s   | j s| jd d S |   t fdddD s@td  | jjd  dd tj rz| jjd	dd t	
  | jd	 d S )
NzFCache is disabled (Did you combine --no-cache-dir and --rm-cache-dir?)c                 3   s   | ]}| kV  qd S r   r   ).0Ztermr   r   r   	<genexpr>X   s     zCache.remove.<locals>.<genexpr>)cachetmpz?Not removing directory %s - this does not look like a cache dirzRemoving cache dir %s .T)Zskip_eol.)r   r	   Z	to_screenr   anyr'   r   r   existsshutilrmtreer   r   r;   r   removeR   s     
zCache.remove)r    )r    N)__name__
__module____qualname__r   r   r   propertyr   r.   r3   rD   r   r   r   r   r      s   


r   )
__future__r   r%   r1   r    r   r   rB   r(   compatr   utilsr   r   objectr   r   r   r   r   <module>   s   