B
    c,                 @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZejdd ZejddefddZ	dd Z
ejejfdd	Zejdd
efddZejdd ZG dd dZG dd dejejZdS )    Nc          	   c   s.   t  }t |  z
| V  W d t | X d S )N)osgetcwdchdir)dirorig r   U/var/www/cleansys/lib/python3.7/site-packages/pkg_resources/_vendor/jaraco/context.pypushd
   s
    

r	   c          
   c   s   |dkr$t j| dddd}|dkr<tjtjdd}|djf t	  zRd}d	}d

||f}||jf dt| it	  || |V  W dQ R X W d|djf t	  X dS )z
    Get a tarball, extract it, change to that directory, yield, then
    clean up.
    `runner` is the function to invoke commands.
    `pushd` is a context manager for changing the directory.
    Nz.tar.gz z.tgzT)shellzmkdir {target_dir}zwget {url} -O -z7tar x{compression} --strip-components=1 -C {target_dir}z | compressionzrm -Rf {target_dir})r   pathbasenamereplace	functoolspartial
subprocess
check_callformatvarsjoininfer_compression)urlZ
target_dirZrunnerr	   getterextractcmdr   r   r   tarball_context   s    
r   c             C   s&   | dd }t dddd}||dS )zF
    Given a URL or filename, infer the compression code for tar.
    NzjJ)gzZbzxz)dictget)r   Zcompression_indicatormappingr   r   r   r   0   s    r   c             c   s"   t  }z
|V  W d| | X dS )zk
    Create a temporary directory context. Pass a custom remover
    to override the removal behavior.
    N)tempfilemkdtemp)Zremovertemp_dirr   r   r   r(   ;   s    
r(   Tc       	   	   c   sr   d| krdnd}| R}|d| |g}|r6| d|g ttjjd}|rL|nd}tj||d |V  W dQ R X dS )z
    Check out the repo indicated by url.

    If dest_ctx is supplied, it should be a context manager
    to yield the target directory for the check out.
    gitZhgclonez--branchwN)stdout)extendopenr   r   devnullr   r   )	r   branchquietZdest_ctxZexerepo_dirr   r/   r,   r   r   r   repo_contextH   s    r3   c               c   s
   d V  d S )Nr   r   r   r   r   null[   s    r4   c               @   st   e Zd ZdZdZeffddZdd Zedd Z	ed	d
 Z
edd Zdd Zdd ZedddZdd ZdS )ExceptionTrapaG  
    A context manager that will catch certain exceptions and provide an
    indication they occurred.

    >>> with ExceptionTrap() as trap:
    ...     raise Exception()
    >>> bool(trap)
    True

    >>> with ExceptionTrap() as trap:
    ...     pass
    >>> bool(trap)
    False

    >>> with ExceptionTrap(ValueError) as trap:
    ...     raise ValueError("1 + 1 is not 3")
    >>> bool(trap)
    True

    >>> with ExceptionTrap(ValueError) as trap:
    ...     raise Exception()
    Traceback (most recent call last):
    ...
    Exception

    >>> bool(trap)
    False
    )NNNc             C   s
   || _ d S )N)
exceptions)selfr6   r   r   r   __init__   s    zExceptionTrap.__init__c             C   s   | S )Nr   )r7   r   r   r   	__enter__   s    zExceptionTrap.__enter__c             C   s
   | j d S )Nr   )exc_info)r7   r   r   r   type   s    zExceptionTrap.typec             C   s
   | j d S )N   )r:   )r7   r   r   r   value   s    zExceptionTrap.valuec             C   s
   | j d S )N   )r:   )r7   r   r   r   tb   s    zExceptionTrap.tbc             G   s&   |d }|ot || j}|r"|| _|S )Nr   )
issubclassr6   r:   )r7   r:   r;   matchesr   r   r   __exit__   s
    zExceptionTrap.__exit__c             C   s
   t | jS )N)boolr;   )r7   r   r   r   __bool__   s    zExceptionTrap.__bool__)_testc               s   t  fdd}|S )a  
        Wrap func and replace the result with the truth
        value of the trap (True if an exception occurred).

        First, give the decorator an alias to support Python 3.8
        Syntax.

        >>> raises = ExceptionTrap(ValueError).raises

        Now decorate a function that always fails.

        >>> @raises
        ... def fail():
        ...     raise ValueError('failed')
        >>> fail()
        True
        c           	      s(   t j}| | W d Q R X  |S )N)r5   r6   )argskwargstrap)rE   funcr7   r   r   wrapper   s    z%ExceptionTrap.raises.<locals>.wrapper)r   wraps)r7   rI   rE   rJ   r   )rE   rI   r7   r   raises   s    zExceptionTrap.raisesc             C   s   | j |tjdS )a  
        Wrap func and replace the result with the truth
        value of the trap (True if no exception).

        First, give the decorator an alias to support Python 3.8
        Syntax.

        >>> passes = ExceptionTrap(ValueError).passes

        Now decorate a function that always fails.

        >>> @passes
        ... def fail():
        ...     raise ValueError('failed')

        >>> fail()
        False
        )rE   )rL   operatornot_)r7   rI   r   r   r   passes   s    zExceptionTrap.passesN)__name__
__module____qualname____doc__r:   	Exceptionr8   r9   propertyr;   r=   r?   rB   rD   rC   rL   rO   r   r   r   r   r5   `   s   r5   c               @   s   e Zd ZdZdS )suppressz
    A version of contextlib.suppress with decorator support.

    >>> @suppress(KeyError)
    ... def key_error():
    ...     {}['']
    >>> key_error()
    N)rP   rQ   rR   rS   r   r   r   r   rV      s   rV   )r   r   
contextlibr   r&   shutilrM   contextmanagerr	   r   r   rmtreer(   r3   r4   r5   rV   ContextDecoratorr   r   r   r   <module>   s"   
m