Skip to main content

aspectlib is an aspect-oriented programming, monkey-patch and decorators library. It is useful when changing behavior in existing code is desired. It includes tools for debugging and testing: simple mock/record and a complete capture/replay framework.

Project description

Documentation Status Travis-CI Build Status AppVeyor Build Status Coverage Status Code Quality Status Scrtinizer Status
PyPI Package latest release PyPI Package monthly downloads PyPI Wheel Supported versions Supported imlementations

aspectlib is an aspect-oriented programming, monkey-patch and decorators library. It is useful when changing behavior in existing code is desired. It includes tools for debugging and testing: simple mock/record and a complete capture/replay framework.

Documentation

Docs are hosted at readthedocs.org: python-aspectlib docs.

Implementation status

Weaving functions, methods, instances and classes is completed.

Pending:

  • “Concerns” (see docs/todo.rst)

If aspectlib.weave doesn’t work for your scenario please report a bug !

Requirements

OS:

Any

Runtime:

Python 2.6, 2.7, 3.3, 3.4 or PyPy

Python 3.2, 3.1 and 3.0 are NOT supported (some objects are too crippled).

Similar projects

Changelog

1.3.0 (2015-06-06)

  • Added messages property to obj. Change call to have level name instead of number.

  • Fixed a bogus warning from func` when patching methods on old style classes.

1.2.2 (2014-11-25)

  • Added support for weakrefs in the __logged__ wrapper from obj decorator.

1.2.1 (2014-10-15)

  • Don’t raise exceptions from Replay.__exit__ if there would be an error (makes original cause hard to debug).

1.2.0 (2014-06-24)

  • Fixed weaving methods that were defined in some baseclass (and not on the target class).

  • Fixed wrong qualname beeing used in the Story/Replay recording. Now used the alias given to the weaver instead of whatever is the realname on the current platform.

1.1.1 (2014-06-14)

  • Use ASPECTLIB_DEBUG for every logger in aspectlib.

1.1.0 (2014-06-13)

  • Added a bind option to obj so you can access the cutpoint from the advisor.

  • Replaced automatic importing in obj with extraction of context variables (locals and globals from the calling obj). Works better than the previous inference of module from AST of the result.

  • All the methods on the replay are now properties: obj, obj and obj.

  • Added obj and obj.

  • Added an ASPECTLIB_DEBUG environment variable option to switch on debug logging in aspectlib’s internals.

1.0.0 (2014-05-03)

  • Reworked the internals obj to keep call ordering, to allow dependencies and improved the serialization (used in the diffs and the missing/unexpected lists).

0.9.0 (2014-04-16)

  • Changed obj:

    • Renamed history option to calls.

    • Renamed call option to iscalled.

    • Added callback option.

    • Added extended option.

  • Changed obj:

    • Allow weaving everything in a module.

    • Allow weaving instances of new-style classes.

  • Added obj class for capture-replay and stub/mock testing.

0.8.1 (2014-04-01)

  • Use simpler import for the py3support.

0.8.0 (2014-03-31)

  • Change obj to use obj and work as expected with coroutines or generators.

  • Fixed obj to work on Python 3.4.

  • Remove the undocumented aspectlib.Yield advice. It was only usable when decorating generators.

0.7.0 (2014-03-28)

  • Add support for decorating generators and coroutines in obj.

  • Made aspectlib raise better exceptions.

0.6.1 (2014-03-22)

  • Fix checks inside obj that would inadvertently call __bool__/__nonzero.

0.6.0 (2014-03-17)

  • Don’t include __getattribute__ in ALL_METHODS - it’s too dangerous dangerous dangerous dangerous dangerous dangerous … ;)

  • Do a more reliable check for old-style classes in debug.log

  • When weaving a class don’t weave attributes that are callable but are not actually routines (functions, methods etc)

0.5.0 (2014-03-16)

  • Changed obj:

    • Renamed arguments to call_args.

    • Renamed arguments_repr to call_args_repr.

    • Added call option.

    • Fixed issue with logging from old-style methods (object name was a generic “instance”).

  • Fixed issues with weaving some types of builtin methods.

  • Allow to apply multiple aspects at the same time.

  • Validate string targets before weaving. aspectlib.weave('mod.invalid name', aspect) now gives a clear error (invalid name is not a valid identifier)

  • Various documentation improvements and examples.

0.4.1 (2014-03-08)

  • Remove junk from 0.4.0’s source distribution.

0.4.0 (2014-03-08)

  • Changed obj:

    • Replaced only_methods, skip_methods, skip_magicmethods options with methods.

    • Renamed on_init option to lazy.

    • Added aliases option.

    • Replaced skip_subclasses option with subclasses.

  • Fixed weaving methods from a string target.

0.3.1 (2014-03-05)

  • ???

0.3.0 (2014-03-05)

  • First public release.

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

aspectlib-1.3.0.tar.gz (156.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aspectlib-1.3.0-py2.py3-none-any.whl (29.9 kB view details)

Uploaded Python 2Python 3

File details

Details for the file aspectlib-1.3.0.tar.gz.

File metadata

  • Download URL: aspectlib-1.3.0.tar.gz
  • Upload date:
  • Size: 156.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for aspectlib-1.3.0.tar.gz
Algorithm Hash digest
SHA256 ab92fb5c0c2ff8396ccb37a1e66f16109e27d95d796eb24a8aa836738f971899
MD5 a8d741de14e498e61b4e7e7d0274defb
BLAKE2b-256 478d2a20ebad0bb8bdb69412da750b1ef597f0aab7b8e03bd0a5e61d9ac7c362

See more details on using hashes here.

File details

Details for the file aspectlib-1.3.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for aspectlib-1.3.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 528e33eca658ffbea6e4bbe7b583a8122fbc452e5ed0d9a8f3a389fc88525231
MD5 c8f48ba12cbeede81ab521c14e6bb4c1
BLAKE2b-256 f2007895c26ef0ac84d728389477ae809bfed4d25b7daac4375ccf462c6ec888

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