Metadata-Version: 2.1
Name: contextdecorator
Version: 0.10.0
Summary: Create APIs that work as decorators and as context managers.
Author: Michael Foord
Author-email: michael@voidspace.org.uk
Keywords: decorator,with,context
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 2.4
Classifier: Programming Language :: Python :: 2.5
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.0
Classifier: Programming Language :: Python :: 3.1
Classifier: Programming Language :: Python :: 3.2
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules

If you're a library or framework creator then it is nice to be able to create
APIs that can be used *either* as decorators or context managers.

The contextdecorator module is a backport of new features added to the
`contextlib module <http://docs.python.org/library/contextlib.html>`_ in 
Python 3.2. contextdecorator works with Python 2.4+ including Python 3.

Context managers inheriting from ``ContextDecorator`` have to implement 
``__enter__`` and ``__exit__`` as normal. 
`__exit__ <http://docs.python.org/reference/datamodel.html#object.__exit__>`_ 
retains its optional exception handling even when used as a decorator.

Example::

   from contextdecorator import ContextDecorator

   class mycontext(ContextDecorator):
      def __enter__(self):
         print 'Starting'
         return self

      def __exit__(self, *exc):
         print 'Finishing'
         return False

   @mycontext()
   def function():
      print 'The bit in the middle'
   
   with mycontext():
      print 'The bit in the middle'

Existing context managers that already have a base class can be extended by
using ``ContextDecorator`` as a mixin class::

   from contextdecorator import ContextDecorator

   class mycontext(ContextBaseClass, ContextDecorator):
      def __enter__(self):
         return self

      def __exit__(self, *exc):
         return False

contextdecorator also contains an implementation of `contextlib.contextmanager
<http://docs.python.org/library/contextlib.html#contextlib.contextmanager>`_
that uses ``ContextDecorator``. The context managers it creates can be used as
decorators as well as in statements. ::

   from contextdecorator import contextmanager
   
   @contextmanager
   def mycontext(*args):
      print 'started'
      try:
         yield
      finally:
         print 'finished!'
   
   @mycontext('some', 'args')
   def function():
      print 'In the middle'
      
   with mycontext('some', 'args'):
      print 'In the middle'


Repository and issue tracker:

* `contextdecorator on google code <http://code.google.com/p/contextdecorator/>`_

The project is available for download from `PyPI <http://pypi.python.org/pypi/contextdecorator>`_
so it can be easily installed:

    | ``pip install -U contextdecorator``
    | ``easy_install -U contextdecorator``

The tests require `unittest2 <http://pypi.python.org/pypi/unittest2>`_
to run.

