Sign inDemoInstall


Package Overview
File Explorer

Install Socket

Protect your apps from supply chain attacks



``aspectlib`` is an aspect-oriented programming, monkey-patch and decorators library. It is useful when changing





``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.

* Free software: BSD 2-Clause License



    pip install aspectlib

You can also install the in-development version with::

    pip install


Docs are hosted at `python-aspectlib docs <>`_.

Implementation status

Weaving functions, methods, instances and classes is completed.


* *"Concerns"* (see `docs/todo.rst`)

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


: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

* `function_trace <>`_ - extremely simple


2.0.0 (2022-10-20)

* Drop support for legacy Pythons (2.7, 3.6 or older).
* Remove Travis/Appveyor CI and switch to GitHub Actions.
* Added support for Tornado 6 (in the test suite).

1.5.2 (2020-11-15)

* Fixed broken import on Python 3.9.
  Contributed by Felix Yan in `#19 <>`_.

1.5.1 (2020-06-11)

* Remove some debug leftover prints from `v1.5.0`.

1.5.0 (2020-04-05)

* Fixed ``weave`` to stop reading attributes that don't match the method selector.
  Contributed by Jonas Maurus in `#14 <>`_.
* Added support for Python 3.7 and 3.8 (``async def`` functions and generators).

1.4.2 (2016-05-10)

* Fix forgotten debug prints.

1.4.1 (2016-05-06)

* Fixed weaving of objects that don't live on root-level modules.

1.4.0 (2016-04-09)

* Corrected weaving of methods, the weaved function should be unbound.
* Rolling back only applies undos once.
* Added a convenience ``weave`` fixture for pytest.

1.3.3 (2015-10-02)

* Fixed typo in ``ABSOLUTELLY_ALL_METHODS`` name (now ``ABSOLUTELY_ALL_METHODS``). Old name is still there for
  backwards compatibility.

1.3.2 (2015-09-22)

* Fixed another tricky bug in the generator advising wrappers - result was not returned if only `Proceed` was yielded.

1.3.1 (2015-09-12)

* Corrected result handling when using Aspects on generators.

1.3.0 (2015-06-06)

* Added ``messages`` property to ``aspectlib.test.LogCapture``. Change ``call`` to have level name instead of number.
* Fixed a bogus warning from ``aspectlib.patch_module``` when patching methods on old style classes.

1.2.2 (2014-11-25)

* Added support for weakrefs in the ``__logged__`` wrapper from ``aspectlib.debug.log`` 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 ``aspectlib.Aspect`` so you can access the cutpoint from the advisor.
* Replaced automatic importing in ``aspectlib.test.Replay`` with extraction of context variables (locals and globals
  from the calling ``aspectlib.test.Story``). Works better than the previous inference of module from AST of the
* All the methods on the replay are now properties: ``aspectlib.test.Story.diff``,
  ``aspectlib.test.Story.unexpected`` and ``aspectlib.test.Story.missing``.
* Added ``aspectlib.test.Story.actual`` and ``aspectlib.test.Story.expected``.
* 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 ``aspectlib.test.Story`` 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 ``aspectlib.test.record``:

    * Renamed `history` option to `calls`.
    * Renamed `call` option to `iscalled`.
    * Added `callback` option.
    * Added `extended` option.

* Changed ``aspectlib.weave``:

    * Allow weaving everything in a module.
    * Allow weaving instances of new-style classes.

* Added ``aspectlib.test.Story`` 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 ``aspectlib.debug.log`` to use ``aspectlib.Aspect`` and work as expected with coroutines or generators.
* Fixed ``aspectlib.debug.log`` 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 ``aspectlib.Aspect``.
* Made aspectlib raise better exceptions.

0.6.1 (2014-03-22)

* Fix checks inside ``aspectlib.debug.log`` 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 ``aspectlib.debug.log``:

    * 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 ``aspectlib.weave``:

    * 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.



Did you know?

Socket installs a GitHub app to automatically flag issues on every pull request and report the health of your dependencies. Find out what is inside your node modules and prevent malicious activity before you update the dependencies.


Related posts

SocketSocket SOC 2 Logo


  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc