B
    `’»d[)  ã            	   @   s<  d dl mZ d dl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mZ d dlmZ d d	lmZmZ d d
lmZmZ d dlmZ erd dlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z& d dl	m'Z'm(Z( e"ee$e)e(f  e*ee) f Z+e ,e-¡Z.ddd„Z/dd„ Z0G dd„ de1ƒZ2dS )é    )Úabsolute_importN)Úsix)Úcanonicalize_name)ÚRequirementParseError)Ú
BadCommandÚInstallationError)Úinstall_req_from_editableÚinstall_req_from_line)Ú
COMMENT_RE)Ú%direct_url_as_pep440_direct_referenceÚdist_get_direct_url)Údist_is_editableÚget_installed_distributions)ÚMYPY_CHECK_RUNNING)	ÚIteratorÚOptionalÚListÚ	ContainerÚSetÚDictÚTupleÚIterableÚUnion)Ú
WheelCache)ÚDistributionÚRequirementF© c	             c   sÊ  |pg }x|D ]}	d  |	¡V  qW i }
xpt|d||dD ]\}yt |¡}W n2 tk
r| } zt d||¡ w8W d d }~X Y nX |rŠ|jrŠq8||
|j< q8W | rŒt	ƒ }t
 t¡}x| D ]†}t|ƒr}xh|D ]^}| ¡ rø| ¡  d¡sø| d¡r| ¡ }||krÐ| |¡ |V  qÐ| d¡s2| d¡rx| d¡rP|d	d …  ¡ }n|tdƒd …  ¡  d
¡}t||d}ntt d|¡ ¡ |d}|js¶t d|| ¡ ¡ t d¡ qÐt|jƒ}||
kr||j söt d|t d|¡ ¡ |j¡ n||j  |¡ qÐt|
| ƒ ¡ V  |
|= ||j  |¡ qÐW W d Q R X q¶W xBt |¡D ]4\}}t|ƒdkrNt d|d t t	|ƒƒ¡¡ qNW dV  x8t |
 !¡ dd„ dD ] }|j|kr¢t|ƒ ¡ V  q¢W d S )Nz-f {}r   )Ú
local_onlyÚskipÚ	user_onlyÚpathsz6Could not generate requirement for distribution %r: %sú#)z-rz--requirementz-Zz--always-unzipz-fz--find-linksz-iz--index-urlz--prez--trusted-hostz--process-dependency-linksz--extra-index-urlz-ez
--editableé   ú=)ÚisolatedÚ zWSkipping line in requirement file [%s] because it's not clear what it would install: %sz9  (add #egg=PackageName to the URL to avoid this warning)zBRequirement file [%s] contains %s, but package %r is not installedé   z+Requirement %s included multiple times [%s]z, z7## The following requirements were added by pip freeze:c             S   s
   | j  ¡ S )N)ÚnameÚlower)Úxr   r   úC/tmp/pip-unpacked-wheel-hu9qqap1/pip/_internal/operations/freeze.pyÚ<lambda>«   ó    zfreeze.<locals>.<lambda>)Úkey)"Úformatr   ÚFrozenRequirementÚ	from_distr   ÚloggerÚwarningÚeditableÚcanonical_nameÚsetÚcollectionsÚdefaultdictÚlistÚopenÚstripÚ
startswithÚrstripÚaddÚlenÚlstripr   r	   r
   Úsubr'   Úinfor   ÚappendÚstrr   Ú	iteritemsÚjoinÚsortedÚvalues)ÚrequirementÚ
find_linksr   r   r    r$   Úwheel_cacheZexclude_editabler   ÚlinkZinstallationsÚdistÚreqÚexcZemitted_optionsZ	req_filesZreq_file_pathÚreq_fileÚlineZline_reqZline_req_canonical_namer'   ÚfilesZinstallationr   r   r*   Úfreeze.   s    






"rR   c          
   C   sF  t | ƒsddg fS tj tj | j¡¡}ddlm}m} | 	|¡}|dkrv|  
¡ }t d||¡ d |¡g}|d|fS y| || j¡}W nŒ |k
r¾   |  
¡ }d t|ƒj|¡g}|d|fS  tk
ræ   t d	||j¡ ddg fS  tk
r } zt d
|¡ W dd}~X Y nX |dk	r*|dg fS t d|¡ dg}dd|fS )zk
    Compute and return values (req, editable, comments) for use in
    FrozenRequirement.from_dist().
    NFr   )ÚvcsÚRemoteNotFoundErrorz1No VCS found for editable requirement "%s" in: %rz/# Editable install with no version control ({})Tz)# Editable {} install with no remote ({})zPcannot determine version of editable source in %s (%s command not found in path)zYError when trying to get requirement for VCS system %s, falling back to uneditable formatz-Could not determine repository location of %sz-## !! Could not determine repository location)r   ÚosÚpathÚnormcaseÚabspathÚlocationÚpip._internal.vcsrS   rT   Úget_backend_for_dirÚas_requirementr1   Údebugr.   Úget_src_requirementÚproject_nameÚtypeÚ__name__r   r2   r'   r   )rL   rY   rS   rT   Úvcs_backendrM   ÚcommentsrN   r   r   r*   Úget_requirement_info°   sF    






rd   c               @   s*   e Zd Zd	dd„Zedd„ ƒZdd„ ZdS )
r/   r   c             C   s&   || _ t|ƒ| _|| _|| _|| _d S )N)r'   r   r4   rM   r3   rc   )Úselfr'   rM   r3   rc   r   r   r*   Ú__init__ï   s
    
zFrozenRequirement.__init__c             C   sX   t |ƒ\}}}|d kr6|s6t|ƒ}|r6t||jƒ}g }|d krF| ¡ }| |j|||dS )N)rc   )rd   r   r   r_   r\   )ÚclsrL   rM   r3   rc   Ú
direct_urlr   r   r*   r0   ÷   s    
zFrozenRequirement.from_distc             C   s4   | j }| jrd |¡}d t| jƒt|ƒg ¡d S )Nz-e {}Ú
)rM   r3   r.   rE   r8   rc   rC   )re   rM   r   r   r*   Ú__str__  s    
zFrozenRequirement.__str__N)r   )ra   Ú
__module__Ú__qualname__rf   Úclassmethodr0   rj   r   r   r   r*   r/   î   s   
r/   )	NNNNNFNFr   )3Ú
__future__r   r6   ÚloggingrU   Úpip._vendorr   Úpip._vendor.packaging.utilsr   Zpip._vendor.pkg_resourcesr   Úpip._internal.exceptionsr   r   Úpip._internal.req.constructorsr   r	   Zpip._internal.req.req_filer
   Ú&pip._internal.utils.direct_url_helpersr   r   Úpip._internal.utils.miscr   r   Úpip._internal.utils.typingr   Útypingr   r   r   r   r   r   r   r   r   Úpip._internal.cacher   r   r   rC   ÚboolZRequirementInfoÚ	getLoggerra   r1   rR   rd   Úobjectr/   r   r   r   r*   Ú<module>   s:   ,
        
y>