闪烁先驱包括帮助,以方便发出信号使用闪烁。用@blinker_herald.emit()修饰函数或方法,pre和post信号将自动发送到连接的处理程序。

blinker_herald的Python项目详细描述


闪光先驱报

https://img.shields.io/pypi/v/blinker_herald.svghttps://img.shields.io/travis/rochacbruno/blinker_herald.svgDocumentation StatusCoveragedocs/The_Herald.jpg

闪烁先驱包括帮助器,可以使用卓越的 blinker库。

@blinker_herald.emit()修饰函数或方法 并且prepost信号将自动发送到 所有连接的处理程序。

功能

  • blinker
  • 提供的所有功能
  • +一个简单的装饰程序{},在调用函数并返回结果之前神奇地发出信号。
  • 用于发现项目中信号的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

使用@emitdecorator使blinker先驱发出该方法的信号 现在您可以连接处理程序来捕获这些信号

您可以捕获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 后跟\u和方法名:

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 要强制发送者成为class另一个选项是sender_class_namesender_modulesender_name还可以传递字符串、对象 或者lambda接收sender实例,例如:@emit(sender=lambda self: self.get_sender())

使用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

上面将处理类one的create方法信号,但不处理类two的^{str 1>

您还可以使用 \提供方法名的双下划线:

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上的第一个版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在使用JsonObject时转义斜杠和其他字符?   带有递归的字符串的java排列无法完成,超过9个字符抛出OfMemoryError   java位图。压缩无效   Java日期解析即使在“错误”的情况下也能工作   java如何从redis源代码创建共享或静态库?   单击SeleniumWebDriverJava图像时,“元素在点上不可单击”   javagui设计&一些电影中使用的软件   Tapestry中的java表单编码   java如何在安卓的MainActivity之外创建对话框   java Hibernate验证程序。如何使用@Valid注释?   使用jspservlet和引导的java分页   唯一值的java对象锁   java如何编写一个spring拦截器,在进行一般检查之前验证所有请求