Skip to main content

Decorator utility that operates on black magic

Project description

black-magic
-----------

Collection of metaprogramming modules that operate on black magic!

Currently the only available module is:

- ``black_magic.decorator``

License
~~~~~~~

To the extent possible under law, Thomas Gläßle has waived all copyright
and related or neighboring rights to black-magic. This work is published
from: Germany.

To the extent possible under law, the person who associated CC0 with
black-magic has waived all copyright and related or neighboring rights
to black-magic.

You should have received a copy of the CC0 legalcode along with this
work. If not, see http://creativecommons.org/publicdomain/zero/1.0/.

black\_magic.decorator
~~~~~~~~~~~~~~~~~~~~~~

This is intended to become a more modern and flexible replacement for the
the well known decorator_ module. This module benefits an API for more
flexible usage. The behaviour of the decorator_ module can easily be
duplicated.

.. _decorator: https://pypi.python.org/pypi/decorator/3.4.0

Usage
^^^^^

You can use it just like the standard ``functools.wraps`` function:

.. code:: python

>>> from black_magic.decorator import wraps

>>> x = []
>>> def real(a:int, b=x) -> "Returns b":
... return b

>>> @wraps(real)
... def fake(*args, **kwargs):
... print("Fake!")
... return real(*args, **kwargs)

This will not only update the docstring of the fake function to look
like the original but generate a wrapper function that has *exactly* the
same signature:

.. code:: python

>>> assert fake(1) is x # check object-identity of default-parameter!
Fake!

>>> from inspect import signature
>>> assert signature(fake) == signature(real)

If you want to get real crazy you can even use ast.expr_'s:

.. code:: python

>>> import ast
>>> fake = wraps(real)(ast.Num(n=1))
>>> fake(0)
1

.. _ast.expr: http://docs.python.org/3.3/library/ast.html?highlight=ast#abstract-grammar

Under the hood
^^^^^^^^^^^^^^

Q: This uses ugly ``str`` concat and ``eval`` code, right?

A: No, it uses `abstract syntax trees`_ to do its dynamic code generation.

.. _abstract syntax trees: http://docs.python.org/3.3/library/ast.html?highlight=ast#ast

Tests
^^^^^

This module has been tested to work on python{2.6, 2.7, 3.2, 3.3} and
PyPy1.9 using `Travis CI`_.

.. _Travis CI: https://travis-ci.org/


Changelog
~~~~~~~~~

0.0.4 (in development)
^^^^^

- support any callable to be passed to ``ASTorator.decorate``
- convert README to .rst

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

black-magic-0.0.4.tar.gz (10.3 kB view details)

Uploaded Source

File details

Details for the file black-magic-0.0.4.tar.gz.

File metadata

  • Download URL: black-magic-0.0.4.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for black-magic-0.0.4.tar.gz
Algorithm Hash digest
SHA256 fe10b7b426fd81f3f5fd0a905dcdb6ee5f311fa19769ea918b92333d8a461a3f
MD5 adac8bdfedb4f18671a99272b9b79410
BLAKE2b-256 c4a700c2799202c578090569e5724129fae41024a84c134667772c7c4196f0e6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page