o
    Uh                     @  s  d Z ddlmZ ddl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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)	GeneratorIterable)suppress)Parser)reduce)Callable
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   f/var/www/html/figdemos/bartoux_crm/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_setZ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 )zCheck 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)   r0   missingconflictingpackage_nameZpackage_detailZmissing_depsZconflicting_depsreqr,   Zmissedr   r   r   r   check_package_set=   s4   	



rD   
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,   Z	whitelistr   r   <lambda>y   s    z)check_install_conflicts.<locals>.<lambda>)r0   )r.   _simulate_installation_of_create_whitelistrD   )rE   r)   _would_be_installedr   rI   r   check_install_conflictsj   s   


rO   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 )NZWHEELr   )r   FileNotFoundError	read_textr   	frozensetunionmapr   r   parsestrget_all
isdisjoint)rP   rR   pZ
wheel_fileZ
wheel_tagsr   r   r   check_unsupported~   s   


r^   set[NormalizedName]c                 C  sL   t  }| D ]}t|}| }|j}t|jt| ||< || q|S )z=Computes the version of packages after installing to_install.)	r8   r   get_metadata_distributionr"   r   r   r#   r$   r;   )rE   r)   	installedZinst_reqabstract_distr+   r,   r   r   r   rK      s   rK   rN   c                 C  sL   t | }|D ]}||v rq|| jD ]}t|j|v r"||  nqq|S rH   )r8   r   r   r,   r;   )rN   r)   Zpackages_affectedrB   rC   r   r   r   rL      s   
rL   )r   r   rH   )r)   r/   r0   r1   r   r2   )rE   rF   r   rG   )rP   rQ   rR   rS   r   rT   )rE   rF   r)   r/   r   r_   )rN   r_   r)   r/   r   r_   )6__doc__
__future__r   loggingcollections.abcr   r   
contextlibr   email.parserr   	functoolsr   typingr   r	   "pip._vendor.packaging.requirementsr
   Zpip._vendor.packaging.tagsr   r   pip._vendor.packaging.utilsr   r   pip._vendor.packaging.versionr   pip._internal.distributionsr   pip._internal.metadatar   Zpip._internal.metadata.baser   pip._internal.req.req_installr   	getLoggerr   r'   r   dictr/   tupleZMissingZConflictingr#   ZMissingDictZConflictingDictr2   rG   r.   rD   rO   r^   rK   rL   r   r   r   r   <module>   s@    


-

