U
    ¦y^¥  ã                   @   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)ÚselfÚydl© r   úCC:\Users\TaGoRe\Desktop\beinconnect-dl\binaries\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ÚcachedirZ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   ÚfnÚoseÚtbr   r   r   Ústore(   s     
ÿzCache.storeNc           	      C   sâ   |dkst ‚| js|S |  |||¡}z¤z6t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_sizeÚoer   r   r   r4   ;   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)Úskip_eolÚ.)r   r	   Ú	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/   r4   rH   r   r   r   r   r      s   


r   )Ú
__future__r   r%   r2   r    r   r   rF   r(   Úcompatr   Úutilsr   r   Úobjectr   r   r   r   r   Ú<module>   s   