U
    :û<iˆ  ã                   @   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 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_outputc                       s0   e Zd ZdZdZdZ‡ fdd„Zdd„ Z‡  ZS )ÚShowCommandzx
    Show information about one or more installed packages.

    The output is in RFC-compliant mail header format.
    z$
      %prog [options] <package> ...Tc                    s>   t t| ƒj||Ž | 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   )Úsuperr   Ú__init__Úcmd_optsÚ
add_optionÚparserÚinsert_option_group)ÚselfÚargsÚkw©Ú	__class__© ú[/var/www/html/mysite/school/venv/lib/python3.8/site-packages/pip/_internal/commands/show.pyr      s     ûzShowCommand.__init__c                 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   Úoptionsr   ÚqueryÚresultsr   r   r   Úrun*   s    
  ÿzShowCommand.run)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚusageZignore_require_venvr   r(   Ú__classcell__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Æ�q¢tƒ }| |¡ | ¡ }dD ]}| |¡||< �qâg }| ¡ 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>B   s     z(search_packages_info.<locals>.<listcomp>c                    s   g | ]\}}|ˆ kr|‘qS r   r   )r/   r0   Úpkg©Ú	installedr   r   r1   D   s      zPackage(s) not found: %sú, c                    s   t | ƒ‰ ‡ fdd„tjD ƒS )Nc                    s(   g | ] }ˆ d d„ |  ¡ D ƒkr|j‘qS )c                 S   s   g | ]}t |jƒ‘qS r   )r   r0   )r/   Úrequiredr   r   r   r1   N   s     zSsearch_packages_info.<locals>.get_requiring_packages.<locals>.<listcomp>.<listcomp>)ÚrequiresÚproject_name©r/   r2   ©Úcanonical_namer   r   r1   K   s   ÿÿÿzHsearch_packages_info.<locals>.get_requiring_packages.<locals>.<listcomp>)r   r   Úworking_set)Úpackage_namer   r:   r   Úget_requiring_packagesI   s    
ÿz4search_packages_info.<locals>.get_requiring_packagesc                    s   g | ]}|ˆ krˆ | ‘qS r   r   r9   r3   r   r   r1   R   s      c                 S   s   g | ]
}|j ‘qS r   )r8   )r/   Údepr   r   r   r1   W   s     )r0   ÚversionÚlocationr7   Úrequired_byNZRECORDc                 S   s   g | ]}|  d ¡d ‘qS )ú,r   )Úsplit)r/   Úlr   r   r   r1   `   s     c                    s   g | ]}t j ˆ j|¡‘qS r   )ÚosÚpathÚjoinrA   ©r/   Úp©Údistr   r   r1   a   s     c                    s   g | ]}t j |ˆ j¡‘qS r   ©rF   rG   ÚrelpathrA   rI   rK   r   r   r1   b   s     ÚMETADATAzinstalled-files.txtc                    s   g | ]}t j ˆ j|¡‘qS r   )rF   rG   rH   Úegg_inforI   rK   r   r   r1   j   s     c                    s   g | ]}t j |ˆ j¡‘qS r   rM   rI   rK   r   r   r1   k   s     zPKG-INFOzentry_points.txtÚentry_pointsZ	INSTALLERÚ	installer)úmetadata-versionÚsummaryú	home-pageÚauthorúauthor-emailÚlicensezClassifier: Úclassifiersr   )r   r<   r   r8   ÚsortedÚzipr!   r"   rH   r@   rA   r7   Ú
isinstanceÚDistInfoDistributionÚhas_metadataÚget_metadata_linesÚget_metadataÚstripr   ÚfeedÚcloseÚgetÚ
splitlinesÚ
startswithÚappendÚlen)r&   rJ   Zquery_namesÚmissingr>   ÚpackageÚ	file_listÚmetadataÚlinesÚpathsrQ   ÚlineZfeed_parserZpkg_info_dictÚkeyrY   r   )rL   r4   r   r#   7   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%|krtd&ƒ q|S )'zD
    Print the informations from installed distributions found.
    FTr   z---zName: %sr0   Ú zVersion: %sr@   zSummary: %srT   zHome-page: %srU   z
Author: %srV   zAuthor-email: %srW   zLicense: %srX   zLocation: %srA   zRequires: %sr5   r7   zRequired-by: %srB   zMetadata-Version: %srS   zInstaller: %srR   zClassifiers:rY   z  %szEntry-points:rQ   zFiles:r   z!Cannot locate installed-files.txt)Ú	enumerater
   rd   rH   ra   )	Údistributionsr   r    Zresults_printedÚirL   Ú
classifierÚentryro   r   r   r   r$   �   sB    
ÿ
r$   )FF)Ú
__future__r   ÚloggingrF   Úemail.parserr   Zpip._vendorr   Úpip._vendor.packaging.utilsr   Zpip._internal.cli.base_commandr   Úpip._internal.cli.status_codesr   r	   Úpip._internal.utils.miscr
   Ú	getLoggerr)   r!   r   r#   r$   r   r   r   r   Ú<module>   s   
#X