U
    cUh                     @   s  d Z ddlZddlmZ ddlm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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/ee)e0f dddZ1d#e)ee	e2ge0f  e.dddZ3ee$ e/dddZ4ee" ee ee"ddf dddZ5ee$ e)ee dddZ6ee e)ee d d!d"Z7dS )$z'Validation of dependencies of packages
    N)suppress)Parser)reduce)
CallableDict	FrozenSet	GeneratorIterableList
NamedTupleOptionalSetTuple)Requirement)Tag	parse_tag)NormalizedNamecanonicalize_name)Version))make_distribution_for_install_requirement)get_default_environment)BaseDistribution)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    ^/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/pip/_internal/operations/check.pyr   "   s   
r   )returnc                  C   s   i } d}t  }|jdddD ]d}|j}z t| }t|j|| |< W q ttfk
r~ } zt	
d|| d}W 5 d}~X Y qX 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_setZproblemsenvdistnamer   er    r    r!   !create_package_set_from_installed2   s    r2   )r-   should_ignorer"   c                 C   s   i }i }|   D ]\}}t }t }|r2||r2q|jD ]r}t|j}	|	| krd}
|jdk	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   r0   markerevaluateaddr   	specifiercontainssortedstr)r-   r3   missingconflictingpackage_nameZpackage_detailZmissing_depsZconflicting_depsreqr0   Zmissedr   r    r    r!   check_package_setC   s0    	



rE   )
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   |  kS Nr    )r0   Z	whitelistr    r!   <lambda>       z)check_install_conflicts.<locals>.<lambda>)r3   )r2   _simulate_installation_of_create_whitelistrE   )rF   r-   _would_be_installedr    rH   r!   check_install_conflictsp   s    


 
rO   )packagessupported_tagsr"   c              
   c   sb   | D ]X}t tF |d}ttjttt 	|
dg t }||rR|V  W 5 Q R X qd S )NZWHEELr   )r   FileNotFoundError	read_textr   	frozensetunionmapr   r   parsestrget_all
isdisjoint)rP   rQ   pZ
wheel_fileZ
wheel_tagsr    r    r!   check_unsupported   s    


r[   )rF   r-   r"   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<   )rF   r-   	installedZinst_reqabstract_distr/   r0   r    r    r!   rK      s    rK   )rN   r-   r"   c                 C   sL   t | }|D ]:}||krq|| jD ] }t|j|kr$||  qq$q|S rG   )r9   r   r   r0   r<   )rN   r-   Zpackages_affectedrC   rD   r    r    r!   rL      s    
rL   )N)8__doc__logging
contextlibr   email.parserr   	functoolsr   typingr   r   r   r   r	   r
   r   r   r   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   Z
PackageSetZMissingZConflictingZMissingDictZConflictingDictZCheckResultConflictDetailsboolr2   r@   rE   rO   r[   rK   rL   r    r    r    r!   <module>   sT   0
  -  