o
    h                     @   s  d Z ddlZddl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 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e	ee"f fddZ#	ddedeee$ge"f  de fddZ%dee de!fddZ&dee dedee fddZ'dee dedee fddZ(dS )z'Validation of dependencies of packages
    N)CallableDictList
NamedTupleOptionalSetTuple)Requirement)NormalizedNamecanonicalize_name))make_distribution_for_install_requirement)get_default_environment)DistributionVersion)InstallRequirementc                   @   s"   e Zd ZU eed< ee ed< dS )PackageDetailsversiondependenciesN)__name__
__module____qualname__r   __annotations__r   r	    r   r   Z/var/www/html/olx_land/venv/lib/python3.10/site-packages/pip/_internal/operations/check.pyr      s   
 r   returnc                  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 requirements for %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$   should_ignorec                 C   s   i }i }|   D ]_\}}t }t }|r||rq|jD ]6}t|j}	|	| vr=d}
|jdur3|j }
|
r<||	|f q| |	 j}|j	j
|ddsR||	||f q|r]t|td||< |rgt|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)prereleases)key)itemssetr   r   r(   markerevaluateaddr   	specifiercontainssortedstr)r$   r+   missingconflictingpackage_namepackage_detailmissing_depsconflicting_depsreqr(   missedr   r   r   r   check_package_set3   s4   	




r?   
to_installc                    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>o   s    z)check_install_conflicts.<locals>.<lambda>)r+   )r*   _simulate_installation_of_create_whitelistr?   )r@   r$   _would_be_installedr   rB   r   check_install_conflicts`   s   


rI   c                 C   sL   t  }| D ]}t|}| }|j}t|jt| ||< || q|S )z=Computes the version of packages after installing to_install.)	r/   r   get_metadata_distributionr   r   r   r   r   r2   )r@   r$   	installedinst_reqabstract_distr'   r(   r   r   r   rE   t   s   rE   rH   c                 C   sL   t | }|D ]}||v rq|| jD ]}t|j|v r"||  nqq|S rA   )r/   r   r   r(   r2   )rH   r$   packages_affectedr9   r=   r   r   r   rF      s   
rF   rA   ))__doc__loggingtypingr   r   r   r   r   r   r   "pip._vendor.packaging.requirementsr	   pip._vendor.packaging.utilsr
   r   pip._internal.distributionsr   pip._internal.metadatar   pip._internal.metadata.baser   pip._internal.req.req_installr   	getLoggerr   r"   r   
PackageSetMissingConflictingMissingDictConflictingDictCheckResultConflictDetailsboolr*   r6   r?   rI   rE   rF   r   r   r   r   <module>   sT    $

-
