U
    +|jÒ  ã                   @   s¬   d dl Z d dlZd dlmZ d dlmZ d dlmZmZ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 )é    N)Ú
FeedParser)ÚValues)ÚDictÚIteratorÚList)Úpkg_resources©Úcanonicalize_name)ÚCommand)ÚERRORÚSUCCESS)Úwrite_outputc                   @   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   úcC:\Users\snmko\Desktop\web_content\django_cbt\venv\Lib\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Æ�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>A   s     z(search_packages_info.<locals>.<listcomp>c                    s   g | ]\}}|ˆ kr|‘qS r   r   )r.   r/   Úpkg©Ú	installedr   r   r0   C   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	   r/   )r.   Úrequiredr   r   r   r0   N   s     zSsearch_packages_info.<locals>.get_requiring_packages.<locals>.<listcomp>.<listcomp>)ÚrequiresÚproject_name©r.   r1   ©Úcanonical_namer   r   r0   K   s   ÿÿÿzHsearch_packages_info.<locals>.get_requiring_packages.<locals>.<listcomp>)r	   r   Úworking_set)Úpackage_namer   r9   r   Úget_requiring_packagesH   s    
ÿz4search_packages_info.<locals>.get_requiring_packagesc                    s   g | ]}|ˆ krˆ | ‘qS r   r   r8   r2   r   r   r0   R   s      c                 S   s   g | ]
}|j ‘qS r   )r7   )r.   Údepr   r   r   r0   W   s     )r/   ÚversionÚlocationr6   Úrequired_byNÚ ÚRECORDc                 S   s   g | ]}|  d ¡d ‘qS )ú,r   )Úsplit)r.   Úliner   r   r   r0   `   s     c                    s   g | ]}t j ˆ j|¡‘qS r   )ÚosÚpathÚjoinr@   ©r.   Úp©Údistr   r   r0   a   s     c                    s   g | ]}t j |ˆ j¡‘qS r   ©rG   rH   Úrelpathr@   rJ   rL   r   r   r0   b   s     ÚMETADATAzinstalled-files.txtc                    s   g | ]}t j ˆ j|¡‘qS r   )rG   rH   rI   Úegg_inforJ   rL   r   r   r0   j   s     c                    s   g | ]}t j |ˆ j¡‘qS r   rN   rJ   rL   r   r   r0   k   s     zPKG-INFOzentry_points.txtÚentry_pointsÚ	INSTALLERÚ	installer)úmetadata-versionÚsummaryú	home-pageÚauthorúauthor-emailÚlicensezClassifier: Úclassifiersr   )r   r;   r	   r7   ÚsortedÚzipr   r    rI   r?   r@   r6   Ú
isinstanceÚDistInfoDistributionÚhas_metadataÚget_metadata_linesÚget_metadataÚstripr   ÚfeedÚcloseÚgetÚ
splitlinesÚ
startswithÚappendÚlen)r%   rK   Zquery_namesÚmissingr=   ÚpackageÚ	file_listÚmetadataÚlinesÚpathsrR   rF   Úfeed_parserÚpkg_info_dictÚkeyr[   r   )rM   r3   r   r!   5   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 )'zC
    Print the information from installed distributions found.
    FTr   z---zName: %sr/   rB   zVersion: %sr?   zSummary: %srV   zHome-page: %srW   z
Author: %srX   zAuthor-email: %srY   zLicense: %srZ   zLocation: %sr@   zRequires: %sr4   r6   zRequired-by: %srA   zMetadata-Version: %srU   zInstaller: %srT   zClassifiers:r[   z  %szEntry-points:rR   zFiles:r   z!Cannot locate installed-files.txt)Ú	enumerater   rf   rI   rc   )	Údistributionsr   r   Zresults_printedÚirM   Ú
classifierÚentryrF   r   r   r   r"   �   sB    
ÿ
r"   )FF)ÚloggingrG   Úemail.parserr   Úoptparser   Útypingr   r   r   Úpip._vendorr   Úpip._vendor.packaging.utilsr	   Ú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   
$Z