
^V                 @   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 m Z d  d l m Z d  d l m Z m Z e j e  Z Gd	 d
   d
 e  Z d S)    )absolute_importN)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   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 d d | j d	 d
 d d d d d d | j d d d d d d d d | j d d d d d d d d |  j j d d d d d d d d d | j d d d d d d d t t |  j  } |  j j d |  |  j j d |  d  S)Nz-oz
--outdatedaction
store_truedefaultFhelpzList outdated packagesz-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destuserz,Only output packages installed in user-site.z--prezYInclude pre-release and development versions. By default, pip only finds stable versions.r   )	superr   __init__cmd_opts
add_optionr	   r
   parserinsert_option_group)selfargskwr   
index_opts)	__class__ 0/tmp/pip-build-9m6vxulb/pip/pip/commands/list.pyr      sH    						zListCommand.__init__c             C   s7   t  d | j d | d | j d | j d | 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!   r%   r   r   r   _build_package_finderL   s    				z!ListCommand._build_package_finderc             C   s   | j  r t j d t  n  | j r8 t j d t  n  | j rT t j d t  n  | j ru | j ru t d   n  | j r |  j	 |  n& | j r |  j
 |  n |  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.z5Options --outdated and --uptodate cannot be combined.)allow_externalwarningswarnr   allow_all_externalallow_unverifiedoutdateduptodater   run_outdatedrun_uptodaterun_listing)r   r'   r   r   r   r   runY   s(    	
	
	
		zListCommand.runc             C   sj   xc t  |  j |  d d d   D]@ \ } } } | | j k r" t j d |  j |  | |  q" q" Wd  S)Nkeyc             S   s   |  d j  j   S)Nr   )project_namelower)pr   r   r   <lambda>   s    z*ListCommand.run_outdated.<locals>.<lambda>z%s - Latest: %s [%s])sortedfind_packages_latest_versionsparsed_versionloggerinfooutput_package)r   r'   distlatest_versiontypr   r   r   r0   |   s    zListCommand.run_outdatedc             c   s  | j  g | j } | j r> t j d d j |   g  } n  g  } xT t d | j d | j d | j	  D]. } | j
 d  ri | j | j d   qi qi W|  j |   } |  j | | |  } | j |  t d | j d | j d | j	  } x | D] } d } | j | j  }	 | j s7d d	   |	 D }	 n  |	 sCq n  t |	 d
 | j }
 |
 j } |
 j j rvd } n d } | | | f Vq WWd  QXd  S)NzIgnoring indexes: %s,
local_only	user_onlyeditables_onlyzdependency_links.txtunknownc             S   s"   g  |  ] } | j  j s |  q Sr   )versionis_prerelease).0	candidater   r   r   
<listcomp>   s   	 z=ListCommand.find_packages_latest_versions.<locals>.<listcomp>r4   wheelsdist)	index_urlextra_index_urlsno_indexr<   r=   joinr   localr   editablehas_metadataextendget_metadata_lines_build_sessionr(   add_dependency_linksfind_all_candidatesr4   r&   max_candidate_sort_keyrG   locationis_wheel)r   r'   r!   dependency_linksr?   r%   finderinstalled_packagesrA   all_candidatesbest_candidateremote_versionr   r   r   r:      sB    											z)ListCommand.find_packages_latest_versionsc             C   s5   t  d | j d | j d | j  } |  j |  d  S)NrC   rD   rE   )r   rR   r   rS   output_package_listing)r   r'   r`   r   r   r   r2      s
    		zListCommand.run_listingc             C   s>   t  |  r& d | j | j | j f Sd | j | j f Sd  S)Nz%s (%s, %s)z%s (%s))r   r5   rG   r\   )r   r?   r   r   r   r>      s    zListCommand.output_packagec             C   sC   t  | d d d   } x$ | D] } t j |  j |   q Wd  S)Nr4   c             S   s   |  j  j   S)N)r5   r6   )r?   r   r   r   r8      s    z4ListCommand.output_package_listing.<locals>.<lambda>)r9   r<   r=   r>   )r   r`   r?   r   r   r   rd      s
    z"ListCommand.output_package_listingc             C   sY   g  } x? |  j  |  D]. \ } } } | j | k r | j |  q q W|  j |  d  S)N)r:   r;   appendrd   )r   r'   r/   r?   rG   rA   r   r   r   r1      s
    zListCommand.run_uptodate)__name__
__module____qualname____doc__nameusagesummaryr   r(   r3   r0   r:   r2   r>   rd   r1   r   r   )r   r   r      s   /#
,
r   )
__future__r   loggingr*   pip.basecommandr   pip.exceptionsr   	pip.indexr   	pip.utilsr   r   Zpip.utils.deprecationr   Zpip.cmdoptionsr	   r
   	getLoggerrf   r<   r   r   r   r   r   <module>   s   