py-decorator (LADI project)
Go to file
Michele Simionato 55a68b5ef1 Updated setup.py [skip CI] 2020-02-29 06:27:34 +01:00
docs Release 4.4.2 2020-02-29 06:23:03 +01:00
src Release 4.4.2 2020-02-29 06:23:03 +01:00
.gitignore Generating the documentation for ReadTheDocs 2017-07-15 12:30:06 +02:00
.travis.yml Test Python 3.8 and simplify matrix as Xenial is the default 2020-01-08 22:55:12 +02:00
CHANGES.md Release 4.4.2 2020-02-29 06:23:03 +01:00
LICENSE.txt Fixed copyright year [skip CI] 2018-04-15 15:31:18 +02:00
MANIFEST.in Fixed references to docs/README.rst 2018-05-12 05:32:48 +02:00
Makefile Fixed Makefile 2019-10-27 09:08:53 +01:00
README.rst Fixed a link [skip CI] 2019-10-27 09:11:38 +01:00
_config.yml Set theme jekyll-theme-minimal 2019-03-16 03:11:14 +01:00
performance.sh Overhaul of the documentation and introduced decorator.decorate 2015-07-19 09:40:52 +02:00
setup.cfg Added docs directory and upload_docs command 2015-07-24 19:19:06 +02:00
setup.py Updated setup.py [skip CI] 2020-02-29 06:27:34 +01:00

README.rst

Decorators for Humans
=====================

The goal of the decorator module is to make it easy to define
signature-preserving function decorators and decorator factories.
It also includes an implementation of multiple dispatch and other niceties
(please check the docs). It is released under a two-clauses
BSD license, i.e. basically you can do whatever you want with it but I am not
responsible.

Installation
-------------

If you are lazy, just perform

 ``$ pip install decorator``

which will install just the module on your system.

If you prefer to install the full distribution from source, including
the documentation, clone the `GitHub repo`_ or download the tarball_, unpack it and run

 ``$ pip install .``

in the main directory, possibly as superuser.

.. _tarball: https://pypi.org/project/decorator/#files
.. _GitHub repo: https://github.com/micheles/decorator

Testing
--------

If you have the source code installation you can run the tests with

 `$ python src/tests/test.py -v`

or (if you have setuptools installed)

 `$ python setup.py test`

Notice that you may run into trouble if in your system there
is an older version of the decorator module; in such a case remove the
old version. It is safe even to copy the module `decorator.py` over
an existing one, since we kept backward-compatibility for a long time.

Repository
---------------

The project is hosted on GitHub. You can look at the source here:

 https://github.com/micheles/decorator

Documentation
---------------

The documentation has been moved to https://github.com/micheles/decorator/blob/master/docs/documentation.md

From there you can get a PDF version by simply using the print
functionality of your browser.

Here is the documentation for previous versions of the module:

https://github.com/micheles/decorator/blob/4.3.2/docs/tests.documentation.rst
https://github.com/micheles/decorator/blob/4.2.1/docs/tests.documentation.rst
https://github.com/micheles/decorator/blob/4.1.2/docs/tests.documentation.rst
https://github.com/micheles/decorator/blob/4.0.0/documentation.rst
https://github.com/micheles/decorator/blob/3.4.2/documentation.rst

For the impatient
-----------------

Here is an example of how to define a family of decorators tracing slow
operations:

.. code-block:: python

   from decorator import decorator

   @decorator
   def warn_slow(func, timelimit=60, *args, **kw):
       t0 = time.time()
       result = func(*args, **kw)
       dt = time.time() - t0
       if dt > timelimit:
           logging.warn('%s took %d seconds', func.__name__, dt)
       else:
           logging.info('%s took %d seconds', func.__name__, dt)
       return result

   @warn_slow  # warn if it takes more than 1 minute
   def preprocess_input_files(inputdir, tempdir):
       ...

   @warn_slow(timelimit=600)  # warn if it takes more than 10 minutes
   def run_calculation(tempdir, outdir):
       ...

Enjoy!