U
    
HaE                     @   s   d dl Z d dlZd dlmZ d dlmZm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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d| j  d S )	Nz--formatstorelist_formathuman)r   abspathz:Select the output format among: human (default) or abspath)actiondestdefaultchoiceshelpr   )cmd_opts
add_optionparserinsert_option_group)self r   @/tmp/pip-unpacked-wheel-tx790h60/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d tS |r>|d |krXt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 (%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 d S )NToo many arguments)r   r,   r!   r+   r   r   r   r   r   r   r&   U   s    zCacheCommand.get_cache_dirc           
      C   s   |rt dt| |}t| |d}| |d}| |d}t|}t|}tdj	||||||d
 }	t|	 d S )Nr3   *httpwheelsaN  
            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   r:   Znum_packagesr8   r;   r9   r<   messager   r   r   r'   [   s&    


zCacheCommand.get_cache_infoc                 C   sV   t |dkrtd|r"|d }nd}| ||}|jdkrH| | n
| | d S )Nr%   r3   r   r5   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)rJ   r   c                 C   sp   |st d d S g }|D ]2}tj|}t|}|d| d| d qt d t dt	| d S )NzNothing cached.z - z ()zCache contents:

)
r,   r!   ospathbasenamerA   Zformat_file_sizeappendr.   r/   )r   rJ   resultsfilenamewheelsizer   r   r   rG      s    


zCacheCommand.format_for_humanc                 C   s8   |sd S g }|D ]}| | qtdt| d S )NrL   )rP   r,   r!   r.   r/   )r   rJ   rQ   rR   r   r   r   rH      s    zCacheCommand.format_for_abspathc                 C   s   t |dkrtd|s td| ||d }|d dkrJ|| |7 }|sVtd|D ]}t| td| qZtdt | d S )	Nr%   r3   zPlease provide a patternr   r5   zNo matching packagesz
Removed %szFiles removed: %s)	r=   r   r?   r>   rM   unlinkr,   verboser!   )r   r   r   rJ   rR   r   r   r   r)      s    
zCacheCommand.remove_cache_itemsc                 C   s   |rt d| |dgS )Nr3   r5   )r   r)   r4   r   r   r   r*      s    zCacheCommand.purge_cache)r   subdirr   c                 C   s   t j|j|S )N)rM   rN   r.   r+   )r   r   rW   r   r   r   r@      s    zCacheCommand._cache_dir)r   r   c                 C   s   |  |d}t|dS )Nr6   r5   r@   rA   Z
find_files)r   r   Zhttp_dirr   r   r   r>      s    zCacheCommand._find_http_files)r   rI   r   c                 C   s,   |  |d}|d|krdnd }t||S )Nr7   -z*.whlz-*.whlrX   )r   r   rI   	wheel_dirr   r   r   r?      s    zCacheCommand._find_wheels)__name__
__module____qualname____doc__ignore_require_venvusager   r   r   r   intr2   r&   r'   r(   strrG   rH   r)   r*   r@   r>   r?   r   r   r   r   r      s   ! 
r   )rM   rB   optparser   typingr   r   pip._internal.utils.filesystem	_internalutilsrA   pip._internal.cli.base_commandr   pip._internal.cli.status_codesr   r   pip._internal.exceptionsr   r	   pip._internal.utils.loggingr
   r[   r,   r   r   r   r   r   <module>   s   