o
    ©„j  ã                   @  s€  d Z ddlmZ ddlZddl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 dd
lmZmZ ddl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 "e#¡Z$G dd„ deƒZ%e&ee%f Z'e(eef Z)e(eeef Z*e&ee+e) f Z,e&ee+e* f Z-e(e,e-f Z.e(e'e.f Z/d0dd„Z0	d1d2dd„Z1d3d!d"„Z2d4d(d)„Z3d5d+d,„Z4d6d.d/„Z5dS )7z&Validation of dependencies of packagesé    )ÚannotationsN)ÚCallableÚ	GeneratorÚIterable)Úsuppress)ÚParser)Úreduce)Ú
NamedTuple)ÚRequirement)ÚTagÚ	parse_tag)ÚNormalizedNameÚcanonicalize_name)ÚVersion)Ú)make_distribution_for_install_requirement)Úget_default_environment)ÚBaseDistribution)ÚInstallRequirementc                   @  s   e Zd ZU ded< ded< dS )ÚPackageDetailsr   Úversionzlist[Requirement]ÚdependenciesN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© r   r   ú\/var/www/html/django_cbt/venv/lib/python3.10/site-packages/pip/_internal/operations/check.pyr      s   
 r   Úreturnútuple[PackageSet, bool]c                  C  sŠ   i } d}t ƒ }|jddd�D ]2}|j}zt| ¡ ƒ}t|j|ƒ| |< W q ttfy@ } zt	 
d||¡ d}W Y d}~qd}~ww | |fS )z3Converts a list of distributions into a PackageSet.Fr   )Ú
local_onlyÚskipz$Error parsing dependencies of %s: %sTN)r   Úiter_installed_distributionsÚcanonical_nameÚlistÚiter_dependenciesr   r   ÚOSErrorÚ
ValueErrorÚloggerÚwarning)Úpackage_setÚproblemsÚenvÚdistÚnamer   Úer   r   r   Ú!create_package_set_from_installed+   s   €ýr/   r)   Ú
PackageSetÚshould_ignoreúCallable[[str], bool] | NoneÚCheckResultc                 C  sÞ   i }i }|   ¡ D ]b\}}tƒ }tƒ }|r||ƒrq|jD ]9}t|jƒ}	|	| vr@d}
|jdur6|j ddi¡}
|
r?| |	|f¡ q| |	 j}|j	j
|dd�sU| |	||f¡ q|r`t|td�||< |rjt|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ÚextraÚ )Úprereleases)Úkey)ÚitemsÚsetr   r   r-   ÚmarkerÚevaluateÚaddr   Ú	specifierÚcontainsÚsortedÚstr)r)   r1   ÚmissingÚconflictingÚpackage_nameÚpackage_detailÚmissing_depsÚconflicting_depsÚreqr-   Úmissedr   r   r   r   Úcheck_package_set<   s4   	



€€rI   Ú
to_installúlist[InstallRequirement]ÚConflictDetailsc                   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   | ˆ vS ©Nr   )r-   ©Ú	whitelistr   r   Ú<lambda>x   s    z)check_install_conflicts.<locals>.<lambda>)r1   )r/   Ú_simulate_installation_ofÚ_create_whitelistrI   )rJ   r)   Ú_Úwould_be_installedr   rN   r   Úcheck_install_conflictsi   s   


ÿþrU   ÚpackagesúIterable[BaseDistribution]Úsupported_tagsúIterable[Tag]ú'Generator[BaseDistribution, None, None]c              
   c  sx   � | D ]6}t tƒ�( | d¡}ttjtttƒ  	|¡ 
dg ¡ƒtƒ ƒ}| |¡r*|V  W d   ƒ n1 s4w   Y  qd S )NÚWHEELr   )r   ÚFileNotFoundErrorÚ	read_textr   Ú	frozensetÚunionÚmapr   r   ÚparsestrÚget_allÚ
isdisjoint)rV   rX   ÚpÚ
wheel_fileÚ
wheel_tagsr   r   r   Úcheck_unsupported}   s   €

ý
€ø€ÿrg   úset[NormalizedName]c                 C  sL   t ƒ }| D ]}t|ƒ}| ¡ }|j}t|jt| ¡ ƒƒ||< | |¡ q|S )z=Computes the version of packages after installing to_install.)	r9   r   Úget_metadata_distributionr"   r   r   r#   r$   r<   )rJ   r)   Ú	installedÚinst_reqÚabstract_distr,   r-   r   r   r   rQ   �   s   rQ   rT   c                 C  sL   t | ƒ}|D ]}||v rq|| jD ]}t|jƒ| v r"| |¡  nqq|S rM   )r9   r   r   r-   r<   )rT   r)   Úpackages_affectedrC   rG   r   r   r   rR       s   
þ€rR   )r   r   rM   )r)   r0   r1   r2   r   r3   )rJ   rK   r   rL   )rV   rW   rX   rY   r   rZ   )rJ   rK   r)   r0   r   rh   )rT   rh   r)   r0   r   rh   )6Ú__doc__Ú
__future__r   ÚloggingÚcollections.abcr   r   r   Ú
contextlibr   Úemail.parserr   Ú	functoolsr   Útypingr	   Ú"pip._vendor.packaging.requirementsr
   Úpip._vendor.packaging.tagsr   r   Úpip._vendor.packaging.utilsr   r   Úpip._vendor.packaging.versionr   Úpip._internal.distributionsr   Úpip._internal.metadatar   Úpip._internal.metadata.baser   Úpip._internal.req.req_installr   Ú	getLoggerr   r'   r   Údictr0   ÚtupleÚMissingÚConflictingr#   ÚMissingDictÚConflictingDictr3   rL   r/   rI   rU   rg   rQ   rR   r   r   r   r   Ú<module>   s@    

ÿ
-

