3
Ugd                 @   s   d dl Z d dlZd dlmZ d dlmZmZ d dljj	j
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eZG dd	 d	eZdS )
    N)Values)AnyList)Command)ERRORSUCCESS)CommandErrorPipError)	getLoggerc               @   s  e Zd ZdZdZdZddddZeee	 e
dd	d
Zeee ddddZeee ddddZeee ddddZee	 ddddZee	 ddddZeee ddddZeee ddddZee	e	dddZeee	 dddZee	ee	 d d!d"ZdS )#CacheCommandaw  
    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>] [--format=[human, abspath]]
        %prog remove <pattern>
        %prog purge
    N)returnc             C   s,   | j jddddd	dd | jjd| j  d S )
Nz--formatstorelist_formathumanabspathz:Select the output format among: human (default) or abspath)actiondestdefaultchoiceshelpr   )r   r   )cmd_opts
add_optionparserinsert_option_group)self r   @/tmp/pip-unpacked-wheel-0ht26j5g/pip/_internal/commands/cache.pyadd_options'   s    zCacheCommand.add_options)optionsargsr   c             C   s   | j | j| j| j| jd}|js.tjd tS | s@|d |krZtjddj	t
| tS |d }y|| ||dd   W n0 tk
r } ztj|jd  tS d }~X 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 (%s) to perform.z,    )get_cache_dirget_cache_infolist_cache_itemsremove_cache_itemspurge_cache	cache_dirloggererrorr   joinsortedr	   r   r   )r   r   r   handlersr   er   r   r   run4   s(    

zCacheCommand.runc             C   s   |rt dtj|j d S )NzToo many arguments)r   r,   r!   r+   )r   r   r   r   r   r   r&   T   s    zCacheCommand.get_cache_dirc       
      C   s   |rt dt| j|}t| j|d}| j|d}| j|d}tj|}tj|}tjdj	||||||dj
 }	tj|	 d S )NzToo many arguments*httpwheelsa  
                    Package index page cache location: {http_cache_location}
                    Package index page cache size: {http_cache_size}
                    Number of HTTP files: {num_http_files}
                    Wheels location: {wheels_cache_location}
                    Wheels size: {wheels_cache_size}
                    Number of wheels: {package_count}
                )http_cache_locationhttp_cache_sizenum_http_fileswheels_cache_locationZpackage_countwheels_cache_size)r   len_find_http_files_find_wheels
_cache_dir
filesystemZformat_directory_sizetextwrapdedentformatstripr,   r!   )
r   r   r   r8   Znum_packagesr6   r9   r7   r:   messager   r   r   r'   Z   s"    

zCacheCommand.get_cache_infoc             C   sV   t |dkrtd|r"|d }nd}| j||}|jdkrH| j| n
| j| d S )Nr%   zToo many argumentsr   r3   r   )r;   r   r=   r   format_for_humanformat_for_abspath)r   r   r   patternfilesr   r   r   r(   ~   s    

zCacheCommand.list_cache_items)rH   r   c             C   st   |st jd d S g }x:|D ]2}tjj|}tj|}|jd| d| d qW t jd t jdjt	| d S )NzNothing cached.z - z ()zCache contents:

)
r,   r!   ospathbasenamer?   Zformat_file_sizeappendr.   r/   )r   rH   resultsfilenamewheelsizer   r   r   rE      s    



zCacheCommand.format_for_humanc             C   s<   |sd S g }x|D ]}|j | qW tjdjt| d S )NrJ   )rN   r,   r!   r.   r/   )r   rH   rO   rP   r   r   r   rF      s    
zCacheCommand.format_for_abspathc             C   s   t |dkrtd|s td| j||d }d}|d dkrP|| j|7 }n|dj|d 7 }|sptj| x"|D ]}tj| tj	d| qvW tj
d	t | d S )
Nr%   zToo many argumentszPlease provide a patternr   zNo matching packagesr3   z for pattern "{}"z
Removed %szFiles removed: %s)r;   r   r=   r<   rB   r,   warningrK   unlinkverboser!   )r   r   r   rH   Zno_matching_msgrP   r   r   r   r)      s    


zCacheCommand.remove_cache_itemsc             C   s   |rt d| j|dgS )NzToo many argumentsr3   )r   r)   )r   r   r   r   r   r   r*      s    zCacheCommand.purge_cache)r   subdirr   c             C   s   t jj|j|S )N)rK   rL   r.   r+   )r   r   rV   r   r   r   r>      s    zCacheCommand._cache_dir)r   r   c             C   s   | j |d}tj|dS )Nr4   r3   )r>   r?   
find_files)r   r   Zhttp_dirr   r   r   r<      s    zCacheCommand._find_http_files)r   rG   r   c             C   s,   | j |d}|d|krdnd }tj||S )Nr5   -z*.whlz-*.whl)r>   r?   rW   )r   r   rG   	wheel_dirr   r   r   r=      s    zCacheCommand._find_wheels)__name__
__module____qualname____doc__ignore_require_venvusager   r   r   strintr2   r   r&   r'   r(   rE   rF   r)   r*   r>   r<   r=   r   r   r   r   r      s    $
r   )rK   r@   optparser   typingr   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.loggingr
   rZ   r,   r   r   r   r   r   <module>   s   