跳转到主要内容

Blinker Herald包括使用Blinker轻松发射信号的辅助工具。使用@blinker_herald.emit()装饰函数或方法,预信号和后信号将自动发送到连接的处理程序。

项目描述

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

《闪烁先驱》包括使用出色的blinker库轻松发出信号的辅助工具。

使用@blinker_herald.emit()装饰器装饰函数或方法,并将自动向所有连接的处理程序发出“pre”和“post”信号。

功能

  • 所有由blinker提供的功能

  • +一个简单的装饰器@emit(),可以在函数被调用并返回结果之前神奇地发出信号。

  • 一个signals命名空间代理,用于发现项目中的信号

  • 可根据您的需求进行自定义

用法

假设您有一个类,并希望为特定方法发出信号

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

使用@emit装饰器使blinker_herald为该方法发出信号,现在您可以连接处理程序来捕获该信号

您可以捕获pre信号来操纵对象

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

您还可以捕获post信号来记录结果

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

您还可以使用命名空间代理blinker_herald.signals将处理程序连接到信号,信号名称是前缀prepost,后跟下划线和方法名称

from blinker_herald import signals

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

如果您有很多子类以相同名称发出信号,但只需要捕获特定信号,您可以指定只想监听一种类型的发送者

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

使用SENDER_CLASS,您现在可以连接到特定的信号

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

上面的代码将处理类Onecreate方法信号,但不处理类Two的信号

您还可以使用双下划线__来指定您想要连接的信号的方法名称

from blinker_herald import signals

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

上面的代码将连接到由module_name.ClassName.method_name发出的post信号

致谢

此软件最初由SatelliteQE团队创建,旨在为Robottelo和Nailgun提供信号。

历史

0.1.0 (2016-05-28)

  • 在PyPI上首次发布。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源分布

blinker_herald-0.2.0.tar.gz (42.1 kB 查看哈希值)

上传时间

构建分布

blinker_herald-0.2.0-py2.py3-none-any.whl (8.3 kB 查看哈希值)

上传于 Python 2 Python 3

由以下机构支持