File: PKG-INFO

package info (click to toggle)
obsub 0.2.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 160 kB
  • sloc: python: 351; makefile: 5; sh: 2
file content (178 lines) | stat: -rw-r--r-- 5,602 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
Metadata-Version: 2.1
Name: obsub
Version: 0.2.1
Summary: Implementation of the observer pattern via a decorator
Home-page: https://github.com/milibopp/obsub
Author: Emilia Bopp
Author-email: contact@ebopp.de
License: Public Domain
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Topic :: Software Development
Description-Content-Type: text/x-rst
License-File: LICENSE.rst

obsub
=====

|Version| |License|

Small python module that implements the observer pattern via a
decorator.

**Deprecation notice**

This module has been unmaintained since around 2014. The authors have
moved on to other alternatives to event handling. There is also
`observed <https://github.com/DanielSank/observed>`_ by @DanielSank, which
was partially inspired by *obsub*, however, has not seen many updates lately.
@milibopp has been writing with functional reactive programming (FRP), but
not for Python.

FRP is a higher-level abstraction than the observer pattern, that essentially
is a purely functional approach to unidirectional dataflow, composing your
programs of event stream transformations. Experience has shown, that is easier
to compose and to test than the raw observer pattern. A solid implementation in
Python is `RxPY <https://github.com/ReactiveX/RxPY>`_, part of the ReactiveX
project.


Description
-----------

This is based on a `thread on stackoverflow
<http://stackoverflow.com/questions/1904351/python-observer-pattern-examples-tips>`_
(the example of C#-like events by Jason Orendorff), so I don't take any
credit for the idea. I merely made a fancy module with documentation and
tests out of it, since I needed it in a bigger project. It is quite
handy and I've been using it in a couple of projects, which require some
sort of event handling.

Thus it is `licensed as
CC0 <http://creativecommons.org/publicdomain/zero/1.0/>`__, so basically
do-whatever-you-want to the extent legally possible.


Installation
------------

*obsub* is available on PyPI, so you can simply install it using
``pip install obsub`` or you do it manually using ``setup.py`` as with
any python package.


Usage
-----

The ``event`` decorator from the ``obsub`` module is used as follows:

.. code:: python

    from obsub import event

    # Define a class with an event
    class Subject(object):
        @event
        def on_stuff(self, arg):
            print('Stuff {} happens'.format(arg))

    # Now define an event handler, the observer
    def handler(subject, arg):
        print('Stuff {} is handled'.format(arg))

    # Wire everything up...
    sub = Subject()
    sub.on_stuff += handler

    # And try it!
    sub.on_stuff('foo')

You should now get both print messages from the event itself and the
event handler function, like so:

::

    Stuff foo happens
    Stuff foo is handled


Contribution and feedback
-------------------------

*obsub* is developed on `github <https://github.com/milibopp/obsub>`__.

If you have any questions about this software or encounter bugs, you're welcome
to open a `new issue on github <https://github.com/milibopp/obsub/issues/new>`__.

In case you do not want to use github for some reason, you can alternatively
send an email one of us:

- `Emilia Bopp <contact@ebopp.de>`__
- `André-Patrick Bubel <code@andre-bubel.de>`__
- `Thomas Gläßle <t_glaessle@gmx.de>`__

Feel free to contribute patches as pull requests as you see fit. Try to be
consistent with PEP 8 guidelines as far as possible and test everything.
Otherwise, your commit messages should start with a capitalized verb for
consistency. Unless your modification is completely trivial, also add a message
body to your commit.


Credits
-------

Thanks to Jason Orendorff on for the idea on stackoverflow. I also want
to thank @coldfix and @Moredread for contributions and feedback.

.. |Version| image:: https://img.shields.io/pypi/v/obsub.svg
   :target: https://pypi.python.org/pypi/obsub/
   :alt: Latest Version
.. |License| image:: https://img.shields.io/pypi/l/obsub.svg
   :target: https://pypi.python.org/pypi/obsub/
   :alt: License

Changelog
---------

v0.2
~~~~

From a user perspective the preservation of function signatures and a couple of
bug fixes are probably most relevant. Python 2.5 is no longer tested by
continuous integration, though we try to avoid unnecessary changes that might
break backwards compatibility.

In addition, there are quite a number of changes that mostly concern
developers.

- Function signatures are now preserved correctly by the event decorator. This
  is true only for python3. On python2 there is no support for default
  arguments, currently
- Some fixes to memory handling and tests thereof. This includes a more generic
  handling of the garbage collection process within the test suite to make it
  pass on pypy, too.
- Massive refactoring of test suite from one very long doctest to more focused
  unit tests.
- The documentation has been converted from Markdown to reStructuredText, since
  it is compatible with both PyPI and GitHub.
- Various improvements and some streamlining of the documentation.
- Fix package name in license.
- Continuous integration now includes coveralls.io support.
- Support for Python 2.5 is no longer tested using Travis CI, since they have
  dropped support for this version.


v0.1.1
~~~~~~

- Add __all__ attribute to module
- Fix a couple of documentation issues


v0.1
~~~~

*Initial release*