Skip to main content

Blinker Herald

https://img.shields.io/pypi/v/blinker_herald.svg https://img.shields.io/travis/rochacbruno/blinker_herald.svg Documentation Status Coverage docs/The_Herald.jpg

The Blinker Herald includes helpers to easily emit signals using the excelent blinker library.

Decorate a function or method with @blinker_herald.emit() and pre and post signals will be automatically emitted to all connected handlers.

Features

  • All the features provided by blinker

  • + an easy decorator @emit() to magically emit signals when your functions are called and before it returns a result.

  • A signals namespace proxy to discover the signals in your project

  • Customizable for your needs

Usage

Let’s say you have a class and wants to emit a signal for a specific method:

from blinker_herald import emit

class SomeClass(object):

    @emit()
    def do_something(self, arg1):
        # here is were magically the 'pre' signal will be sent
        return 'something done'
        # here is were magically the 'post' signal will be sent

using @emit decorator makes blinker_herald to emit a signal for that method and now you can connect handlers to capture that signals

You can capture pre signal to manipulate the object:

SomeClass.do_something.pre.connect
def handle_pre(sender, signal_emitter, **kwargs):
    signal_emitter.foo = 'bar'
    signal_emitter.do_another_thing()

And you can also capture the post signal to log the results:

SomeClass.do_something.post.connect
def handle_post(sender, signal_emitter, result, **kwargs):
    logger.info("The method {0} returned {1}".format(sender, result))

You can also use the namespace proxy blinker_herald.signals to connect handlers to signals, the signal name is the prefix pre or post followed by _ and the method name:

from blinker_herald import signals

@signals.pre_do_something.connect
def handle_pre(sender, signal_emitter, **kwargs):
    ...

If you have a lot of subclasses emitting signals with the same name and you need to capture only specific signals, you can specify that you want to listen to only one type of sender:

from blinker_herald import emit, signals, SENDER_CLASS
class BaseModel(object):
    ...
    @emit(sender=SENDER_CLASS)
    def create(self, **kwargs):
        new_instance = my_project.new(self, **kwargs)
        return new_instance

class One(BaseModel):
    pass

class Two(BaseModel):
    pass

Using SENDER_CLASS you can now connect to specific signal:

from blinker_herald import signals

@signals.post_create.connect_via(One)
def handle_post_only_for_one(sender, signal_emitter, result, **kwargs):
    # sender is the class One (cls)
    # signal the instance of the class One (self)
    # result is the return of the method create

The above will handle the create method signal for the class One but not for the class Two

You can also be more specific about the signal you want to connect using the __ double underscore to provide method name:

from blinker_herald import signals

@signals.module_name__ClassName__post_method_name.connect
def handle_post(sender, signal_emitter, result, **kwargs):
    ...

The above will connect to the post signal emitted by module_name.ClassName.method_name

Credits

This software was first created by SatelliteQE team to provide signals to Robottelo and Nailgun

History

0.1.0 (2016-05-28)

  • First release on PyPI.

Release files for blinker_herald 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for blinker_herald 0.2.0
File Size Uploaded
blinker_herald-0.2.0.tar.gz 42.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for blinker_herald 0.2.0
File Interpreter ABI Platform
blinker_herald-0.2.0-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 50.4 kB

Release files / blinker_herald-0.2.0.tar.gz

Download URL blinker_herald-0.2.0.tar.gz
Size 42.1 kB
Tags Source
SHA-256 checksum
How to use checksums
b1fd320aa594a5f0cd4cd2e07db97cdbbea00197fdcd38161c873864315351cd
BLAKE2b-256 checksum
How to use checksums
98fec3ef82a7d78ddcecff0cbae06433f0c0fd164910d5308af7594370ebfd11
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / blinker_herald-0.2.0-py2.py3-none-any.whl

Download URL blinker_herald-0.2.0-py2.py3-none-any.whl
Size 8.3 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
2558c404a1ea0f62b99a167d0d8794bbc45fcd3b1e8d8bdfcab1dd1d2b1809f9
BLAKE2b-256 checksum
How to use checksums
c501ec44660f2a35b3e280e2d8334fff6396657feaa2e59f9675604be586bf96
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.0

2 release files

0.0.0

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page