131 lines
4.1 KiB
Text
131 lines
4.1 KiB
Text
Metadata-Version: 2.1
|
|
Name: decorator
|
|
Version: 4.4.2
|
|
Summary: Decorators for Humans
|
|
Home-page: https://github.com/micheles/decorator
|
|
Author: Michele Simionato
|
|
Author-email: michele.simionato@gmail.com
|
|
License: new BSD License
|
|
Keywords: decorators generic utility
|
|
Platform: All
|
|
Classifier: Development Status :: 5 - Production/Stable
|
|
Classifier: Intended Audience :: Developers
|
|
Classifier: License :: OSI Approved :: BSD License
|
|
Classifier: Natural Language :: English
|
|
Classifier: Operating System :: OS Independent
|
|
Classifier: Programming Language :: Python
|
|
Classifier: Programming Language :: Python :: 2
|
|
Classifier: Programming Language :: Python :: 2.6
|
|
Classifier: Programming Language :: Python :: 2.7
|
|
Classifier: Programming Language :: Python :: 3
|
|
Classifier: Programming Language :: Python :: 3.2
|
|
Classifier: Programming Language :: Python :: 3.3
|
|
Classifier: Programming Language :: Python :: 3.4
|
|
Classifier: Programming Language :: Python :: 3.5
|
|
Classifier: Programming Language :: Python :: 3.6
|
|
Classifier: Programming Language :: Python :: 3.7
|
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
Classifier: Topic :: Software Development :: Libraries
|
|
Classifier: Topic :: Utilities
|
|
Requires-Python: >=2.6, !=3.0.*, !=3.1.*
|
|
|
|
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!
|
|
|
|
|