blinker-alt 1.5
Fast, simple object-to-object and broadcast signaling
License: MIT License
Keywords: signal emit events broadcast

[![PyPI](https://img.shields.io/pypi/d/v/blinker-alt.svg)](https://pypi.python.org/pypi/blinker-alt)
[![PyPI](https://img.shields.io/pypi/d/l/blinker-alt.svg)](https://pypi.python.org/pypi/blinker-alt)
[![PyPI](https://img.shields.io/pypi/d/pyversions/blinker-alt.svg)](https://pypi.python.org/pypi/blinker-alt)

**Note: This is a fork of [jek/blinker](https://github.com/jek/blinker)!**

There didn't seem to be any activity anymore on the original repo, and the latest changes on 
master weren't officially released. So I forked the repo, merged a couple of important pull 
requests, and released a new version to PyPI under the name 
[blinker-alt](https://pypi.python.org/pypi/blinker-alt).

# Blinker

Blinker provides a fast dispatching system that allows any number of
interested parties to subscribe to events, or "signals".

Signal receivers can subscribe to specific senders or receive signals
sent by any sender.

    >>> from blinker import signal
    >>> started = signal('round-started')
    >>> def each(round):
    ...     print "Round %s!" % round
    ...
    >>> started.connect(each)

    >>> def round_two(round):
    ...     print "This is round two."
    ...
    >>> started.connect(round_two, sender=2)

    >>> for round in range(1, 4):
    ...     started.send(round)
    ...
    Round 1!
    Round 2!
    This is round two.
    Round 3!

See the [Blinker documentation](https://pythonhosted.org/blinker/) for more information.

## Requirements

Blinker requires Python 2.4 or higher, Python 3.0 or higher, or Jython 2.5 or higher.

## Changelog Summary

1.5 (October 15, 2017)

- Lower baseline cost of no-op signal send() & optional -O speedup.
- Verified Python 3.6 support (no changes needed).
- Verified Python 3.5 support (no changes needed).

1.4 (July 23, 2015)

- Verified Python 3.4 support (no changes needed)
- Additional bookkeeping cleanup for non-ANY connections at disconnect
  time.
- Added Signal._cleanup_bookeeping() to prune stale bookkeeping on
  demand

1.3 (July 3, 2013)

 - The global signal stash behind blinker.signal() is now backed by a
   regular name-to-Signal dictionary. Previously, weak references were
   held in the mapping and ephemeral usage in code like
   ``signal('foo').connect(...)`` could have surprising program behavior
   depending on import order of modules.
 - blinker.Namespace is now built on a regular dict. Use
   blinker.WeakNamespace for the older, weak-referencing behavior.
 - Signal.connect('text-sender') uses an alternate hashing strategy to
   avoid sharp edges in text identity.

1.2 (October 26, 2011)

 - Added Signal.receiver_connected and Signal.receiver_disconnected
   per-Signal signals.
 - Deprecated the global 'receiver_connected' signal.
 - Verified Python 3.2 support (no changes needed!)

1.1 (July 21, 2010)

 - Added ``@signal.connect_via(sender)`` decorator
 - Added ``signal.connected_to`` shorthand name for the
   ``temporarily_connected_to`` context manager.

1.0 (March 28, 2010)

 - Python 3.x compatibility

0.9 (February 26, 2010)

 - Sphinx docs, project website
 - Added ``with a_signal.temporarily_connected_to(receiver): ...`` support