U
    
Ha-                     @   s\  d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlm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 d dlm Z  d dl!m"Z"m#Z#m$Z$ d dl%m&Z& erd dl'm(Z( G dd deZ)e	e) Z*e+e,Z-G dd deZ.dee
eee/  ee/ f dddZ0dee/dddZ1dS )    N)Values)TYPE_CHECKINGIteratorListOptionalSequenceTuplecastcanonicalize_name)
cmdoptions)IndexGroupCommand)SUCCESS)CommandError)LinkCollector)PackageFinder)BaseDistributionget_environment)SelectionPreferences)
PipSession)stdlib_pkgstabulatewrite_output)map_multithread)DistributionVersionc                   @   s"   e Zd ZU dZeed< eed< dS )_DistWithLatestInfozGive the distribution object a couple of extra fields.

        These will be populated during ``get_outdated()``. This is dirty but
        makes the rest of the code much cleaner.
        latest_versionlatest_filetypeN)__name__
__module____qualname____doc__r   __annotations__str r$   r$   ?/tmp/pip-unpacked-wheel-tx790h60/pip/_internal/commands/list.pyr      s   
r   c                   @   s   e Zd ZdZdZdZddddZeee	dd	d
Z
eee edddZdeddddZdeddddZdeddddZdeed dddZdeddddZeee  ee ddddZdS )ListCommandzt
    List installed packages, including editables.

    Packages are listed in a case-insensitive sorted order.
    Tz
      %prog [options]N)returnc                 C   s*  | j jdddddd | j jddddd	d | j jd
ddddd | j jdddddd | j jdddddd | j t  | j jddddd | j jddddddd | j jddddd  | j jd!d"d#d$d  | j jd%dd#d&d'd( | j t  ttj| j}| jd)| | jd)| j  d S )*Nz-oz
--outdated
store_trueFzList outdated packages)actiondefaulthelpz-uz
--uptodatezList uptodate packagesz-ez
--editablezList editable projects.z-lz--localzSIf in a virtualenv that has global access, do not list globally-installed packages.z--useruserz,Only output packages installed in user-site.)destr)   r*   r+   z--prezYInclude pre-release and development versions. By default, pip only finds stable versions.z--formatstorelist_formatcolumns)r0   freezejsonzBSelect the output format among: columns (default), freeze, or json)r)   r-   r*   choicesr+   z--not-requirednot_requiredz>List packages that are not dependencies of installed packages.)r)   r-   r+   z--exclude-editablestore_falseinclude_editablez%Exclude editable package from output.z--include-editablez%Include editable package from output.T)r)   r-   r+   r*   r   )	cmd_opts
add_optionr   	list_pathZlist_excludemake_option_groupindex_groupparserinsert_option_group)self
index_optsr$   r$   r%   add_options1   s        
 zListCommand.add_options)optionssessionr'   c                 C   s*   t j||d}td|jd}tj||dS )zK
        Create a package finder appropriate to this list command.
        )rA   F)allow_yankedallow_all_prereleases)link_collectorselection_prefs)r   creater   prer   )r>   rA   rB   rE   rF   r$   r$   r%   _build_package_finder~   s    z!ListCommand._build_package_finder)rA   argsr'   c                 C   s   |j r|jrtdt| tt}|jrB|dd |jD  dd t	|j
j|j|j|j|j|dD }|jr| ||}|j r| ||}n|jr| ||}| || tS )Nz5Options --outdated and --uptodate cannot be combined.c                 s   s   | ]}t |V  qd S Nr
   ).0nr$   r$   r%   	<genexpr>   s     z"ListCommand.run.<locals>.<genexpr>c                 S   s   g | ]}t d |qS )r   )r	   )rL   dr$   r$   r%   
<listcomp>   s   z#ListCommand.run.<locals>.<listcomp>)
local_only	user_onlyeditables_onlyinclude_editablesskip)outdatedZuptodater   r   check_list_path_optionsetr   Zexcludesupdater   pathZiter_installed_distributionslocalr,   editabler6   r4   get_not_requiredget_outdatedget_uptodateoutput_package_listingr   )r>   rA   rJ   rU   packagesr$   r$   r%   run   s2    

zListCommand.run_ProcessedDistsra   rA   r'   c                 C   s   dd |  ||D S )Nc                 S   s   g | ]}|j |jkr|qS r$   r   versionrL   distr$   r$   r%   rP      s   z,ListCommand.get_outdated.<locals>.<listcomp>iter_packages_latest_infosr>   ra   rA   r$   r$   r%   r^      s    
zListCommand.get_outdatedc                 C   s   dd |  ||D S )Nc                 S   s   g | ]}|j |jkr|qS r$   re   rg   r$   r$   r%   rP      s   z,ListCommand.get_uptodate.<locals>.<listcomp>ri   rk   r$   r$   r%   r_      s    
zListCommand.get_uptodatec                    s$   dd |D  t  fdd|D S )Nc                 S   s(   h | ] }|  pd D ]}t|jqqS )r$   )Ziter_dependenciesr   name)rL   rh   depr$   r$   r%   	<setcomp>   s    z/ListCommand.get_not_required.<locals>.<setcomp>c                    s   h | ]}|j  kr|qS r$   canonical_name)rL   pkgZdep_keysr$   r%   rn      s     
 )listrk   r$   rr   r%   r]      s    	zListCommand.get_not_requiredr   c              	   #   s^   |  J}| | dtd d fdd}t||D ]}|d k	r<|V  q<W 5 Q R X d S )Nr   )rh   r'   c                    sl     | j}js dd |D } j| jd}||}|d krDd S |j}|jjrXd}nd}|| _|| _	| S )Nc                 S   s   g | ]}|j js|qS r$   )rf   is_prerelease)rL   	candidater$   r$   r%   rP      s    zOListCommand.iter_packages_latest_infos.<locals>.latest_info.<locals>.<listcomp>)project_namewheelsdist)
find_all_candidatesrp   rH   make_candidate_evaluatorsort_best_candidaterf   linkis_wheelr   r   )rh   Zall_candidatesZ	evaluatorbest_candidateremote_versiontypfinderrA   r$   r%   latest_info   s     
z;ListCommand.iter_packages_latest_infos.<locals>.latest_info)_build_sessionrI   r   r   )r>   ra   rA   rB   r   rh   r$   r   r%   rj      s    z&ListCommand.iter_packages_latest_infosc                 C   s   t |dd d}|jdkr:|r:t||\}}| || n^|jdkr|D ]4}|jdkrltd|j|j|j qHtd|j|j qHn|jd	krtt	|| d S )
Nc                 S   s   | j S rK   ro   )rh   r$   r$   r%   <lambda>       z4ListCommand.output_package_listing.<locals>.<lambda>)keyr0   r1      z%s==%s (%s)z%s==%sr2   )
sortedr/   format_for_columnsoutput_package_listing_columnsverboser   raw_namerf   locationformat_for_json)r>   ra   rA   dataheaderrh   r$   r$   r%   r`      s"    

 
z"ListCommand.output_package_listing)r   r   r'   c                 C   sb   t |dkr|d| t|\}}t |dkrL|ddtdd | |D ]}t| qPd S )Nr   r    c                 S   s   d|  S )N-r$   )xr$   r$   r%   r     r   z<ListCommand.output_package_listing_columns.<locals>.<lambda>)leninsertr   joinmapr   )r>   r   r   Zpkg_stringsZsizesvalr$   r$   r%   r     s    z*ListCommand.output_package_listing_columns)r   r   r    r!   ignore_require_venvusager@   r   r   r   rI   r   r#   intrb   r^   r_   r]   r   rj   r`   r   r$   r$   r$   r%   r&   &   sB   N & 	 	  $ 
 r&   rc   )pkgsrA   r'   c                 C   s   |j }|rddddg}nddg}g }|jdks@tdd | D rJ|d |jdkr^|d	 | D ]t}|jt|jg}|r|t|j ||j |jdks|j	r||j
pd
 |jdkr||j || qb||fS )z_
    Convert the package data into something usable
    by output_package_listing_columns.
    PackageVersionZLatestTyper   c                 s   s   | ]}|j V  qd S rK   )r\   )rL   r   r$   r$   r%   rN   +  s     z%format_for_columns.<locals>.<genexpr>ZLocationZ	Installer )rV   r   anyappendr   r#   rf   r   r   r\   r   	installer)r   rA   Zrunning_outdatedr   r   Zprojrowr$   r$   r%   r     s(    



r   rd   c                 C   st   g }| D ]`}|j t|jd}|jdkr@|jp0d|d< |j|d< |jr^t|j|d< |j|d< |	| qt
|S )N)rl   rf   r   r   r   r   r   r   )r   r#   rf   r   r   r   rV   r   r   r   r2   dumps)ra   rA   r   rh   infor$   r$   r%   r   C  s    


r   )2r2   loggingoptparser   typingr   r   r   r   r   r   r	   pip._vendor.packaging.utilsr   Zpip._internal.clir   pip._internal.cli.req_commandr   pip._internal.cli.status_codesr   pip._internal.exceptionsr   pip._internal.index.collectorr   "pip._internal.index.package_finderr   Zpip._internal.metadatar   r   $pip._internal.models.selection_prefsr   pip._internal.network.sessionr   pip._internal.utils.miscr   r   r   Zpip._internal.utils.parallelr   Zpip._internal.metadata.baser   r   rc   	getLoggerr   loggerr&   r#   r   r   r$   r$   r$   r%   <module>   s6   $	
 x '