MINI MINI MANI MO

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

3


 \j3@sdZddlZddlZddlZddlmZddlmZddddd	d
ddgZGd
ddej	Z
GdddeZGdddee
Z
ddZGddde
ZGddde
ZGdd
d
eZGdddeZGddde
ZGdd	d	e
ZdS)z4Utilities for with-statement contexts.  See PEP 343.N)deque)wrapscontextmanagerclosingAbstractContextManagerContextDecorator	ExitStackredirect_stdoutredirect_stderrsuppressc@s2eZdZdZddZejddZeddZ	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|ddStS)Nrr)r_collections_abc_check_methodsNotImplemented)clsCrrr__subclasshook__sz'AbstractContextManager.__subclasshook__N)
__name__
__module____qualname____doc__rabcabstractmethodrclassmethodrrrrrr
sc@s eZdZdZddZddZdS)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_cmcstfdd}|S)Nc
sj||SQRXdS)N)r!)argskwds)funcr
rrinner1s
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@s0eZdZdZddZddZddZdd	Zd
S)_GeneratorContextManagerz%Helper for @contextmanager decorator.cCsJ||||_||||_|_|_t|dd}|dkr@t|j}||_dS)Nr)genr$r"r#getattrtyper)r
r$r"r#docrrr__init__;s
z!_GeneratorContextManager.__init__cCs|j|j|j|jS)N)	__class__r$r"r#)r
rrrr!Isz%_GeneratorContextManager._recreate_cmcCs.y
t|jStk
r(tddYnXdS)Nzgenerator didn't yield)nextr(
StopIterationRuntimeError)r
rrrrOs
z"_GeneratorContextManager.__enter__cCs|dkr6yt|jWntk
r*dSXtdn|dkrD|}y|jj|||Wntk
r|}z||k	Sd}~Xnftk
r}z*||krdS|tkr|j|krdSWYdd}~Xn"tjd|krdSYnXtddS)NFzgenerator didn't stopz#generator didn't stop after throw())r.r(r/r0throw	__cause__sysexc_info)r
r*valuerexcrrrrUs.
z!_GeneratorContextManager.__exit__N)rrrrr,r!rrrrrrr'8s
r'cstfdd}|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rhelperszcontextmanager.<locals>.helper)r)r$r8r)r$rrsc@s(eZdZdZddZddZddZdS)	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rrszclosing.__enter__cGs|jjdS)N)r9close)r
r5rrrrszclosing.__exit__N)rrrrr,rrrrrrrsc@s(eZdZdZddZddZddZdS)_RedirectStreamNcCs||_g|_dS)N)_new_target_old_targets)r

new_targetrrrr,sz_RedirectStream.__init__cCs*|jjtt|jtt|j|j|jS)N)r=appendr)r4_streamsetattrr<)r
rrrrsz_RedirectStream.__enter__cCstt|j|jjdS)N)rAr4r@r=pop)r
exctypeexcinstexctbrrrrsz_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(eZdZdZddZddZddZdS)	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rrszsuppress.__enter__cCs|dk	ot||jS)N)
issubclassrH)r
rCrDrErrrrs
zsuppress.__exit__N)rrrrr,rrrrrrrs	c@sPeZdZdZddZddZddZdd	Zd
dZdd
Z	ddZ
ddZdS)raContext 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rpop_alls
zExitStack.pop_allcs"fdd}|_|j|dS)z:Helper to correctly register callbacks to __exit__ methodscsf|S)Nr)exc_details)cmcm_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*rAttributeErrorrKr?rT)r
exit_cb_typeexit_methodrrrrS s

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

        Cannot suppress exceptions.
        csdS)Nr)rr7tb)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)zEnters 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_exitresultrrr
enter_contextAs

zExitStack.enter_contextcCs|jddddS)z$Immediately unwind the context stackN)r)r
rrrr:NszExitStack.closec	s|ddk	}tjdfdd}d}d}x\|jr|jj}y||rTd}d}d}Wq.tj}||d|dd}|}Yq.Xq.W|ry|dj}|dWn tk
r||d_YnX|o|S)Nrr1cs8x,|j}||krdS|dks$|kr&P|}qW||_dS)N)__context__)new_excold_excexc_context)	frame_excrr_fix_exception_contextXsz2ExitStack.__exit__.<locals>._fix_exception_contextFT)NNN)r4r5rKrBr`
BaseException)	r
rNreceived_excresuppressed_exc
pending_raisecbnew_exc_details	fixed_ctxr)rdrrRs2

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

)rrr4rcollectionsr	functoolsr__all__ABCrobjectrr'rrr;r	r
rrrrrr<module>s$I"

OHA YOOOO