a
    e0hT                     @   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mZ d dlmZ d d	lmZ erd d
lmZ d dlmZmZmZ eeZG dd deZdd ZdddZdS )    )absolute_importN)
FeedParser)pkg_resourcescanonicalize_name)Command)ERRORSUCCESS)write_output)MYPY_CHECK_RUNNING)Values)DictIteratorListc                   @   s(   e Zd ZdZdZdZdd Zdd ZdS )	ShowCommandzx
    Show information about one or more installed packages.

    The output is in RFC-compliant mail header format.
    z$
      %prog [options] <package> ...Tc                 C   s,   | j jddddddd | jd| j  d S )	Nz-fz--filesfiles
store_trueFz7Show the full list of installed files for each package.)destactiondefaulthelpr   )cmd_opts
add_optionparserinsert_option_group)self r   I/var/www/auris/lib/python3.9/site-packages/pip/_internal/commands/show.pyadd_options!   s    zShowCommand.add_optionsc                 C   s8   |st d tS |}t|}t||j|jds4tS tS )Nz.ERROR: Please provide a package name or names.)
list_filesverbose)loggerwarningr   search_packages_infoprint_resultsr   r    r	   )r   optionsargsqueryresultsr   r   r   run,   s    

zShowCommand.runN)__name__
__module____qualname____doc__usageignore_require_venvr   r)   r   r   r   r   r      s
   r   c                 #   sT  i t jD ]}|t|j< q
dd | D }tfddt| |D }|r^tdd| dd }fdd|D D ]ԉ  j j	 j
d	d   D | jd
}d}d}t t jr dr d}dd |D }	 fdd|	D }	 fdd|	D } drn d}nP drX d}	 fdd|	D }	 fdd|	D } drn d} dr d}
|
|d<  drƈ dD ]"}| r| |d<  qƐqt }|| | }dD ]}||||< qg }| D ](}|dr||tdd  q||d< |rHt||d< |V  qxdS )z
    Gather details from installed distributions. Print distribution name,
    version, location, and installed files. Installed files requires a
    pip generated 'installed-files.txt' in the distributions '.egg-info'
    directory.
    c                 S   s   g | ]}t |qS r   r   ).0namer   r   r   
<listcomp>F       z(search_packages_info.<locals>.<listcomp>c                    s   g | ]\}}| vr|qS r   r   )r0   r1   pkg	installedr   r   r2   H   r3   zPackage(s) not found: %s, c                    s   t |   fddtjD S )Nc                    s(   g | ] } d d |  D v r|jqS )c                 S   s   g | ]}t |jqS r   )r   r1   )r0   requiredr   r   r   r2   S   r3   zSsearch_packages_info.<locals>.get_requiring_packages.<locals>.<listcomp>.<listcomp>)requiresproject_namer0   r4   canonical_namer   r   r2   P   s   zHsearch_packages_info.<locals>.get_requiring_packages.<locals>.<listcomp>)r   r   working_set)package_namer   r<   r   get_requiring_packagesM   s    
z4search_packages_info.<locals>.get_requiring_packagesc                    s   g | ]}| v r | qS r   r   r;   r5   r   r   r2   W   r3   c                 S   s   g | ]
}|j qS r   )r:   )r0   depr   r   r   r2   \   r3   )r1   versionlocationr9   required_byN RECORDc                 S   s   g | ]}| d d qS ),r   )split)r0   liner   r   r   r2   e   r3   c                    s   g | ]}t j j|qS r   )ospathjoinrC   r0   pdistr   r   r2   f   r3   c                    s   g | ]}t j| jqS r   rJ   rK   relpathrC   rM   rO   r   r   r2   g   r3   METADATAzinstalled-files.txtc                    s   g | ]}t j j|qS r   )rJ   rK   rL   egg_inforM   rO   r   r   r2   o   r3   c                    s   g | ]}t j| jqS r   rQ   rM   rO   r   r   r2   p   r3   zPKG-INFOzentry_points.txtentry_points	INSTALLER	installer)metadata-versionsummary	home-pageauthorauthor-emaillicensezClassifier: classifiersr   )r   r>   r   r:   sortedzipr!   r"   rL   rB   rC   r9   
isinstanceDistInfoDistributionhas_metadataget_metadata_linesget_metadatastripr   feedcloseget
splitlines
startswithappendlen)r'   rN   Zquery_namesmissingr@   package	file_listmetadatalinespathsrU   rI   feed_parserpkg_info_dictkeyr^   r   )rP   r6   r   r#   :   sl    








r#   Fc           	   	   C   s  d}t | D ]\}}d}|dkr*td td|dd td|d	d td
|dd td|dd td|dd td|dd td|dd td|dd tdd|dg  tdd|dg  |rdtd|dd td|dd td |d g D ]}td!| q(td" |d#g D ]}td!|  qN|rtd$ |d%g D ]}td!|  q|d%|vrtd& q|S )'zC
    Print the information from installed distributions found.
    FTr   z---zName: %sr1   rE   zVersion: %srB   zSummary: %srY   zHome-page: %srZ   z
Author: %sr[   zAuthor-email: %sr\   zLicense: %sr]   zLocation: %srC   zRequires: %sr7   r9   zRequired-by: %srD   zMetadata-Version: %srX   zInstaller: %srW   zClassifiers:r^   z  %szEntry-points:rU   zFiles:r   z!Cannot locate installed-files.txt)	enumerater
   ri   rL   rf   )	distributionsr   r    Zresults_printedirP   
classifierentryrI   r   r   r   r$      sB    

r$   )FF)
__future__r   loggingrJ   email.parserr   pip._vendorr   pip._vendor.packaging.utilsr   pip._internal.cli.base_commandr   pip._internal.cli.status_codesr   r	   pip._internal.utils.miscr
   pip._internal.utils.typingr   optparser   typingr   r   r   	getLoggerr*   r!   r   r#   r$   r   r   r   r   <module>   s    
$Z