3
LYi,                 @   s   d dl mZ d dlZd dlZd dlZyd dlmZ W n  ek
rT   d dlmZ Y nX 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mZ ejeZG dd deZdd Zdd Zdd ZdS )    )absolute_importN)zip_longest)izip_longest)six)Command)CommandError)PackageFinder)get_installed_distributionsdist_is_editable)RemovedInPip10Warning)make_option_groupindex_groupc                   s|   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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 |jddd d!d" tt| j}| jjd#| | j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legacycolumnsfreezejsonzJSelect the output format among: legacy (default), columns, freeze or json.)r   r   choicesr   z--not-requirednot_requiredz>List packages that are not dependencies of installed packages.)r   r   r   r   )r   r   r   r   )	superr   __init__cmd_opts
add_optionr   r   parserinsert_option_group)selfargskwr    
index_opts)	__class__ d/private/var/folders/7d/20zwc49s3kn54d3vgq8bd4640000gn/T/pip-build-an2lx5zf/pip/pip/commands/list.pyr   #   s^    zListCommand.__init__c             C   s   t |j||j|j|j|dS )zK
        Create a package finder appropriate to this list command.
        )
find_links
index_urlsallow_all_prereleasestrusted_hostsprocess_dependency_linkssession)r   r+   prer.   r/   )r$   optionsr,   r0   r)   r)   r*   _build_package_finderc   s    z!ListCommand._build_package_finderc             C   s   |j rtjdt |jr$tjdt |jr6tjdt |jd krLtjdt |jr`|jr`t	dt
|j|j|jd}|jr| j||}n|jr| j||}|jr| j||}| j|| d S )Nz--allow-external has been deprecated and will be removed in the future. Due to changes in the repository protocol, it no longer has any effect.z--allow-all-external has been deprecated and will be removed in the future. Due to changes in the repository protocol, it no longer has any effect.z--allow-unverified has been deprecated and will be removed in the future. Due to changes in the repository protocol, it no longer has any effect.zThe default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.z5Options --outdated and --uptodate cannot be combined.)
local_only	user_onlyeditables_only)allow_externalwarningswarnr   allow_all_externalallow_unverifiedr   outdateduptodater   r	   localr   editableget_outdatedget_uptodater   get_not_requiredoutput_package_listing)r$   r2   r%   packagesr)   r)   r*   runp   s<    

zListCommand.runc             C   s   dd | j ||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$   rD   r2   r)   r)   r*   r@      s    zListCommand.get_outdatedc             C   s   dd | j ||D S )Nc             S   s   g | ]}|j |jkr|qS r)   )rF   rG   )rH   rI   r)   r)   r*   rJ      s    z,ListCommand.get_uptodate.<locals>.<listcomp>)rK   )r$   rD   r2   r)   r)   r*   rA      s    zListCommand.get_uptodatec                sB   t   x$|D ]} jdd |j D  qW t  fdd|D S )Nc             s   s   | ]}|j V  qd S )N)key)rH   requirementr)   r)   r*   	<genexpr>   s    z/ListCommand.get_not_required.<locals>.<genexpr>c             3   s   | ]}|j  kr|V  qd S )N)rL   )rH   pkg)dep_keysr)   r*   rN      s    )setupdaterequires)r$   rD   r2   rI   r)   )rP   r*   rB      s    
zListCommand.get_not_requiredc             c   s   |j g|j }|jr*tjddj| g }g }x&|D ]}|jdr4|j|jd q4W | j	|}| j
|||}|j| xn|D ]f}d}|j|j}	|jsdd |	D }	|	sqt|	|jd}
|
j}|
jjrd}nd	}||_||_|V  qW W d Q R X d S )
NzIgnoring indexes: %s,zdependency_links.txtunknownc             S   s   g | ]}|j js|qS r)   )versionis_prerelease)rH   	candidater)   r)   r*   rJ      s    z:ListCommand.iter_packages_latest_infos.<locals>.<listcomp>)rL   wheelsdist)	index_urlextra_index_urlsno_indexloggerdebugjoinhas_metadataextendget_metadata_lines_build_sessionr3   add_dependency_linksfind_all_candidatesrL   r1   max_candidate_sort_keyrV   locationis_wheelrF   latest_filetype)r$   rD   r2   r,   dependency_linksrI   r0   findertypall_candidatesbest_candidateremote_versionr)   r)   r*   rK      s8    




z&ListCommand.iter_packages_latest_infosc             C   s0   t |rd|j|j|jf S d|j|jf S d S )Nz%s (%s, %s)z%s (%s))r
   project_namerV   ri   )r$   rI   r)   r)   r*   output_legacy   s    
zListCommand.output_legacyc             C   s   d| j ||j|jf S )Nz%s - Latest: %s [%s])rs   rF   rk   )r$   rI   r)   r)   r*   output_legacy_latest   s    z ListCommand.output_legacy_latestc             C   s   t |dd d}|jdkr:|r:t||\}}| j|| n~|jdkrfxr|D ]}tjd|j|j qJW nR|jdkrtjt|| n6x4|D ],}|j	rtj| j
| qtj| j| qW d S )Nc             S   s
   | j j S )N)rr   lower)rI   r)   r)   r*   <lambda>   s    z4ListCommand.output_package_listing.<locals>.<lambda>)rL   r   r   z%s==%sr   )sortedr   format_for_columnsoutput_package_listing_columnsr^   inforr   rV   format_for_jsonr<   rt   rs   )r$   rD   r2   dataheaderrI   r)   r)   r*   rC      s    



z"ListCommand.output_package_listingc             C   sh   t |dkr|jd| t|\}}t |dkrL|jddjtdd | x|D ]}tj| qRW d S )Nr       c             S   s   d|  S )N-r)   )xr)   r)   r*   rv     s    z<ListCommand.output_package_listing_columns.<locals>.<lambda>)leninserttabulater`   mapr^   rz   )r$   r|   r}   pkg_stringssizesvalr)   r)   r*   ry     s    
z*ListCommand.output_package_listing_columns)__name__
__module____qualname____doc__nameusagesummaryr   r3   rE   r@   rA   rB   rK   rs   rt   rC   ry   __classcell__r)   r)   )r(   r*   r      s   @6'
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jdd t||D }|j| qTW ||fS )Nr   c             s   s   | ]}t |V  qd S )N)r   )rH   r   r)   r)   r*   rN     s    ztabulate.<locals>.<genexpr>c             S   s"   g | ]\}}t |tt|qS r)   )rg   r   str)rH   scr)   r)   r*   rJ     s    ztabulate.<locals>.<listcomp>r   c             S   s*   g | ]"\}}|d k	r"t |j|ndqS )N )r   ljust)rH   r   r   r)   r)   r*   rJ     s   )r   AssertionErrorrg   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 }tdd | D r@|jd xR| D ]J}|j|jg}|rr|j|j |j|j t|r|j|j |j| qFW ||fS )z_
    Convert the package data into something usable
    by output_package_listing_columns.
    PackageVersionLatestTypec             s   s   | ]}t |V  qd S )N)r
   )rH   r   r)   r)   r*   rN   2  s    z%format_for_columns.<locals>.<genexpr>Location)	r<   anyr   rr   rV   rF   rk   r
   ri   )pkgsr2   running_outdatedr}   r|   projr   r)   r)   r*   rx   %  s     

rx   c             C   sZ   g }xJ| D ]B}|j tj|jd}|jrBtj|j|d< |j|d< |j| q
W tj	|S )N)r   rV   rF   rk   )
rr   r   	text_typerV   r<   rF   rk   r   r   dumps)rD   r2   r|   rI   rz   r)   r)   r*   r{   F  s    

r{   ) 
__future__r   r   loggingr8   	itertoolsr   ImportErrorr   pip._vendorr   pip.basecommandr   pip.exceptionsr   	pip.indexr   	pip.utilsr	   r
   Zpip.utils.deprecationr   Zpip.cmdoptionsr   r   	getLoggerr   r^   r   r   rx   r{   r)   r)   r)   r*   <module>   s(   
 |!