B
    Kkd'                 @   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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)Command)CommandError)PackageFinder)dist_is_editableget_installed_distributions)get_installerc                   sl   e Zd Zd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.
    listz
      %prog [options]zList installed packages.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 |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_opts
add_optionr   make_option_groupindex_groupparserinsert_option_group)selfargskwr   
index_opts)	__class__ </tmp/pip-install-gxxfd9b7/pip/pip/_internal/commands/list.pyr       sx    zListCommand.__init__c             C   s   t |j||j|j|dS )zK
        Create a package finder appropriate to this list command.
        )
find_links
index_urlsallow_all_prereleasestrusted_hostssession)r   r,   prer/   )r%   optionsr-   r0   r*   r*   r+   _build_package_finderp   s    z!ListCommand._build_package_finderc             C   st   |j r|jrtdt|j|j|j|jd}|jr>| 	||}|j rR| 
||}n|jrd| ||}| || d S )Nz5Options --outdated and --uptodate cannot be combined.)
local_only	user_onlyeditables_onlyinclude_editables)outdateduptodater   r
   localr   editabler   r   get_not_requiredget_outdatedget_uptodateoutput_package_listing)r%   r2   r&   packagesr*   r*   r+   run|   s    
zListCommand.runc             C   s   dd |  ||D S )Nc             S   s   g | ]}|j |jkr|qS r*   )latest_versionparsed_version).0distr*   r*   r+   
<listcomp>   s    z,ListCommand.get_outdated.<locals>.<listcomp>)iter_packages_latest_infos)r%   r@   r2   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*   )rB   rC   )rD   rE   r*   r*   r+   rF      s    z,ListCommand.get_uptodate.<locals>.<listcomp>)rG   )r%   r@   r2   r*   r*   r+   r>      s    zListCommand.get_uptodatec                s>   t   x$|D ]} dd | D  qW  fdd|D S )Nc             s   s   | ]}|j V  qd S )N)key)rD   requirementr*   r*   r+   	<genexpr>   s    z/ListCommand.get_not_required.<locals>.<genexpr>c                s   h | ]}|j  kr|qS r*   )rH   )rD   pkg)dep_keysr*   r+   	<setcomp>   s    z/ListCommand.get_not_required.<locals>.<setcomp>)setupdaterequires)r%   r@   r2   rE   r*   )rL   r+   r<      s    
zListCommand.get_not_requiredc          	   c   s   |j g|j }|jr*tdd| g }| |}| |||}xn|D ]f}d}||j	}|j
srdd |D }|sxqJt||jd}	|	j}
|	jjrd}nd}|
|_||_|V  qJW W d Q R X d S )	NzIgnoring indexes: %s,unknownc             S   s   g | ]}|j js|qS r*   )versionis_prerelease)rD   	candidater*   r*   r+   rF      s    z:ListCommand.iter_packages_latest_infos.<locals>.<listcomp>)rH   wheelsdist)	index_urlextra_index_urlsno_indexloggerdebugjoin_build_sessionr3   find_all_candidatesrH   r1   max_candidate_sort_keyrS   locationis_wheelrB   latest_filetype)r%   r@   r2   r-   r0   finderrE   typall_candidatesbest_candidateremote_versionr*   r*   r+   rG      s,    

z&ListCommand.iter_packages_latest_infosc             C   s   t |dd d}|jdkr:|r:t||\}}| || nh|jdkrx\|D ]8}|jdkrptd|j|j|j	 qJtd|j|j qJW n|jd	krtt
|| d S )
Nc             S   s
   | j  S )N)project_namelower)rE   r*   r*   r+   <lambda>       z4ListCommand.output_package_listing.<locals>.<lambda>)rH   r   r      z%s==%s (%s)z%s==%sr   )sortedr   format_for_columnsoutput_package_listing_columnsverboser[   inforj   rS   rb   format_for_json)r%   r@   r2   dataheaderrE   r*   r*   r+   r?      s    




z"ListCommand.output_package_listingc             C   sh   t |dkr|d| t|\}}t |dkrL|ddtdd | x|D ]}t| qRW d S )Nr   rn    c             S   s   d|  S )N-r*   )xr*   r*   r+   rl      rm   z<ListCommand.output_package_listing_columns.<locals>.<lambda>)leninserttabulater]   mapr[   rs   )r%   ru   rv   pkg_stringssizesvalr*   r*   r+   rq      s    
z*ListCommand.output_package_listing_columns)__name__
__module____qualname____doc__nameusagesummaryr   r3   rA   r=   r>   r<   rG   r?   rq   __classcell__r*   r*   )r)   r+   r      s   Pr   c             C   s   t | dkstdgtdd | D  }x | D ]}dd t||D }q.W g }x0| D ](}ddd t||D }|| qTW ||fS )Nr   c             s   s   | ]}t |V  qd S )N)rz   )rD   ry   r*   r*   r+   rJ      s    ztabulate.<locals>.<genexpr>c             S   s"   g | ]\}}t |tt|qS r*   )r`   rz   str)rD   scr*   r*   r+   rF      s    ztabulate.<locals>.<listcomp>rw   c             S   s*   g | ]"\}}|d k	r"t ||ndqS )N )r   ljust)rD   r   r   r*   r*   r+   rF      s   )rz   AssertionErrorr`   r   r]   append)valsr   rowresultdisplayr*   r*   r+   r|      s    


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	 xt| D ]l}|j|jg}|r||j ||j |jdkst|r||j	 |jdkr|t
| || qdW ||fS )
z_
    Convert the package data into something usable
    by output_package_listing_columns.
    PackageVersionLatestTypern   c             s   s   | ]}t |V  qd S )N)r	   )rD   ry   r*   r*   r+   rJ     s    z%format_for_columns.<locals>.<genexpr>Location	Installer)r8   rr   anyr   rj   rS   rB   rd   r	   rb   r   )pkgsr2   running_outdatedrv   ru   projr   r*   r*   r+   rp      s(    




rp   c             C   sz   g }xj| D ]b}|j t|jd}|jdkrB|j|d< t||d< |jrbt|j|d< |j	|d< |
| q
W t|S )N)r   rS   rn   rb   	installerrB   rd   )rj   r   	text_typerS   rr   rb   r   r8   rB   rd   r   r   dumps)r@   r2   ru   rE   rs   r*   r*   r+   rt     s    



rt   )
__future__r   r   loggingpip._vendorr   Zpip._vendor.six.movesr   Zpip._internal.clir   pip._internal.cli.base_commandr   pip._internal.exceptionsr   pip._internal.indexr   pip._internal.utils.miscr	   r
   pip._internal.utils.packagingr   	getLoggerr   r[   r   r|   rp   rt   r*   r*   r*   r+   <module>   s    
 T%