o
    ¾Ôi&   ã                   @   s”   d dl Z d dlZd dlmZ d dl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 d dlmZ d d	lmZ eeƒZG d
d„ deƒZdS )é    N)ÚValues)ÚCallable)ÚCommand)ÚERRORÚSUCCESS)ÚCommandErrorÚPipError)Ú
filesystem)Ú	getLogger)Úformat_sizec                   @   sV  e Zd ZdZdZdZd%dd„Zdeee	e
ee gdf f fdd	„Zd
e
dee defdd„Zd
e
dee ddfdd„Zd
e
dee ddfdd„Zd
e
dee ddfdd„Zdee ddfdd„Zdee ddfdd„Zd
e
dee ddfdd„Zd
e
dee ddfdd„Zd
e
dedefdd„Zd
e
dee fd d!„Zd
e
d"edee f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
    ÚreturnNc                 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   )Zcmd_optsZ
add_optionÚparserZinsert_option_group©Úself© r   ú<lib/python3.10/site-packages/pip/_internal/commands/cache.pyÚadd_options(   s   ú	zCacheCommand.add_optionsc                 C   s   | j | j| j| j| jdœS )N)ÚdirÚinfoÚlistÚremoveÚpurge)Úget_cache_dirÚget_cache_infoÚlist_cache_itemsÚremove_cache_itemsÚpurge_cacher   r   r   r   Úhandler_map4   s   ûzCacheCommand.handler_mapÚoptionsÚargsc              
   C   s¤   |   ¡ }|jst d¡ tS |r|d |vr#t dd t|ƒ¡¡ tS |d }z|| ||dd … ƒ W t	S  tyQ } zt |jd ¡ tW  Y d }~S d }~ww )Nz<pip cache commands can not function since cache is disabled.r   zNeed an action (%s) to perform.z, é   )
r'   Ú	cache_dirÚloggerÚerrorr   ÚjoinÚsortedr   r)   r   )r   r(   r)   r'   r   Úer   r   r   Ú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"   W   s   zCacheCommand.get_cache_dirc              	   C   s¢   |rt dƒ‚t|  |¡ƒ}t|  |d¡ƒ}|  |d¡}|  |d¡}|  |d¡}t t |¡t |¡ ¡}t |¡}	t	 
d¡j|||||||	d ¡ }
t |
¡ d S )Nr2   Ú*úhttp-v2ÚhttpÚwheelsa  
                    Package index page cache location (pip v23.3+): {http_cache_location}
                    Package index page cache location (older pips): {old_http_cache_location}
                    Package index page cache size: {http_cache_size}
                    Number of HTTP files: {num_http_files}
                    Locally built wheels location: {wheels_cache_location}
                    Locally built wheels size: {wheels_cache_size}
                    Number of locally built wheels: {package_count}
                )Úhttp_cache_locationÚold_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_dirr	   r   Zdirectory_sizeZformat_directory_sizeÚtextwrapÚdedentÚformatÚstripr,   r   )r   r(   r)   r;   Znum_packagesr8   r9   r<   r:   r=   Úmessager   r   r   r#   ]   s8   ÿÿ
ÿîëzCacheCommand.get_cache_infoc                 C   sX   t |ƒdkr
tdƒ‚|r|d }nd}|  ||¡}|jdkr%|  |¡ d S |  |¡ d S )Nr*   r2   r   r4   r   )r>   r   r@   r   Úformat_for_humanÚformat_for_abspath)r   r(   r)   ÚpatternÚfilesr   r   r   r$   ‡   s   

zCacheCommand.list_cache_itemsrJ   c                 C   sp   |s	t  d¡ d S g }|D ]}tj |¡}t |¡}| d|› d|› d¡ qt  d¡ t  d t	|ƒ¡¡ d S )NzNo locally built wheels cached.z - z (ú)zCache contents:
Ú
)
r,   r   ÚosÚpathÚbasenamer	   Zformat_file_sizeÚappendr.   r/   )r   rJ   ÚresultsÚfilenameZwheelÚsizer   r   r   rG   –   s   


zCacheCommand.format_for_humanc                 C   s    |rt  d t|ƒ¡¡ d S d S )NrL   )r,   r   r.   r/   )r   rJ   r   r   r   rH   £   s   ÿzCacheCommand.format_for_abspathc                 C   sÀ   t |ƒdkr
tdƒ‚|stdƒ‚|  ||d ¡}d}|d dkr(||  |¡7 }n
|d|d › d7 }|s9t |¡ d}|D ]}|t |¡j7 }t 	|¡ t 
d	|¡ q=t d
t |ƒt|ƒ¡ d S )Nr*   r2   zPlease provide a patternr   zNo matching packagesr4   z for pattern "ú"z
Removed %szFiles removed: %s (%s))r>   r   r@   r?   r,   ZwarningrM   ÚstatÚst_sizeÚunlinkÚverboser   r   )r   r(   r)   rJ   Zno_matching_msgZbytes_removedrR   r   r   r   r%   §   s"   

zCacheCommand.remove_cache_itemsc                 C   s   |rt dƒ‚|  |dg¡S )Nr2   r4   )r   r%   r3   r   r   r   r&   Â   s   zCacheCommand.purge_cacheÚsubdirc                 C   s   t j |j|¡S )N)rM   rN   r.   r+   )r   r(   rY   r   r   r   rA   È   s   zCacheCommand._cache_dirc                 C   s0   |   |d¡}|   |d¡}t |d¡t |d¡ S )Nr6   r5   r4   ©rA   r	   Z
find_files)r   r(   Zold_http_dirZnew_http_dirr   r   r   r?   Ë   s
   ÿzCacheCommand._find_http_filesrI   c                 C   s,   |   |d¡}|d|v rdnd }t ||¡S )Nr7   ú-z*.whlz-*.whlrZ   )r   r(   rI   Z	wheel_dirr   r   r   r@   Ò   s   zCacheCommand._find_wheels)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Zignore_require_venvÚusager   ÚdictÚstrr   r   r   r'   Úintr1   r"   r#   r$   rG   rH   r%   r&   rA   r?   r@   r   r   r   r   r      s"    
&	*r   )rM   rB   Zoptparser   Útypingr   Zpip._internal.cli.base_commandr   Zpip._internal.cli.status_codesr   r   Zpip._internal.exceptionsr   r   Zpip._internal.utilsr	   Zpip._internal.utils.loggingr
   Zpip._internal.utils.miscr   r\   r,   r   r   r   r   r   Ú<module>   s    