Your IP : 3.147.81.51


Current Path : /lib64/python3.6/__pycache__/
Upload File :
Current File : //lib64/python3.6/__pycache__/contextlib.cpython-36.opt-1.pyc

3


 \j3�@s�dZddlZddlZddlZddlmZddlmZddddd	d
ddgZGd
d�dej	�Z
Gdd�de�ZGdd�dee
�Z
dd�ZGdd�de
�ZGdd�de
�ZGdd
�d
e�ZGdd�de�ZGdd�de
�ZGdd	�d	e
�ZdS)z4Utilities for with-statement contexts.  See PEP 343.�N)�deque)�wraps�contextmanager�closing�AbstractContextManager�ContextDecorator�	ExitStack�redirect_stdout�redirect_stderr�suppressc@s2eZdZdZdd�Zejdd��Zedd��Z	dS)	rz,An abstract base class for context managers.cCs|S)z0Return `self` upon entering the runtime context.�)�selfrr�"/usr/lib64/python3.6/contextlib.py�	__enter__sz AbstractContextManager.__enter__cCsdS)z9Raise any exception triggered within the runtime context.Nr)r
�exc_type�	exc_value�	tracebackrrr�__exit__szAbstractContextManager.__exit__cCs|tkrtj|dd�StS)Nrr)r�_collections_abc�_check_methods�NotImplemented)�cls�Crrr�__subclasshook__sz'AbstractContextManager.__subclasshook__N)
�__name__�
__module__�__qualname__�__doc__r�abc�abstractmethodr�classmethodrrrrrr
sc@s eZdZdZdd�Zdd�ZdS)rzJA base class or mixin that enables context managers to work as decorators.cCs|S)a6Return 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)r
rrr�_recreate_cm$s
zContextDecorator._recreate_cmcst����fdd��}|S)Nc
s�j���||�SQRXdS)N)r!)�args�kwds)�funcr
rr�inner1s
z(ContextDecorator.__call__.<locals>.inner)r)r
r$r%r)r$r
r�__call__0szContextDecorator.__call__N)rrrrr!r&rrrrr!sc@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�_GeneratorContextManagerz%Helper for @contextmanager decorator.cCsJ|||�|_||||_|_|_t|dd�}|dkr@t|�j}||_dS)Nr)�genr$r"r#�getattr�typer)r
r$r"r#�docrrr�__init__;s
z!_GeneratorContextManager.__init__cCs|j|j|j|j�S)N)�	__class__r$r"r#)r
rrrr!Isz%_GeneratorContextManager._recreate_cmcCs.y
t|j�Stk
r(td�d�YnXdS)Nzgenerator didn't yield)�nextr(�
StopIteration�RuntimeError)r
rrrrOs
z"_GeneratorContextManager.__enter__cCs�|dkr6yt|j�Wntk
r*dSXtd��n�|dkrD|�}y|jj|||�Wn�tk
r|}z||k	Sd}~Xnftk
r�}z*||kr�dS|tkr�|j|kr�dS�WYdd}~Xn"tj�d|kr�dS�YnXtd��dS)NFzgenerator didn't stop�z#generator didn't stop after throw())r.r(r/r0�throw�	__cause__�sys�exc_info)r
r*�valuer�excrrrrUs.
z!_GeneratorContextManager.__exit__N)rrrrr,r!rrrrrrr'8s
r'cst���fdd��}|S)a�@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>

    cst�||�S)N)r')r"r#)r$rr�helper�szcontextmanager.<locals>.helper)r)r$r8r)r$rr�sc@s(eZdZdZdd�Zdd�Zdd�ZdS)	ra2Context 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()

    cCs
||_dS)N)�thing)r
r9rrrr,�szclosing.__init__cCs|jS)N)r9)r
rrrr�szclosing.__enter__cGs|jj�dS)N)r9�close)r
r5rrrr�szclosing.__exit__N)rrrrr,rrrrrrr�sc@s(eZdZdZdd�Zdd�Zdd�ZdS)�_RedirectStreamNcCs||_g|_dS)N)�_new_target�_old_targets)r
�
new_targetrrrr,�sz_RedirectStream.__init__cCs*|jjtt|j��tt|j|j�|jS)N)r=�appendr)r4�_stream�setattrr<)r
rrrr�sz_RedirectStream.__enter__cCstt|j|jj��dS)N)rAr4r@r=�pop)r
�exctype�excinst�exctbrrrr�sz_RedirectStream.__exit__)rrrr@r,rrrrrrr;�sr;c@seZdZdZdZdS)r	aAContext 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)
    �stdoutN)rrrrr@rrrrr	�sc@seZdZdZdZdS)r
zCContext manager for temporarily redirecting stderr to another file.�stderrN)rrrrr@rrrrr
�sc@s(eZdZdZdd�Zdd�Zdd�ZdS)	ra?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
    cGs
||_dS)N)�_exceptions)r
�
exceptionsrrrr,�szsuppress.__init__cCsdS)Nr)r
rrrr�szsuppress.__enter__cCs|dk	ot||j�S)N)�
issubclassrH)r
rCrDrErrrr�s
zsuppress.__exit__N)rrrrr,rrrrrrr�s	c@sPeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�ZdS)ra�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

    cCst�|_dS)N)r�_exit_callbacks)r
rrrr,szExitStack.__init__cCst|��}|j|_t�|_|S)z?Preserve the context stack by transferring it to a new instance)r*rKr)r
�	new_stackrrr�pop_alls
zExitStack.pop_allcs"��fdd�}�|_|j|�dS)z:Helper to correctly register callbacks to __exit__ methodscs��f|��S)Nr)�exc_details)�cm�cm_exitrr�
_exit_wrappersz.ExitStack._push_cm_exit.<locals>._exit_wrapperN)�__self__�push)r
rOrPrQr)rOrPr�
_push_cm_exitszExitStack._push_cm_exitcCsDt|�}y
|j}Wn tk
r2|jj|�YnX|j||�|S)aRegisters 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)
        )r*r�AttributeErrorrKr?rT)r
�exit�_cb_type�exit_methodrrrrS s

zExitStack.pushcs$���fdd�}�|_|j|��S)z\Registers an arbitrary callback and arguments.

        Cannot suppress exceptions.
        cs����dS)Nr)rr7�tb)r"�callbackr#rrrQ9sz)ExitStack.callback.<locals>._exit_wrapper)�__wrapped__rS)r
rZr"r#rQr)r"rZr#rrZ4s
zExitStack.callbackcCs(t|�}|j}|j|�}|j||�|S)z�Enters the supplied context manager

        If successful, also pushes its __exit__ method as a callback and
        returns the result of the __enter__ method.
        )r*rrrT)r
rO�_cm_type�_exit�resultrrr�
enter_contextAs

zExitStack.enter_contextcCs|jddd�dS)z$Immediately unwind the context stackN)r)r
rrrr:NszExitStack.closec	s�|ddk	}tj�d��fdd�}d}d}x\|jr�|jj�}y||�rTd}d}d}Wq.tj�}||d|d�d}|}Yq.Xq.W|r�y|dj}|d�Wn tk
r�||d_�YnX|o�|S)Nrr1cs8x,|j}||krdS|dks$|�kr&P|}qW||_dS)N)�__context__)�new_exc�old_exc�exc_context)�	frame_excrr�_fix_exception_contextXsz2ExitStack.__exit__.<locals>._fix_exception_contextFT)NNN)r4r5rKrBr`�
BaseException)	r
rN�received_excre�suppressed_exc�
pending_raise�cb�new_exc_details�	fixed_ctxr)rdrrRs2


zExitStack.__exit__N)rrrrr,rMrTrSrZr_r:rrrrrrs

)rrr4r�collectionsr�	functoolsr�__all__�ABCr�objectrr'rrr;r	r
rrrrrr�<module>s$I"