ó
j·Ã^c        	   @   s>  d  Z  d d l Z d d l Z d d l Z d d l m Z d d l m Z d d d d d	 d
 d d d g	 Z e d g 7Z e j	 d  d+ k r— e j
 Z n e j d e f i d, d 6ƒ Z d „  Z d „  Z d e f d „  ƒ  YZ d	 e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d  „  ƒ  YZ e j	 d! d k Z e r¯d" „  Z d# „  Z n d$ „  Z d% „  Z y d d& l m Z Wn e k
 rîe Z  n
 Xd' „  Z  d
 e f d( „  ƒ  YZ! d e! f d) „  ƒ  YZ" d e f d* „  ƒ  YZ# d S(-   sA   contextlib2 - backports and enhancements to the contextlib moduleiÿÿÿÿN(   t   deque(   t   wrapst   contextmanagert   closingt   nullcontextt   AbstractContextManagert   ContextDecoratort	   ExitStackt   redirect_stdoutt   redirect_stderrt   suppresst   ContextStacki   i   i   t   ABCt	   __slots__c         C   sB   |  | k r d  S| j  |  ƒ x |  j D] } t | | ƒ q' W| S(   N(   t   appendt	   __bases__t   _classic_mro(   t   Ct   resultt   B(    (    s(   site-packages/pip/_vendor/contextlib2.pyR      s    c         G   sŠ   y |  j  } Wn& t k
 r5 t t |  g  ƒ ƒ } n XxM | D]E } x< | D]0 } | | j k rJ | j | d  k rv t SPqJ qJ Wt Sq= Wt S(   N(   t   __mro__t   AttributeErrort   tupleR   t   __dict__t   Nonet   NotImplementedt   True(   R   t   methodst   mrot   methodR   (    (    s(   site-packages/pip/_vendor/contextlib2.pyt   _check_methods$   s    c           B   s8   e  Z d  Z d „  Z e j d „  ƒ Z e d „  ƒ Z RS(   s,   An abstract base class for context managers.c         C   s   |  S(   s0   Return `self` upon entering the runtime context.(    (   t   self(    (    s(   site-packages/pip/_vendor/contextlib2.pyt	   __enter__8   s    c         C   s   d S(   s9   Raise any exception triggered within the runtime context.N(   R   (   R   t   exc_typet	   exc_valuet	   traceback(    (    s(   site-packages/pip/_vendor/contextlib2.pyt   __exit__<   s    c         C   s    |  t  k r t | d d ƒ St S(   s<   Check whether subclass is considered a subclass of this ABC.R    R$   (   R   R   R   (   t   clsR   (    (    s(   site-packages/pip/_vendor/contextlib2.pyt   __subclasshook__A   s    (	   t   __name__t
   __module__t   __doc__R    t   abct   abstractmethodR$   t   classmethodR&   (    (    (    s(   site-packages/pip/_vendor/contextlib2.pyR   5   s   	c           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   sJ   A base class or mixin that enables context managers to work as decorators.c         C   s   t  j d t ƒ |  j ƒ  S(   sÁ  Returns the context manager used to actually wrap the call to the
        decorated function.

        The default implementation just returns *self*.

        Overriding this method allows otherwise one-shot context managers
        like _GeneratorContextManager to support use as decorators via
        implicit recreation.

        DEPRECATED: refresh_cm was never added to the standard library's
                    ContextDecorator API
        s2   refresh_cm was never added to the standard library(   t   warningst   warnt   DeprecationWarningt   _recreate_cm(   R   (    (    s(   site-packages/pip/_vendor/contextlib2.pyt
   refresh_cmL   s    	c         C   s   |  S(   s6  Return a recreated instance of self.

        Allows an otherwise one-shot context manager like
        _GeneratorContextManager to support use as
        a decorator via implicit recreation.

        This is a private interface just for _GeneratorContextManager.
        See issue #11647 for details.
        (    (   R   (    (    s(   site-packages/pip/_vendor/contextlib2.pyR0   ]   s    
c            s"   t  ˆ  ƒ ‡  ‡ f d †  ƒ } | S(   Nc             s$   ˆ j  ƒ   ˆ  |  | Ž  SWd  QXd  S(   N(   R0   (   t   argst   kwds(   t   funcR   (    s(   site-packages/pip/_vendor/contextlib2.pyt   innerj   s    (   R   (   R   R4   R5   (    (   R4   R   s(   site-packages/pip/_vendor/contextlib2.pyt   __call__i   s    (   R'   R(   R)   R1   R0   R6   (    (    (    s(   site-packages/pip/_vendor/contextlib2.pyR   I   s   		t   _GeneratorContextManagerc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s%   Helper for @contextmanager decorator.c         C   sl   | | | Ž  |  _  | | | |  _ |  _ |  _ t | d d  ƒ } | d  k r_ t |  ƒ j } n  | |  _ d  S(   NR)   (   t   genR4   R2   R3   t   getattrR   t   typeR)   (   R   R4   R2   R3   t   doc(    (    s(   site-packages/pip/_vendor/contextlib2.pyt   __init__t   s    c         C   s   |  j  |  j |  j |  j ƒ S(   N(   t	   __class__R4   R2   R3   (   R   (    (    s(   site-packages/pip/_vendor/contextlib2.pyR0   ‚   s    c         C   s5   y t  |  j ƒ SWn t k
 r0 t d ƒ ‚ n Xd  S(   Ns   generator didn't yield(   t   nextR8   t   StopIterationt   RuntimeError(   R   (    (    s(   site-packages/pip/_vendor/contextlib2.pyR    ˆ   s    c         C   s   | d  k rA y t |  j ƒ Wn t k
 r1 d  SXt d ƒ ‚ n» | d  k rY | ƒ  } n  y& |  j j | | | ƒ t d ƒ ‚ Wnz t k
 r› } | | k	 St k
 rÙ } | | k rº t St rÓ | j | k rÓ t S‚  n# t	 j
 ƒ  d | k	 rü ‚  qü n Xd  S(   Ns   generator didn't stops#   generator didn't stop after throw()i   (   R   R>   R8   R?   R@   t   throwt   Falset   _HAVE_EXCEPTION_CHAININGt	   __cause__t   syst   exc_info(   R   R:   t   valueR#   t   exc(    (    s(   site-packages/pip/_vendor/contextlib2.pyR$   Ž   s,    
(   R'   R(   R)   R<   R0   R    R$   (    (    (    s(   site-packages/pip/_vendor/contextlib2.pyR7   q   s
   			c            s   t  ˆ  ƒ ‡  f d †  ƒ } | S(   sÜ  @contextmanager decorator.

    Typical usage:

        @contextmanager
        def some_generator(<arguments>):
            <setup>
            try:
                yield <value>
            finally:
                <cleanup>

    This makes this:

        with some_generator(<arguments>) as <variable>:
            <body>

    equivalent to this:

        <setup>
        try:
            <variable> = <value>
            <body>
        finally:
            <cleanup>

    c             s   t  ˆ  |  | ƒ S(   N(   R7   (   R2   R3   (   R4   (    s(   site-packages/pip/_vendor/contextlib2.pyt   helperÕ   s    (   R   (   R4   RI   (    (   R4   s(   site-packages/pip/_vendor/contextlib2.pyR   ¹   s    c           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s2  Context to automatically close something at the end of a block.

    Code like this:

        with closing(<module>.open(<arguments>)) as f:
            <block>

    is equivalent to this:

        f = <module>.open(<arguments>)
        try:
            <block>
        finally:
            f.close()

    c         C   s   | |  _  d  S(   N(   t   thing(   R   RJ   (    (    s(   site-packages/pip/_vendor/contextlib2.pyR<   ì   s    c         C   s   |  j  S(   N(   RJ   (   R   (    (    s(   site-packages/pip/_vendor/contextlib2.pyR    ï   s    c         G   s   |  j  j ƒ  d  S(   N(   RJ   t   close(   R   RF   (    (    s(   site-packages/pip/_vendor/contextlib2.pyR$   ò   s    (   R'   R(   R)   R<   R    R$   (    (    (    s(   site-packages/pip/_vendor/contextlib2.pyR   Û   s   		t   _RedirectStreamc           B   s)   e  Z d Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  g  |  _ d  S(   N(   t   _new_targett   _old_targets(   R   t
   new_target(    (    s(   site-packages/pip/_vendor/contextlib2.pyR<   ú   s    	c         C   s9   |  j  j t t |  j ƒ ƒ t t |  j |  j ƒ |  j S(   N(   RN   R   R9   RE   t   _streamt   setattrRM   (   R   (    (    s(   site-packages/pip/_vendor/contextlib2.pyR    ÿ   s    c         C   s    t  t |  j |  j j ƒ  ƒ d  S(   N(   RQ   RE   RP   RN   t   pop(   R   t   exctypet   excinstt   exctb(    (    s(   site-packages/pip/_vendor/contextlib2.pyR$     s    N(   R'   R(   R   RP   R<   R    R$   (    (    (    s(   site-packages/pip/_vendor/contextlib2.pyRL   ö   s   		c           B   s   e  Z d  Z d Z RS(   sA  Context manager for temporarily redirecting stdout to another file.

        # How to send help() to stderr
        with redirect_stdout(sys.stderr):
            help(dir)

        # How to write help() to a file
        with open('help.txt', 'w') as f:
            with redirect_stdout(f):
                help(pow)
    t   stdout(   R'   R(   R)   RP   (    (    (    s(   site-packages/pip/_vendor/contextlib2.pyR     s   c           B   s   e  Z d  Z d Z RS(   sC   Context manager for temporarily redirecting stderr to another file.t   stderr(   R'   R(   R)   RP   (    (    (    s(   site-packages/pip/_vendor/contextlib2.pyR	     s   c           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s?  Context manager to suppress specified exceptions

    After the exception is suppressed, execution proceeds with the next
    statement following the with statement.

         with suppress(FileNotFoundError):
             os.remove(somefile)
         # Execution still resumes here if the file was already removed
    c         G   s   | |  _  d  S(   N(   t   _exceptions(   R   t
   exceptions(    (    s(   site-packages/pip/_vendor/contextlib2.pyR<   )  s    c         C   s   d  S(   N(    (   R   (    (    s(   site-packages/pip/_vendor/contextlib2.pyR    ,  s    c         C   s   | d  k	 o t | |  j ƒ S(   N(   R   t
   issubclassRX   (   R   RS   RT   RU   (    (    s(   site-packages/pip/_vendor/contextlib2.pyR$   /  s    
(   R'   R(   R)   R<   R    R$   (    (    (    s(   site-packages/pip/_vendor/contextlib2.pyR
     s   			i    c            s   ‡  f d †  } | S(   Nc            sO   x? |  j  } | | k r d  S| d  k s4 | ˆ  k r8 Pn  | }  q W| |  _  d  S(   N(   t   __context__R   (   t   new_exct   old_exct   exc_context(   t	   frame_exc(    s(   site-packages/pip/_vendor/contextlib2.pyt   _fix_exception_context@  s    	
(    (   R_   R`   (    (   R_   s(   site-packages/pip/_vendor/contextlib2.pyt   _make_context_fixer?  s    c         C   sC   y |  d j  } |  d ‚ Wn! t k
 r> | |  d _  ‚  n Xd  S(   Ni   (   R[   t   BaseException(   t   exc_detailst	   fixed_ctx(    (    s(   site-packages/pip/_vendor/contextlib2.pyt   _reraise_with_existing_contextO  s    c         C   s   d „  S(   Nc         S   s   d  S(   N(   R   (   R\   R]   (    (    s(   site-packages/pip/_vendor/contextlib2.pyt   <lambda>[  s    (    (   R_   (    (    s(   site-packages/pip/_vendor/contextlib2.pyRa   Z  s    c         B   s   |  \ } } } d d  Ud  S(   Ns!   raise exc_type, exc_value, exc_tb(    (   Rc   R!   R"   t   exc_tb(    (    s(   site-packages/pip/_vendor/contextlib2.pyRe   _  s    (   t   InstanceTypec         C   s#   t  |  ƒ } | t k r |  j S| S(   N(   R:   Rh   R=   (   t   objt   obj_type(    (    s(   site-packages/pip/_vendor/contextlib2.pyt	   _get_typek  s    c           B   s_   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z RS(
   s‹  Context manager for dynamic management of a stack of exit callbacks

    For example:

        with ExitStack() as stack:
            files = [stack.enter_context(open(fname)) for fname in filenames]
            # All opened files will automatically be closed at the end of
            # the with statement, even if attempts to open files later
            # in the list raise an exception

    c         C   s   t  ƒ  |  _ d  S(   N(   R    t   _exit_callbacks(   R   (    (    s(   site-packages/pip/_vendor/contextlib2.pyR<     s    c         C   s+   t  |  ƒ ƒ  } |  j | _ t ƒ  |  _ | S(   s?   Preserve the context stack by transferring it to a new instance(   R:   Rl   R    (   R   t	   new_stack(    (    s(   site-packages/pip/_vendor/contextlib2.pyt   pop_all‚  s    c            s,   ‡  ‡ f d †  } ˆ  | _  |  j | ƒ d S(   s:   Helper to correctly register callbacks to __exit__ methodsc             s   ˆ ˆ  |  Œ S(   N(    (   Rc   (   t   cmt   cm_exit(    s(   site-packages/pip/_vendor/contextlib2.pyt   _exit_wrapper‹  s    N(   t   __self__t   push(   R   Ro   Rp   Rq   (    (   Ro   Rp   s(   site-packages/pip/_vendor/contextlib2.pyt   _push_cm_exit‰  s    	c         C   sQ   t  | ƒ } y | j } Wn! t k
 r< |  j j | ƒ n X|  j | | ƒ | S(   s  Registers a callback with the standard __exit__ method signature

        Can suppress exceptions the same way __exit__ methods can.

        Also accepts any object with an __exit__ method (registering a call
        to the method instead of the object itself)
        (   Rk   R$   R   Rl   R   Rt   (   R   t   exitt   _cb_typet   exit_method(    (    s(   site-packages/pip/_vendor/contextlib2.pyRs     s    
c            s/   ‡  ‡ ‡ f d †  } ˆ | _  |  j | ƒ ˆ S(   s\   Registers an arbitrary callback and arguments.

        Cannot suppress exceptions.
        c            s   ˆ ˆ  ˆ Ž  d  S(   N(    (   R!   RH   t   tb(   R2   t   callbackR3   (    s(   site-packages/pip/_vendor/contextlib2.pyRq   ©  s    (   t   __wrapped__Rs   (   R   Ry   R2   R3   Rq   (    (   R2   Ry   R3   s(   site-packages/pip/_vendor/contextlib2.pyRy   ¤  s    	c         C   s8   t  | ƒ } | j } | j | ƒ } |  j | | ƒ | S(   sª   Enters the supplied context manager

        If successful, also pushes its __exit__ method as a callback and
        returns the result of the __enter__ method.
        (   Rk   R$   R    Rt   (   R   Ro   t   _cm_typet   _exitR   (    (    s(   site-packages/pip/_vendor/contextlib2.pyt   enter_context±  s
    	c         C   s   |  j  d d d ƒ d S(   s$   Immediately unwind the context stackN(   R$   R   (   R   (    (    s(   site-packages/pip/_vendor/contextlib2.pyRK   ¾  s    c         C   s   |  S(   N(    (   R   (    (    s(   site-packages/pip/_vendor/contextlib2.pyR    Â  s    c   	      G   sÐ   | d d  k	 } t j ƒ  d } t | ƒ } t } t } xx |  j r² |  j j ƒ  } y% | | Œ  rw t } t } d } n  Wq; t j ƒ  } | | d | d ƒ t } | } q; Xq; W| rÆ t | ƒ n  | oÏ | S(   Ni    i   (   NNN(	   R   RE   RF   Ra   RB   Rl   RR   R   Re   (	   R   Rc   t   received_excR_   R`   t   suppressed_exct   pending_raiset   cbt   new_exc_details(    (    s(   site-packages/pip/_vendor/contextlib2.pyR$   Å  s(    (   R'   R(   R)   R<   Rn   Rt   Rs   Ry   R}   RK   R    R$   (    (    (    s(   site-packages/pip/_vendor/contextlib2.pyR   s  s   								c           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s+   Backwards compatibility alias for ExitStackc         C   s'   t  j d t ƒ t t |  ƒ j ƒ  d  S(   Ns*   ContextStack has been renamed to ExitStack(   R-   R.   R/   t   superR   R<   (   R   (    (    s(   site-packages/pip/_vendor/contextlib2.pyR<   ç  s    	c         C   s   |  j  | ƒ S(   N(   Rs   (   R   Ry   (    (    s(   site-packages/pip/_vendor/contextlib2.pyt   register_exitì  s    c         O   s   |  j  | | | Ž S(   N(   Ry   (   R   Ry   R2   R3   (    (    s(   site-packages/pip/_vendor/contextlib2.pyt   registerï  s    c         C   s
   |  j  ƒ  S(   N(   Rn   (   R   (    (    s(   site-packages/pip/_vendor/contextlib2.pyt   preserveò  s    (   R'   R(   R)   R<   R„   R…   R†   (    (    (    s(   site-packages/pip/_vendor/contextlib2.pyR   ä  s
   			c           B   s,   e  Z d  Z d d „ Z d „  Z d „  Z RS(   sM  Context manager that does no additional processing.
    Used as a stand-in for a normal context manager, when a particular
    block of code is only sometimes used with a normal context manager:
    cm = optional_cm if condition else nullcontext()
    with cm:
        # Perform operation, using optional_cm if condition is True
    c         C   s   | |  _  d  S(   N(   t   enter_result(   R   R‡   (    (    s(   site-packages/pip/_vendor/contextlib2.pyR<   ÿ  s    c         C   s   |  j  S(   N(   R‡   (   R   (    (    s(   site-packages/pip/_vendor/contextlib2.pyR      s    c         G   s   d  S(   N(    (   R   t   excinfo(    (    s(   site-packages/pip/_vendor/contextlib2.pyR$     s    N(   R'   R(   R)   R   R<   R    R$   (    (    (    s(   site-packages/pip/_vendor/contextlib2.pyR   ö  s   	(   i   i   (    ($   R)   R*   RE   R-   t   collectionsR    t	   functoolsR   t   __all__t   version_infoR   t   _abc_ABCt   ABCMetat   objectR   R   R   R   R7   R   R   RL   R   R	   R
   RC   Ra   Re   t   typesRh   t   ImportErrorR:   Rk   R   R   R   (    (    (    s(   site-packages/pip/_vendor/contextlib2.pyt   <module>   sL   		
	(H	"			
	q