3
g                 @   s   d dl Z d dlmZmZmZmZmZ d dlmZm	Z	m
Z
 d dlmZ er`d dl mZ d dlmZ dZddd	gZG d
d dZG dd deZdS )    N)TYPE_CHECKINGBinaryIODictIteratorList)HashMismatchHashMissingInstallationError)read_chunks)_Hash)NoReturnsha256sha384sha512c               @   s   e Zd ZdZd#eeee f ddddZd d dddZe	e
d	d
dZeeedddZee ddddZeedf ddddZeddddZeddddZed	ddZeeddd Ze
d	d!d"ZdS )$HasheszaA wrapper that builds multiple hashes at once and checks them against
    known-good values

    N)hashesreturnc             C   s8   i }|dk	r.x |j  D ]\}}t|||< qW || _dS )zo
        :param hashes: A dict of algorithm names pointing to lists of allowed
            hex digests
        N)itemssorted_allowed)selfr   allowedalgkeys r   X/var/www/tester-filtro-web/env/lib/python3.6/site-packages/pip/_internal/utils/hashes.py__init__   s
    zHashes.__init__)otherr   c                sf   t |tstS |sS s|S i }x:|jj D ],\ } jkrBq. fdd|D | < q.W t|S )Nc                s   g | ]}|j   kr|qS r   )r   ).0v)r   r   r   r   
<listcomp>;   s    z"Hashes.__and__.<locals>.<listcomp>)
isinstancer   NotImplementedr   r   )r   r   newvaluesr   )r   r   r   __and__+   s    

zHashes.__and__)r   c             C   s   t dd | jj D S )Nc             s   s   | ]}t |V  qd S )N)len)r   Zdigestsr   r   r   	<genexpr>@   s    z&Hashes.digest_count.<locals>.<genexpr>)sumr   r$   )r   r   r   r   digest_count>   s    zHashes.digest_count)	hash_name
hex_digestr   c             C   s   || j j|g kS )z/Return whether the given hex digest is allowed.)r   get)r   r*   r+   r   r   r   is_hash_allowedB   s    zHashes.is_hash_allowed)chunksr   c             C   s   i }xL| j j D ]>}ytj|||< W q ttfk
rL   td| Y qX qW x(|D ] }x|j D ]}|j| qfW qXW x*|j	 D ]\}}|j
 | j | krdS qW | j| dS )zCheck good hashes against ones built from iterable of chunks of
        data.

        Raise HashMismatch if none match.

        zUnknown hash name: N)r   r   hashlibr#   
ValueError	TypeErrorr	   r$   updater   	hexdigest_raise)r   r.   gotsr*   chunkhashZgotr   r   r   check_against_chunksF   s    
zHashes.check_against_chunksr   r   )r5   r   c             C   s   t | j|d S )N)r   r   )r   r5   r   r   r   r4   ]   s    zHashes._raise)filer   c             C   s   | j t|S )zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )r8   r
   )r   r9   r   r   r   check_against_file`   s    zHashes.check_against_file)pathr   c          	   C   s    t |d}| j|S Q R X d S )Nrb)openr:   )r   r;   r9   r   r   r   check_against_pathh   s    zHashes.check_against_pathc             C   s
   t | jS )z,Return whether I know any known-good hashes.)boolr   )r   r   r   r   __bool__l   s    zHashes.__bool__c             C   s   t |tstS | j|jkS )N)r!   r   r"   r   )r   r   r   r   r   __eq__p   s    
zHashes.__eq__c             C   s"   t djtdd | jj D S )N,c             s   s*   | ]"\}}|D ]}d j ||fV  qqdS ):N)join)r   r   Zdigest_listdigestr   r   r   r'   y   s   z"Hashes.__hash__.<locals>.<genexpr>)r7   rD   r   r   r   )r   r   r   r   __hash__u   s
    zHashes.__hash__)N)__name__
__module____qualname____doc__r   strr   r   r%   propertyintr)   r?   r-   r   bytesr8   r4   r   r:   r>   r@   objectrA   rF   r   r   r   r   r      s   r   c                   s>   e Zd ZdZdd fddZeedf ddd	d
Z  ZS )MissingHasheszA workalike for Hashes used when we're missing a hash for a requirement

    It computes the actual hash of the requirement and raises a HashMissing
    exception showing it to the user.

    N)r   c                s   t  jtg id dS )z!Don't offer the ``hashes`` kwarg.)r   N)superr   FAVORITE_HASH)r   )	__class__r   r   r      s    zMissingHashes.__init__r   r   )r5   r   c             C   s   t |t j d S )N)r   rR   r3   )r   r5   r   r   r   r4      s    zMissingHashes._raise)	rG   rH   rI   rJ   r   r   rK   r4   __classcell__r   r   )rS   r   rP      s   rP   )r/   typingr   r   r   r   r   pip._internal.exceptionsr   r   r	   pip._internal.utils.miscr
   r   r   rR   STRONG_HASHESr   rP   r   r   r   r   <module>   s   
h