U
    Zޫ^,                     @   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rd 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 }z|| ||dd   W n: tk
r } zt|jd  t W Y 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-huh_82lg/pip/_internal/commands/cache.pyrun-   s*    
zCacheCommand.runc                 C   s   |rt dt|j d S )N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 )Nr'   *zq
            Location: {location}
            Size: {size}
            Number of wheels: {package_count}
        )locationZpackage_countsize)r   len_find_wheels_wheels_cache_dir
filesystemZ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 }|D ],}tj|}t	|}|
d|| qLtd tdt| d S )	Nr   r'   r   r)   zNothing cached.z
 - {} ({})zCache contents:

)r,   r   r-   r   r   ospathbasenamer/   Z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   sp   t |dkrtd|s td| ||d }|s<td|D ]}t| td| q@tdt | d S )Nr   r'   zPlease provide a patternr   zNo matching packagesz
Removed %szFiles removed: %s)r,   r   r-   r5   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 )Nr'   r)   )r   r   r(   r$   r$   r%   r      s    zCacheCommand.purge_cachec                 C   s   t j|jdS )Nwheels)r5   r6   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/   Z
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   loggingr5   r0   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   	getLoggerrC   r   r   r$   r$   r$   r%   <module>   s   
