def contextmanager(func):
@wraps(func)<EOL>def helper(*args, **kwds):<EOL><INDENT>return GeneratorContextManager(func(*args, **kwds))<EOL><DEDENT>return helper<EOL>
@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>