U
    
Ha<)                     @   s  d dl Z d dlZd dlZ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 d dlmZ d dlmZ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 e e!Z"G dd de	Z#dddZ$ee%dddZ&ee#dddZ'G dd dZ(dS )    N)		ContainerDictIterableIteratorList
NamedTupleOptionalSetUnion)Requirement)canonicalize_name)Version)
BadCommandInstallationError)BaseDistributionget_environment)install_req_from_editableinstall_req_from_line)
COMMENT_RE)%direct_url_as_pep440_direct_referencec                   @   s.   e Zd ZU ee ed< eed< ee ed< dS )_EditableInforequirementeditablecommentsN)__name__
__module____qualname__r   str__annotations__boolr    r    r    C/tmp/pip-unpacked-wheel-tx790h60/pip/_internal/operations/freeze.pyr       s   
r   Fr    c                 c   sX  i }t |j|d|d}|D ]$}	t|	}
|r6|
jr6q|
||
j< q| rt }tt	}| D ]z}t
|f}|D ]X}| r| ds|dr| }||krr|| |V  qr|ds|dr|dr|dd   }n|tdd   d}t||d	}nttd
| |d	}|jsRtd||  td qrt|j}||kr||j std|td
| |j n||j | qrt||  V  ||= ||j | qrW 5 Q R X q\| D ]4\}}t|dkrtd|dtt| qdV  t| dd dD ] }|j|kr2t| V  q2d S )Nr    )
local_onlyskip	user_only#)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    r!   <lambda>       zfreeze.<locals>.<lambda>)key) r   Ziter_installed_distributionsFrozenRequirement	from_distr   canonical_namesetcollectionsdefaultdictlistopenstrip
startswithrstripaddlenlstripr   r   r   subr,   loggerinfor   warningappendr   itemsjoinsortedvalues)r   r"   r$   pathsr(   Zexclude_editabler#   ZinstallationsdistsdistreqZemitted_optionsZ	req_filesZreq_file_pathreq_filelineZline_reqZline_req_canonical_namer,   filesZinstallationr    r    r!   freeze&   s    







 
  
rP   rK   returnc                 C   s0   t | jtr| j d| j S | j d| j S )Nz==z===)
isinstanceversionr   raw_name)rK   r    r    r!   _format_as_name_version   s    rV   c                 C   s  | j stddg dS | jdkrJt| }td| tddd| dgdS tjtj	| j}dd	l
m}m}m} ||}|dkrt| }td
|| t|dd| dgdS t|j}z||| j}W  n |k
r   t| }t|dd| d| dgd Y S  |k
rf }	 z:t| }t|dd| d| dd|	j dgd W Y S d}	~	X Y np tk
r   td||j tddg d Y S  tk
r }
 ztd|
 W 5 d}
~
X Y nX t|dg dS td| tdddgdS )zk
    Compute and return values (req, editable, comments) for use in
    FrozenRequirement.from_dist().
    NF)r   r   r   z*Editable requirement not found on disk: %sTz# Editable install not found ()r   )RemoteNotFoundErrorRemoteNotValidErrorvcsz1No VCS found for editable requirement "%s" in: %rz,# Editable install with no version control (z# Editable z install with no remote (z
 install (z4) with either a deleted local remote or invalid URI:z# ''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   r   locationrV   rA   rC   ospathnormcaseabspathpip._internal.vcsrX   rY   rZ   get_backend_for_dirdebugtyper   get_src_requirementrU   urlr   r,   r   )rK   Zdisplayr\   rX   rY   rZ   vcs_backendZvcs_namerL   exexcr    r    r!   _get_editable_info   s~    

 


rj   c                   @   s2   e Zd Zd
ddZeed dddZdd Zd	S )r2   r    c                 C   s&   || _ t|| _|| _|| _|| _d S r+   )r,   r   r4   rL   r   r   )selfr,   rL   r   r   r    r    r!   __init__   s
    
zFrozenRequirement.__init__rQ   c                 C   sV   t |\}}}|d kr4|s4|j}|r4t||j}g }|d krDt|}| |j|||dS )N)r   )rj   
direct_urlr   rU   rV   )clsrK   rL   r   r   rm   r    r    r!   r3      s     zFrozenRequirement.from_distc                 C   s4   | j }| jrd| }dt| jt|g d S )Nz-e 
)rL   r   rF   r8   r   r   )rk   rL   r    r    r!   __str__  s    
zFrozenRequirement.__str__N)r    )r   r   r   rl   classmethodr   r3   rp   r    r    r    r!   r2      s   
r2   )NFFNFFr    ))r6   loggingr]   typingr   r   r   r   r   r   r   r	   r
   "pip._vendor.packaging.requirementsr   pip._vendor.packaging.utilsr   Zpip._vendor.packaging.versionr   pip._internal.exceptionsr   r   Zpip._internal.metadatar   r   pip._internal.req.constructorsr   r   Zpip._internal.req.req_filer   Z&pip._internal.utils.direct_url_helpersr   	getLoggerr   rA   r   rP   r   rV   rj   r2   r    r    r    r!   <module>   s0   ,
       
tS