B
    `’»d,  ã               @   s²   d dl mZ d dlZd dlZd dlZd dlm  m  mZ d dl	m
Z
 d dlmZmZ d dlmZmZ d dlmZ er”d dlmZ d dlmZmZ e e¡ZG d	d
„ d
e
ƒZdS )é    )Úabsolute_importN)ÚCommand)ÚERRORÚSUCCESS)ÚCommandErrorÚPipError)ÚMYPY_CHECK_RUNNING)ÚValues)ÚAnyÚListc               @   sX   e Zd ZdZdZdZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚCacheCommanda  
    Inspect and manage pip's wheel cache.

    Subcommands:

        dir: Show the cache directory.
        info: Show information about the cache.
        list: List filenames of packages stored in the cache.
        remove: Remove one or more package from the cache.
        purge: Remove all items from the cache.

        <pattern> can be a glob expression or a package name.
    Tz|
        %prog dir
        %prog info
        %prog list [<pattern>]
        %prog remove <pattern>
        %prog purge
    c          
   C   s¶   | j | j| j| j| jdœ}|js.t d¡ tS |r>|d |kr\t d 	d 
t|ƒ¡¡¡ tS |d }y|| ||dd … ƒ W n2 tk
r° } zt |jd ¡ tS d }~X Y nX tS )N)ÚdirÚinfoÚlistÚremoveÚpurgez<pip cache commands can not function since cache is disabled.r   zNeed an action ({}) to perform.z, é   )Úget_cache_dirÚget_cache_infoÚlist_cache_itemsÚremove_cache_itemsÚpurge_cacheÚ	cache_dirÚloggerÚerrorr   ÚformatÚjoinÚsortedr   Úargsr   )ÚselfÚoptionsr   ÚhandlersÚactionÚe© r$   ú@/tmp/pip-unpacked-wheel-hu9qqap1/pip/_internal/commands/cache.pyÚrun-   s&    

zCacheCommand.runc             C   s   |rt dƒ‚t |j¡ d S )NzToo many arguments)r   r   r   r   )r   r    r   r$   r$   r%   r   N   s    zCacheCommand.get_cache_dirc             C   sX   |rt dƒ‚t|  |d¡ƒ}|  |¡}t |¡}t d¡j|||d 	¡ }t
 |¡ d S )NzToo many argumentsÚ*zq
            Location: {location}
            Size: {size}
            Number of wheels: {package_count}
        )ÚlocationZpackage_countÚsize)r   ÚlenÚ_find_wheelsÚ_wheels_cache_dirÚ
filesystemÚformat_directory_sizeÚtextwrapÚdedentr   Ústripr   r   )r   r    r   Znum_packagesZcache_locationZ
cache_sizeÚmessager$   r$   r%   r   U   s    

zCacheCommand.get_cache_infoc       	      C   s    t |ƒdkrtdƒ‚|r"|d }nd}|  ||¡}|sDt d¡ d S g }x4|D ],}tj |¡}t 	|¡}| 
d ||¡¡ qNW t d¡ t d t|ƒ¡¡ d S )	Nr   zToo many argumentsr   r'   zNothing cached.z
 - {} ({})zCache contents:
Ú
)r*   r   r+   r   r   ÚosÚpathÚbasenamer-   Úformat_file_sizeÚappendr   r   r   )	r   r    r   ÚpatternÚfilesÚresultsÚfilenameÚwheelr)   r$   r$   r%   r   k   s     




zCacheCommand.list_cache_itemsc             C   st   t |ƒdkrtdƒ‚|s tdƒ‚|  ||d ¡}|s<tdƒ‚x"|D ]}t |¡ t d|¡ qBW t dt |ƒ¡ d S )Nr   zToo many argumentszPlease provide a patternr   zNo matching packagesz
Removed %szFiles removed: %s)r*   r   r+   r4   Úunlinkr   Údebugr   )r   r    r   r:   r<   r$   r$   r%   r   ƒ   s    

zCacheCommand.remove_cache_itemsc             C   s   |rt dƒ‚|  |dg¡S )NzToo many argumentsr'   )r   r   )r   r    r   r$   r$   r%   r   ”   s    zCacheCommand.purge_cachec             C   s   t j |jd¡S )NÚwheels)r4   r5   r   r   )r   r    r$   r$   r%   r,   ›   s    zCacheCommand._wheels_cache_dirc             C   s*   |   |¡}|d|krdnd }t ||¡S )Nú-z*.whlz-*.whl)r,   r-   Ú
find_files)r   r    r9   Ú	wheel_dirr$   r$   r%   r+   Ÿ   s    
zCacheCommand._find_wheelsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úignore_require_venvÚusager&   r   r   r   r   r   r,   r+   r$   r$   r$   r%   r      s   !r   )Ú
__future__r   Úloggingr4   r/   Úpip._internal.utils.filesystemÚ	_internalÚutilsr-   Úpip._internal.cli.base_commandr   Úpip._internal.cli.status_codesr   r   Úpip._internal.exceptionsr   r   Úpip._internal.utils.typingr   Úoptparser	   Útypingr
   r   Ú	getLoggerrD   r   r   r$   r$   r$   r%   Ú<module>   s   
