michaelconnor00
3/10/2016 - 8:11 PM

Context manager fun stuff From http://jeffknupp.com/blog/2016/03/07/python-with-context-managers/

from contextlib import contextmanager

@contextmanager
def tag(name):
    print("<%s>" % name)
    yield
    print("</%s>" % name)

>>> with tag("h1"):
...    print("foo")
...
<h1>
foo
</h1>

#############
# Using a decorator
from contextlib import ContextDecorator

class makeparagraph(ContextDecorator):
    def __enter__(self):
        print('<p>')
        return self

    def __exit__(self, *exc):
        print('</p>')
        return False

@makeparagraph()
def emit_html():
    print('Here is some non-HTML')

emit_html()

""" OUTPUT
<p>
Here is some non-HTML
</p>
"""