Skip to main content

Add events to object methods and attributes

Project description

https://img.shields.io/pypi/v/eventize.svg

Eventize permits to listen to “before” and “after” methods events and “on_get”, “on_change”, “on_set”, “on_del” attributes events.

Features:
  • Can be used as a simple subject/observer pattern
  • Conditional events
  • Use descriptors to lazily and unobstrusively listen to “on_get”, “on_change”,”on_set”, “on_del” events on attributes and “before” and “after” events on methods.
  • Precise callbacks inheritance (see Subject)
  • Statically and dynamically customizable (via inheritance, pattern visitor over a “modifier” protocol, decorators…)

Fine grained event dispatcher

It can listen to events at 3 levels (by order of execution):
  • Descriptor Class: for all classes which use the given Attribute or Method descriptor class
  • Descriptor Instance: for all objects of a given class
  • Object instance: for the given object attribute value or method

Table of Contents

Installation

Install it from pypi:

pip install eventize

or from sources:

git clone git@github.com:apieum/eventize.git
cd eventize
python setup.py install

Development

Contributions are greatly appreciated.

Please use github (issue tracker, pull requests…) or contact me at apieum [at] gmail [dot] com

Testing

Tests are my specs so code (except refactorings) without tests won’t probably be accepted. If you want to contribute please add tests.

Test recommended requirements:

pip install -r dev-requirements.txt

Sometimes –spec-color doesn’t function. You should uninstall nosecolor and nosespec then reinstall nosecolor and nosespec separatly (nosecolor first).

You can fix it like this:

pip uninstall nosespec nosecolor
pip install nosecolor && pip install nosespec

In order to have fast feedback with TDD loops, I develop with two virtualenvs (2.7 and 3.x python versions) launched in a splited shell (tmux) which runs tests each time a file changes. Use the code below with option –with-watch to launch tests this way.

Launching tests:

git clone git@github.com:apieum/eventize.git
cd eventize
nosetests --with-spec --spec-color ./eventize
# or with watch
# nosetests --with-spec --spec-color --with-watch ./eventize

Documentation

Documentation is generated by sphinx from restructured text localized in doc/source. It is build by make (see doc/Makefile).

Except to explain implementation choices (why), please avoid comments in code. It aims at keeping focus on coding and avoiding outdated comments. Keep long names (vars, functions, classes…) and explicit tests names (complete sentences) to have understandable code.

Building doc:

git clone git@github.com:apieum/eventize.git
cd eventize/eventize/doc
make all  # or make *target* (see in Makefile for *target* or type make)

Continuous Integration

CI is made by travis for different python versions (trying to maintain compatibility with v2 python).

It checks:
  • test suites (nosetest)
  • rst-lint this README
  • doc building
  • code coverage
https://app.travis-ci.com/apieum/eventize.svg?branch=master https://coveralls.io/repos/github/apieum/eventize/badge.svg?branch=master

Project details


Download files

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

Files for eventize, version 0.4.4
Filename, size File type Python version Upload date Hashes
Filename, size eventize-0.4.4-py3-none-any.whl (38.1 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size eventize-0.4.4.tar.gz (29.6 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page