a
    `(                  	   @   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%m&Z& d dl'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)		ContainerDictIterableIteratorListOptionalSetTupleUnion)DistributionRequirement)
WheelCacheF c	                 c   s  |pg }|D ]}	d |	V  qi }
t|d||dD ]h}zt|}W n> ty } z&td|| W Y d }~q2W Y d }~n
d }~0 0 |r|jrq2||
|j< q2| rt	 }t
t}| D ]}t|v}|D ]^}| r| ds|dr| }||vr|| |V  q|ds.|drt|drL|d	d   }n|tdd   d
}t||d}nttd| |d}|jstd||  td qt|j}||
vr||j std|td| |j n||j | qt|
|  V  |
|= ||j | qW d    q1 sD0    Y  qt|D ]4\}}t|dkrZtd|dt t	| qZdV  t |
! dd dD ] }|j|vrt| V  qd S )Nz-f {}r   )
local_onlyskip	user_onlypathsz6Could not generate requirement for distribution %r: %s#)z-rz--requirementz-fz--find-linksz-iz--index-urlz--prez--trusted-hostz--process-dependency-linksz--extra-index-urlz--use-featurez-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   A/usr/lib/python3/dist-packages/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   Z	iteritemsjoinsortedvalues)ZrequirementZ
find_linksr   r   r    r$   Zwheel_cacheZexclude_editabler   linkZinstallationsdistreqexcZemitted_optionsZ	req_filesZreq_file_pathZreq_filelineZline_reqZline_req_canonical_namer(   filesZinstallationr   r   r+   freeze/   s    
"





4
rN   c              
   C   sL  t | sddg fS tjtj| j}ddlm}m} |	|}|du rv| 
 }td|| d|g}|d|fS z||| j}W n |y   | 
 }dt|j|g}|d|f Y S  ty   td	||j ddg f Y S  ty } ztd
| W Y d}~nd}~0 0 |dur0|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   )RemoteNotFoundErrorvcsz1No 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locationZpip._internal.vcsrO   rP   Zget_backend_for_diras_requirementr2   debugr/   Zget_src_requirementproject_nametype__name__r   r3   r(   r   )rI   rU   rO   rP   Zvcs_backendrJ   commentsrK   r   r   r+   get_requirement_info   sT    





r\   c                   @   s*   e Zd Zd	ddZedd Zdd ZdS )
r0   r   c                 C   s&   || _ t|| _|| _|| _|| _d S r'   )r(   r   r5   rJ   r4   r[   )selfr(   rJ   r4   r[   r   r   r+   __init__   s
    
zFrozenRequirement.__init__c                 C   sX   t |\}}}|d u r6|s6t|}|r6t||j}g }|d u rF| }| |j|||dS )N)r[   )r\   r   r   rX   rV   )clsrI   rJ   r4   r[   Z
direct_urlr   r   r+   r1      s    zFrozenRequirement.from_distc                 C   s4   | j }| jrd|}dt| jt|g d S )Nz-e {}
)rJ   r4   r/   rE   r9   r[   rD   )r]   rJ   r   r   r+   __str__  s    
zFrozenRequirement.__str__N)r   )rZ   
__module____qualname__r^   classmethodr1   ra   r   r   r   r+   r0      s   

r0   )	NNFFNFNFr   )3Z
__future__r   r7   ZloggingrQ   Zpip._vendorr   Zpip._vendor.packaging.utilsr   Zpip._vendor.pkg_resourcesr   Zpip._internal.exceptionsr   r   Zpip._internal.req.constructorsr   r	   Zpip._internal.req.req_filer
   Z&pip._internal.utils.direct_url_helpersr   r   Zpip._internal.utils.miscr   r   Zpip._internal.utils.typingr   typingr   r   r   r   r   r   r   r   r   r   r   Zpip._internal.cacher   rD   boolZRequirementInfoZ	getLoggerrZ   r2   rN   r\   objectr0   r   r   r   r+   <module>   s>   ,
         
 >