- 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).
- Fixed broken import on Python 3.9. Contributed by Felix Yan in #19.
- Remove some debug leftover prints from v1.5.0.
- 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).
- Fix forgotten debug prints.
- Fixed weaving of objects that don't live on root-level modules.
- Corrected weaving of methods, the weaved function should be unbound.
- Rolling back only applies undos once.
- Added a convenience
weave
fixture for pytest.
- Fixed typo in
ABSOLUTELLY_ALL_METHODS
name (nowABSOLUTELY_ALL_METHODS
). Old name is still there for backwards compatibility.
- Fixed another tricky bug in the generator advising wrappers - result was not returned if only Proceed was yielded.
- Corrected result handling when using Aspects on generators.
- Added
messages
property to :obj:`aspectlib.test.LogCapture`. Changecall
to have level name instead of number. - Fixed a bogus warning from :func:`aspectlib.patch_module`` when patching methods on old style classes.
- Added support for weakrefs in the
__logged__
wrapper from :obj:`aspectlib.debug.log` decorator.
- Don't raise exceptions from
Replay.__exit__
if there would be an error (makes original cause hard to debug).
- 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.
- Use
ASPECTLIB_DEBUG
for every logger inaspectlib
.
- Added a bind option to :obj:`aspectlib.Aspect` so you can access the cutpoint from the advisor.
- Replaced automatic importing in :obj:`aspectlib.test.Replay` with extraction of context variables (locals and globals from the calling :obj:`aspectlib.test.Story`). Works better than the previous inference of module from AST of the result.
- All the methods on the replay are now properties: :obj:`aspectlib.test.Story.diff`, :obj:`aspectlib.test.Story.unexpected` and :obj:`aspectlib.test.Story.missing`.
- Added :obj:`aspectlib.test.Story.actual` and :obj:`aspectlib.test.Story.expected`.
- Added an
ASPECTLIB_DEBUG
environment variable option to switch on debug logging inaspectlib
's internals.
- Reworked the internals :obj:`aspectlib.test.Story` to keep call ordering, to allow dependencies and improved the serialization (used in the diffs and the missing/unexpected lists).
Changed :obj:`aspectlib.test.record`:
- Renamed history option to calls.
- Renamed call option to iscalled.
- Added callback option.
- Added extended option.
Changed :obj:`aspectlib.weave`:
- Allow weaving everything in a module.
- Allow weaving instances of new-style classes.
Added :obj:`aspectlib.test.Story` class for capture-replay and stub/mock testing.
- Use simpler import for the py3support.
- Change :obj:`aspectlib.debug.log` to use :obj:`~aspectlib.Aspect` and work as expected with coroutines or generators.
- Fixed :obj:`aspectlib.debug.log` to work on Python 3.4.
- Remove the undocumented
aspectlib.Yield
advice. It was only usable when decorating generators.
- Add support for decorating generators and coroutines in :obj:`~aspectlib.Aspect`.
- Made aspectlib raise better exceptions.
- Fix checks inside :obj:`aspectlib.debug.log` that would inadvertently call
__bool__
/__nonzero
.
- 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)
Changed :obj:`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.
- Remove junk from 0.4.0's source distribution.
Changed :obj:`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.
- ???
- First public release.