U
    +|j}  ã                   @   s<  d Z ddlZddlmZ ddl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 dd	lmZ erŒdd
lmZ e e¡Zed Zeeef Zeeeef Zede	e f Zede	e f Z eee f Z!eee!f Z"edddgƒZ#eede$f dœdd„Z%ddd„Z&dd„ Z'dd„ Z(dd„ Z)dS )z'Validation of dependencies of packages
é    N)Ú
namedtuple)ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚListÚOptionalÚSetÚTuple)Úcanonicalize_name)ÚRequirementParseError)Ú)make_distribution_for_install_requirement)ÚInstallRequirement)Úget_installed_distributions)ÚNormalizedName)r   ÚPackageDetailsr   r   ÚversionÚrequiresÚ
PackageSet)ÚkwargsÚreturnc                  K   sŽ   | i krdddœ} i }d}t f | ŽD ]`}t|jƒ}zt|j| ¡ ƒ||< W q$ ttfk
r‚ } zt 	d||¡ d}W 5 d}~X Y q$X q$||fS )z8Converts a list of distributions into a PackageSet.
    F© )Ú
local_onlyÚskipz%Error parsing requirements for %s: %sTN)
r   r   Úproject_namer   r   r   ÚOSErrorr   ÚloggerÚwarning)r   Úpackage_setÚproblemsÚdistÚnameÚer   r   úfC:\Users\snmko\Desktop\web_content\django_cbt\venv\Lib\site-packages\pip/_internal/operations/check.pyÚ!create_package_set_from_installed!   s    

r$   c                 C   sØ   i }i }|   ¡ D ]¾\}}tƒ }tƒ }|r2||ƒr2q|jD ]l}t|jƒ}	|	| krzd}
|jdk	rf|j ¡ }
|
r8| |	|f¡ q8| |	 j}|j	j
|dd�s8| |	||f¡ q8|rºt|td�||< |rt|td�||< q||fS )z—Check if a package set is consistent

    If should_ignore is passed, it should be a callable that takes a
    package name and returns a boolean.
    TN)Úprereleases)Úkey)ÚitemsÚsetr   r   r   ÚmarkerÚevaluateÚaddr   Ú	specifierÚcontainsÚsortedÚstr)r   Úshould_ignoreÚmissingÚconflictingÚpackage_nameÚpackage_detailÚmissing_depsÚconflicting_depsÚreqr!   Úmissedr   r   r   r#   Úcheck_package_set5   s0    




r9   c                    s6   t ƒ \}}t| |ƒ}t||ƒ‰ |t|‡ fdd„d�fS )zeFor checking if the dependency graph would be consistent after     installing given requirements
    c                    s   | ˆ kS ©Nr   )r!   ©Ú	whitelistr   r#   Ú<lambda>q   ó    z)check_install_conflicts.<locals>.<lambda>)r0   )r$   Ú_simulate_installation_ofÚ_create_whitelistr9   )Ú
to_installr   Ú_Úwould_be_installedr   r;   r#   Úcheck_install_conflictsa   s    


 
ÿþrD   c                 C   sX   t ƒ }| D ]H}t|ƒ}| ¡ }|dk	s*t‚t|jƒ}t|j| ¡ ƒ||< | 	|¡ q
|S )zBComputes the version of packages after installing to_install.
    N)
r(   r   Úget_pkg_resources_distributionÚAssertionErrorr   r&   r   r   r   r+   )rA   r   Ú	installedÚinst_reqÚabstract_distr    r!   r   r   r#   r?   v   s    
r?   c                 C   sL   t | ƒ}|D ]:}||krq|| jD ] }t|jƒ|kr$| |¡  qq$q|S r:   )r(   r   r   r!   r+   )rC   r   Úpackages_affectedr3   r7   r   r   r#   r@   Œ   s    
r@   )N)*Ú__doc__ÚloggingÚcollectionsr   Útypingr   r   r   r   r   r   r	   r
   Úpip._vendor.packaging.utilsr   Úpip._vendor.pkg_resourcesr   Úpip._internal.distributionsr   Zpip._internal.req.req_installr   Úpip._internal.utils.miscr   r   Ú	getLoggerÚ__name__r   r   r/   ÚMissingÚConflictingÚMissingDictÚConflictingDictÚCheckResultÚConflictDetailsr   Úboolr$   r9   rD   r?   r@   r   r   r   r#   Ú<module>   s0   (

,