Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

Python Aspect Oriented Programming

Project Description

Description

This project is an Aspect Oriented Programming library for python with reflective concerns.

Installation

pip install b3j0f.aop

Features

  1. Free and unlimited access: no limits to sharing of ideas and knowledges with the license MIT.

  2. Performance:

    • less memory consumption in using the __slots__ class property.
    • less time on (un-)weaving and advice application improvement with binary python encoding and in using constants var in code.
    • (dis/en)abling advices without remove them in using dedicated Advice class.
  3. Easy to use:

    • joinpoint matching with function or regex.

    • distributed programming:

      • interception context sharing in order to ease behaviour sharing between advices.
      • uuid for advice identification in order to ease its use in a distributed context.
    • maintenable with well named variables and functions, comments and few lines.

    • extensible through pythonic code (PEP8), same logic to function code interception and concern modularisation with one module by joinpoint or advice.

    • respect of aspects vocabulary in order to ease its use among AOP users.

    • close to callable python objects in weaving all types of callable elements such as (built-in) functions, (built-in) class, (built-in) methods, callable objects, etc.

    • advices are callable objects.

    • Unit tests for all functions such as examples.

  4. Benchmark:

    • speed execution

Limitations

  • Do not weave advices on readonly instance methods (where class use __slots__ attribute).

Examples

How to change the behaviour of min by max ?

>>> from b3j0f.aop import weave, is_intercepted
>>> double_advice = lambda joinpoint: joinpoint.proceed() * 2
>>> weave(target=min, advices=double_advice)
>>> min(6, 7)
12

How to check if a function is intercepted ?

>>> from b3j0f.aop import is_intercepted
>>> is_intercepted(min)
True

Ok, let’s get back its previous behaviour …

>>> from b3j0f.aop import unweave
>>> unweave(min)
>>> min(6, 7)
6
>>> is_intercepted(min)
False

And with an annotation ?

>>> from b3j0f.aop import weave_on
>>> weave_on(advices=double_advice)(min)
>>> min(6, 7)
12
>>> is_intercepted(min)
True
>>> unweave(min)  # do not forget to unweave if weaving is useless ;)

Enjoy …

State of the art

Related to improving criteria points (1. Free and unlimited access, etc.), a state of the art is provided here.

Library Url License Execution Use Benchmark Compatibility
b3j0f.aop https://github.com/b3j0f/aop MIT 4/5 4/5 4/5 4/5 (>=2.6)
pyaspects http://tinyurl.com/n7ccof5 GPL 2 4/5 2/5 2/5 2/5
aspects http://tinyurl.com/obp8t2v LGPL 2.1 2/5 2/5 2/5 2/5
aspect http://tinyurl.com/lpd87bd BSD 2/5 1/5 1/5 1/5
spring http://tinyurl.com/dmkpj3 Apache 4/5 2/5 3/5 2/5
pytilities http://tinyurl.com/q49ulr5 GPL 3 1/5 1/5 1/5 1/5

pyaspects

weaknesses

  • Not functional approach: Aspect class definition.
  • Side effects: Not close to python API.
  • Not optimized Weaving and Time execution: use classes and generic methods.
  • Not maintenable: poor comments.
  • open-source and use limitations: GPL 2.
  • limited in weave filtering.

aspects

weaknesses

  • open-source and use limitations: LGPL 2.1.
  • more difficulties to understand code with no respect of the AOP vocabulary, packaged into one module.
  • limited in weave filtering.

aspect

strengths

  • invert the AOP in decorating advices with joinpoint instead of weaving advices on joinpoint.
  • open-source and no use limitations: BSD.

weaknesses

  • Simple and functional approach with use of python tools.
  • maintenable: commented in respect of the PEP8.
  • limited in weave filtering.

spring

strengths

  • a very powerful library dedicated to develop strong systems based on component based software engineering.
  • unittests.
  • huge community.

weaknesses

  • require to understand a lot of concepts and install an heavy library before doing a simple interception with AOP concerns.

pytilities

strenghts

  • Very complex and full library for doing aspects and other things.

weaknesses

  • open-source and use limitations: GPL 3.
  • not maintenable: missing documentations and not respect of the PEP8.
  • Executon time is not optimized with several classes used with generic getters without using __slots__. The only one optimization comes from the yield which requires from users to use it in their own advices (which must be a class).

Perspectives

  • wait feedbacks during 6 months before passing it to a stable version.
  • Cython implementation.

Donation

Release History

Release History

This version
History Node

0.8.4

History Node

0.8.3

History Node

0.8.2

History Node

0.8.1

History Node

0.8.0

History Node

0.7.8

History Node

0.7.6

History Node

0.7.5

History Node

0.7.4

History Node

0.7.3

History Node

0.7.2

History Node

0.7.1

History Node

0.7.0

History Node

0.6.0

History Node

0.5.1

History Node

0.5.0

History Node

0.4.6

History Node

0.4.5

History Node

0.4.4

History Node

0.4.3

History Node

0.4.2

History Node

0.4.1

History Node

0.4.0

History Node

0.3.1

History Node

0.3

History Node

0.2.0

History Node

0.1.0

Download Files

Download Files

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

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
b3j0f.aop-0.8.4-py2.py3-none-any.whl (54.0 kB) Copy SHA256 Checksum SHA256 3.4 Wheel Mar 14, 2016
b3j0f.aop-0.8.4.tar.bz2 (20.6 kB) Copy SHA256 Checksum SHA256 Source Mar 14, 2016
b3j0f.aop-0.8.4.tar.gz (22.8 kB) Copy SHA256 Checksum SHA256 Source Mar 14, 2016
b3j0f.aop-0.8.4.zip (40.5 kB) Copy SHA256 Checksum SHA256 Source Mar 14, 2016

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting