a
    b3j                     @  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/ddddZ0d/ddddddZ1dddd d!Z2d"d#d$d%d&d'Z3ddd(d)d*d+Z4d(dd(d,d-d.Z5dS )0z&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   {/www/wwwroot/dpstar/app/297b3aabda72fedb274352021c2dd8b5_venv/lib/python3.9/site-packages/pip/_internal/operations/check.pyr      s   
r   ztuple[PackageSet, bool])returnc                  C  s   i } d}t  }|jdddD ]f}|j}z t| }t|j|| |< W q ttfy } zt	
d|| d}W Y d}~qd}~0 0 q| |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.   
PackageSetzCallable[[str], bool] | NoneCheckResult)r(   should_ignorer   c                 C  s   i }i }|   D ]\}}t }t }|r2||r2q|jD ]r}t|j}	|	| vrd}
|jdurl|jddi}
|
r8||	|f q8| |	 j}|j	j
|dds8||	||f q8|rt|td||< |rt|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(   r1   missingconflictingpackage_namepackage_detailmissing_depsconflicting_depsreqr,   missedr   r   r   r   check_package_set=   s0    	



rG   zlist[InstallRequirement]ConflictDetails)
to_installr   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   |  vS Nr   )r,   	whitelistr   r   <lambda>y       z)check_install_conflicts.<locals>.<lambda>)r1   )r.   _simulate_installation_of_create_whitelistrG   )rI   r(   _would_be_installedr   rK   r   check_install_conflictsj   s    


rS   zIterable[BaseDistribution]zIterable[Tag]z'Generator[BaseDistribution, None, None])packagessupported_tagsr   c              
   c  sv   | D ]l}t tP |d}ttjttt 	|
dg t }||rR|V  W d    q1 sf0    Y  qd S )NZWHEELr   )r   FileNotFoundError	read_textr   	frozensetunionmapr   r   parsestrget_all
isdisjoint)rT   rU   p
wheel_fileZ
wheel_tagsr   r   r   check_unsupported~   s    


r`   zset[NormalizedName])rI   r(   r   c                 C  sL   t  }| D ]<}t|}| }|j}t|jt| ||< || q
|S )z=Computes the version of packages after installing to_install.)	r7   r   get_metadata_distributionr!   r   r   r"   r#   r:   )rI   r(   	installedinst_reqabstract_distr+   r,   r   r   r   rO      s    rO   )rR   r(   r   c                 C  sL   t | }|D ]:}||v rq|| jD ] }t|j|v r$||  qq$q|S rJ   )r7   r   r   r,   r:   )rR   r(   packages_affectedrA   rE   r   r   r   rP      s    
rP   )N)6__doc__
__future__r   loggingcollections.abcr   r   
contextlibr   email.parserr   	functoolsr   typingr   r	   Z"pip._vendor.packaging.requirementsr
   Zpip._vendor.packaging.tagsr   r   pip._vendor.packaging.utilsr   r   Zpip._vendor.packaging.versionr   pip._internal.distributionsr   pip._internal.metadatar   Zpip._internal.metadata.baser   Zpip._internal.req.req_installr   	getLoggerr   r&   r   dictr/   tupleMissingConflictingr"   MissingDictConflictingDictr0   rH   r.   rG   rS   r`   rO   rP   r   r   r   r   <module>   s>   
 -