3
g                 @   sx  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j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e"f dddZ#deeee$ge"f  e dddZ%ee e!dddZ&ee eee dddZ'ee eee d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e dS )PackageDetailsN)__name__
__module____qualname__r   versionr   r	   dependencies r   r   \/var/www/tester-filtro-web/env/lib/python3.6/site-packages/pip/_internal/operations/check.pyr      s   
r   )returnc              C   s   i } d}t  }xv|jdf dD ]d}|j}y t|j }t|j|| |< W q ttfk
r } zt	j
d|| d}W Y dd}~X qX qW | |fS )z3Converts a list of distributions into a PackageSet.F)
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_ignorer   c             C   s   i }i }x| j  D ]\}}t }t }|r4||r4qxv|jD ]l}t|j}	|	| kr~d}
|jdk	rj|jj }
|
r<|j|	|f q<| |	 j}|j	j
|dds<|j|	||f q<W |rt|td||< |rt|td||< qW ||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_nameZpackage_detailZmissing_depsZconflicting_depsreqr'   Zmissedr   r   r   r   check_package_set3   s0    	



r:   )
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   )r'   )	whitelistr   r   <lambda>o   s    z)check_install_conflicts.<locals>.<lambda>)r*   )r)   _simulate_installation_of_create_whitelistr:   )r;   r#   _would_be_installedr   )r<   r   check_install_conflicts`   s    


rB   )r;   r#   r   c             C   sP   t  }xD| D ]<}t|}|j }|j}t|jt|j ||< |j| qW |S )z=Computes the version of packages after installing to_install.)	r.   r   get_metadata_distributionr   r   r   r   r   r1   )r;   r#   	installedZinst_reqabstract_distr&   r'   r   r   r   r>   t   s    
r>   )rA   r#   r   c             C   sR   t | }xD|D ]<}||krqx,|| jD ]}t|j|kr(|j| P q(W qW |S )N)r.   r   r   r'   r1   )rA   r#   Zpackages_affectedr8   r9   r   r   r   r?      s    


r?   )N))__doc__loggingtypingr   r   r   r   r   r   r   Z"pip._vendor.packaging.requirementsr	   pip._vendor.packaging.utilsr
   r   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boolr)   r5   r:   rB   r>   r?   r   r   r   r   <module>   s2   $
+