3
ûâded  ã               @   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-build-red6nood/pip/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__Z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   Zpip._internal.utils.filesystemZ	_internalÚutilsr?   Zpip._internal.cli.base_commandr   Zpip._internal.cli.status_codesr   r   Zpip._internal.exceptionsr   r	   Zpip._internal.utils.loggingr
   rZ   r,   r   r   r   r   r   Ú<module>   s   