;
Ιβ"Ic               @   ss   d  Z  d d l Z d d l m Z d d d g Z Gd   d e  Z d	   Z e d
    Z Gd   d e  Z	 d S(   u4   Utilities for with-statement contexts.  See PEP 343.i    N(   u   wrapsu   contextmanageru   nestedu   closingc             B   s/   |  Ee  Z d  Z d   Z d   Z d   Z d S(   u%   Helper for @contextmanager decorator.c             C   s   | |  _  d  S(   N(   u   gen(   u   selfu   gen(    (    u'   /mit/python/lib/python3.0/contextlib.pyu   __init__   s    c             C   s8   y t  |  j  SWn  t k
 o t d   Yn Xd  S(   Nu   generator didn't yield(   u   nextu   genu   StopIterationu   RuntimeError(   u   self(    (    u'   /mit/python/lib/python3.0/contextlib.pyu	   __enter__   s    c             C   sζ   | d  k o< y t |  j  Wn t k
 o d  SYqβ Xt d   n | d  k o |   } n y& |  j j | | |  t d   WnV t k
 o% } z | | k	 SWYd  d  } ~ Xn' t j   d | k	 o   n Yn Xd  S(   Nu   generator didn't stopu#   generator didn't stop after throw()i   (   u   Noneu   nextu   genu   StopIterationu   RuntimeErroru   throwu   sysu   exc_info(   u   selfu   typeu   valueu	   tracebacku   exc(    (    u'   /mit/python/lib/python3.0/contextlib.pyu   __exit__   s     
N(   u   __name__u
   __module__u   __doc__u   __init__u	   __enter__u   __exit__(   u
   __locals__(    (    u'   /mit/python/lib/python3.0/contextlib.pyu   GeneratorContextManager   s   
		u   GeneratorContextManagerc                s   t       f d    } | S(   uά  @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(   u   GeneratorContextManager(   u   argsu   kwds(   u   func(    u'   /mit/python/lib/python3.0/contextlib.pyu   helperQ   s    (   u   wraps(   u   funcu   helper(    (   u   funcu'   /mit/python/lib/python3.0/contextlib.pyu   contextmanager5   s    c              g   sζ   g  } g  } d } zd yI x= |  D]5 } | j } | j } | j |    | j |  q W| VWn t j   } Yn XWd xJ | oB | j   } y | |   o
 d } n Wq| t j   } Yq| Xq| W| d k o | d  n Xd S(   u  Support multiple context managers in a single with-statement.

    Code like this:

        with nested(A, B, C) as (X, Y, Z):
            <body>

    is equivalent to this:

        with A as X:
            with B as Y:
                with C as Z:
                    <body>

    Ni   (   NNN(   NNN(   NNN(   u   Noneu   __exit__u	   __enter__u   appendu   sysu   exc_infou   pop(   u   managersu   exitsu   varsu   excu   mgru   exitu   enter(    (    u'   /mit/python/lib/python3.0/contextlib.pyu   nestedW   s0      			 c             B   s/   |  Ee  Z d  Z d   Z d   Z d   Z d S(   u2  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(   u   thing(   u   selfu   thing(    (    u'   /mit/python/lib/python3.0/contextlib.pyu   __init__   s    c             C   s   |  j  S(   N(   u   thing(   u   self(    (    u'   /mit/python/lib/python3.0/contextlib.pyu	   __enter__   s    c             G   s   |  j  j   d  S(   N(   u   thingu   close(   u   selfu   exc_info(    (    u'   /mit/python/lib/python3.0/contextlib.pyu   __exit__   s    N(   u   __name__u
   __module__u   __doc__u   __init__u	   __enter__u   __exit__(   u
   __locals__(    (    u'   /mit/python/lib/python3.0/contextlib.pyu   closing   s   
		(
   u   __doc__u   sysu	   functoolsu   wrapsu   __all__u   objectu   GeneratorContextManageru   contextmanageru   nestedu   closing(    (    (    u'   /mit/python/lib/python3.0/contextlib.pyu   <module>   s   -	"-