U
    +|j'  ã                   @   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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mZ d d	lmZm Z  e !e"¡Z#ee	ee$ef  e%ee$ f Z&ddd„Z'dd„ Z(G dd„ dƒZ)dS )é    N)	Ú	ContainerÚDictÚIterableÚIteratorÚListÚOptionalÚSetÚTupleÚUnion)Úcanonicalize_name)ÚDistributionÚRequirementÚ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_distributionsF© c                 c   s²  |pg }|D ]}d|› �V  qi }	t |d||d�D ]b}
zt |
¡}W n8 tk
r| } zt d|
|¡ W Y ¢q2W 5 d }~X Y nX |rŠ|jrŠq2||	|j< q2| �rxtƒ }t	 
t¡}| D �]€}t|ƒ��l}|D �]^}| ¡ rî| ¡  d¡sî| d¡�r| ¡ }||krÆ| |¡ |V  qÆ| d¡�s(| d¡�rn| d¡�rF|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 5 Q R X q°| ¡ D ]4\}}t|ƒdk�r<t d|d tt|ƒƒ¡¡ �q<dV  t|	 ¡ dd„ d�D ] }|j|k�rŒt|ƒ ¡ V  �qŒd 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   úgC:\Users\snmko\Desktop\web_content\django_cbt\venv\Lib\site-packages\pip/_internal/operations/freeze.pyÚ<lambda>£   ó    zfreeze.<locals>.<lambda>)Úkey) r   ÚFrozenRequirementÚ	from_distr   ÚloggerÚwarningÚeditableÚcanonical_nameÚsetÚcollectionsÚdefaultdictÚlistÚopenÚstripÚ
startswithÚrstripÚaddÚlenÚlstripr   r   r   Úsubr$   Úinfor   ÚappendÚstrÚitemsÚjoinÚsortedÚvalues)ÚrequirementÚ
find_linksr   r   r   r    Z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´    ü
 þ



ÿþ
þþ ýÿÿ
ûÿ ÿÿ ÿ
rM   c              
   C   sF  t | ƒsddg fS tj tj | j¡¡}ddlm}m} | 	|¡}|dkrx|  
¡ }t d||¡ d|› d�g}|d|fS z| || j¡}W n” |k
rÄ   |  
¡ }d	 t|ƒj|¡g}|d|f Y S  tk
rð   t d
||j¡ ddg f Y S  tk
�r } zt d|¡ W 5 d}~X Y nX |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ÚlocationÚpip._internal.vcsrN   rO   Úget_backend_for_dirÚas_requirementr-   ÚdebugÚget_src_requirementÚproject_nameÚformatÚtypeÚ__name__r   r.   r$   r   )rG   rU   rN   rO   Úvcs_backendrH   ÚcommentsrI   r   r   r'   Úget_requirement_info¨   sX    

 þ
ÿ
 ÿÿüþ
 ÿra   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 r#   )r$   r   r0   rH   r/   r`   )Úselfr$   rH   r/   r`   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)r`   )ra   r   r   r[   rX   )ÚclsrG   rH   r/   r`   Ú
direct_urlr   r   r'   r,   î   s     ÿzFrozenRequirement.from_distc                 C   s4   | j }| jrd|› �}d t| jƒt|ƒg ¡d S )Nz-e Ú
)rH   r/   rA   r4   r`   r?   )rb   rH   r   r   r'   Ú__str__  s    
zFrozenRequirement.__str__N)r   )r^   Ú
__module__Ú__qualname__rc   Úclassmethodr,   rg   r   r   r   r'   r+   å   s   

r+   )NNFFNFFr   )*r2   ÚloggingrQ   Útypingr   r   r   r   r   r   r   r	   r
   Úpip._vendor.packaging.utilsr   Úpip._vendor.pkg_resourcesr   r   r   Ú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   Ú	getLoggerr^   r-   r?   ÚboolZRequirementInforM   ra   r+   r   r   r   r'   Ú<module>   s0   ,
        ø
 =