U
    Eh)                     @   s   d dl mZ 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 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mZ d dlmZ d dlmZ eeZG dd deZdd Z dd Z!dd Z"dS )    )absolute_importN)six)zip_longest)
cmdoptions)IndexGroupCommand)CommandError)PackageFinder)SelectionPreferences)make_link_collector)dist_is_editableget_installed_distributionswrite_output)get_installer)parsec                       sd   e Zd ZdZdZ fddZdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Z  ZS )ListCommandzt
    List installed packages, including editables.

    Packages are listed in a case-insensitive sorted order.
    z
      %prog [options]c                    s  t t| j|| | j}|jdddddd |jddddd	d |jd
ddddd |jdddddd | jjdddddd |t  |jddddd |jddddddd |jddddd  |jd!d"d#d$d  |jd%dd#d&d'd( ttj| j	}| j	
d)| | j	
d)| 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)r   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   )superr   __init__cmd_optsZ
add_optionr   Z	list_pathZmake_option_groupZindex_groupparserZinsert_option_group)selfargskwr"   Z
index_opts	__class__ A./venv/lib/python3.8/site-packages/pip/_internal/commands/list.pyr!   (   s        
 zListCommand.__init__c                 C   s(   t ||d}td|jd}tj||dS )zK
        Create a package finder appropriate to this list command.
        )optionsF)Zallow_yankedZallow_all_prereleases)link_collectorselection_prefs)r
   r	   prer   Zcreate)r$   r+   sessionr,   r-   r)   r)   r*   _build_package_finderx   s    z!ListCommand._build_package_finderc                 C   s   |j r|jrtdt| t|j|j|j|j	|j
d}|jrL| ||}|j r`| ||}n|jrr| ||}| || d S )Nz5Options --outdated and --uptodate cannot be combined.)Z
local_onlyZ	user_onlyZeditables_onlyZinclude_editablespaths)outdatedZuptodater   r   Zcheck_list_path_optionr   localr   Zeditabler   pathr   get_not_requiredget_outdatedget_uptodateoutput_package_listing)r$   r+   r%   packagesr)   r)   r*   run   s&    
zListCommand.runc                 C   s   dd |  ||D S )Nc                 S   s,   g | ]$}t t|jt t|jkr|qS r)   r   strlatest_versionZparsed_version.0distr)   r)   r*   
<listcomp>   s   z,ListCommand.get_outdated.<locals>.<listcomp>iter_packages_latest_infosr$   r9   r+   r)   r)   r*   r6      s    
zListCommand.get_outdatedc                 C   s   dd |  ||D S )Nc                 S   s,   g | ]$}t t|jt t|jkr|qS r)   r;   r>   r)   r)   r*   rA      s   z,ListCommand.get_uptodate.<locals>.<listcomp>rB   rD   r)   r)   r*   r7      s    
zListCommand.get_uptodatec                    s:   t   |D ]} dd | D  q
 fdd|D S )Nc                 s   s   | ]}|j V  qd S Nkey)r?   Zrequirementr)   r)   r*   	<genexpr>   s     z/ListCommand.get_not_required.<locals>.<genexpr>c                    s   h | ]}|j  kr|qS r)   rF   )r?   pkgZdep_keysr)   r*   	<setcomp>   s     
 z/ListCommand.get_not_required.<locals>.<setcomp>)setupdateZrequires)r$   r9   r+   r@   r)   rJ   r*   r5      s    zListCommand.get_not_requiredc              	   c   s   |  |}| ||}|D ]t}d}||j}|jsDdd |D }|j|jd}||}	|	d krfq|	j}
|	j	j
rzd}nd}|
|_||_|V  qW 5 Q R X d S )Nunknownc                 S   s   g | ]}|j js|qS r)   )versionZis_prerelease)r?   	candidater)   r)   r*   rA      s    z:ListCommand.iter_packages_latest_infos.<locals>.<listcomp>)project_nameZwheelZsdist)Z_build_sessionr0   Zfind_all_candidatesrG   r.   Zmake_candidate_evaluatorrQ   Zsort_best_candidaterO   linkZis_wheelr=   latest_filetype)r$   r9   r+   r/   finderr@   typZall_candidatesZ	evaluatorZbest_candidateZremote_versionr)   r)   r*   rC      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 rE   )rQ   lower)r@   r)   r)   r*   <lambda>       z4ListCommand.output_package_listing.<locals>.<lambda>rF   r   r      z%s==%s (%s)z%s==%sr   )
sortedr   format_for_columnsoutput_package_listing_columnsverboser   rQ   rO   locationformat_for_json)r$   r9   r+   dataheaderr@   r)   r)   r*   r8      s"    

 
z"ListCommand.output_package_listingc                 C   sb   t |dkr|d| t|\}}t |dkrL|ddtdd | |D ]}t| qPd S )Nr   rY    c                 S   s   d|  S )N-r)   )xr)   r)   r*   rW      rX   z<ListCommand.output_package_listing_columns.<locals>.<lambda>)leninserttabulatejoinmapr   )r$   r`   ra   Zpkg_stringssizesvalr)   r)   r*   r\      s    z*ListCommand.output_package_listing_columns)__name__
__module____qualname____doc__usager!   r0   r:   r6   r7   r5   rC   r8   r\   __classcell__r)   r)   r'   r*   r      s   Pr   c                 C   s   t | dkstdgtdd | D  }| D ]}dd t||D }q,g }| D ](}ddd t||D }|| qN||fS )Nr   c                 s   s   | ]}t |V  qd S rE   )re   r?   rd   r)   r)   r*   rH      s     ztabulate.<locals>.<genexpr>c                 S   s"   g | ]\}}t |tt|qS r)   )maxre   r<   r?   scr)   r)   r*   rA      s     ztabulate.<locals>.<listcomp>rb   c                 S   s*   g | ]"\}}|d k	r"t ||ndqS )N )r<   ljustrt   r)   r)   r*   rA     s   )re   AssertionErrorrs   r   rh   append)Zvalsrj   rowresultZdisplayr)   r)   r*   rg      s    
rg   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 ]l}|j|jg}|r||j ||j |jdkst|r||j	 |jdkr|t
| || qb||fS )
z_
    Convert the package data into something usable
    by output_package_listing_columns.
    ZPackageZVersionZLatestZTyperY   c                 s   s   | ]}t |V  qd S rE   )r   rr   r)   r)   r*   rH     s     z%format_for_columns.<locals>.<genexpr>ZLocationZ	Installer)r2   r]   anyrz   rQ   rO   r=   rS   r   r^   r   )Zpkgsr+   Zrunning_outdatedra   r`   Zprojr{   r)   r)   r*   r[     s(    



r[   c                 C   sv   g }| D ]b}|j t|jd}|jdkr@|j|d< t||d< |jr`t|j|d< |j	|d< |
| qt|S )N)namerO   rY   r^   Z	installerr=   rS   )rQ   r   Z	text_typerO   r]   r^   r   r2   r=   rS   rz   r   dumps)r9   r+   r`   r@   infor)   r)   r*   r_   -  s    



r_   )#Z
__future__r   r   ZloggingZpip._vendorr   Zpip._vendor.six.movesr   Zpip._internal.clir   Zpip._internal.cli.req_commandr   Zpip._internal.exceptionsr   Z"pip._internal.index.package_finderr   Z$pip._internal.models.selection_prefsr	   Z!pip._internal.self_outdated_checkr
   Zpip._internal.utils.miscr   r   r   Zpip._internal.utils.packagingr   Zpip._vendor.packaging.versionr   Z	getLoggerrl   loggerr   rg   r[   r_   r)   r)   r)   r*   <module>   s&   
 Y%