闪烁先驱包括帮助,以方便发出信号使用闪烁。用@blinker_herald.emit()修饰函数或方法,pre和post信号将自动发送到连接的处理程序。
blinker_herald的Python项目详细描述
闪光先驱报
闪烁先驱包括帮助器,可以使用卓越的 blinker库。
用@blinker_herald.emit()
修饰函数或方法
并且pre和post信号将自动发送到
所有连接的处理程序。
- 免费软件:ISC许可证
- 文档:https://blinker_herald.readthedocs.org。
功能
- 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
使用@emit
decorator使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
来连接
对于信号处理程序,信号名称是前缀pre或post
后跟\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_name,
sender_module,sender_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
注意
如果您的项目没有很多 方法名冲突,在大多数情况下只使用方法名就可以了。
学分
这个软件最初是由SatelliteQE团队创建的,用于向 Robottelo和Nailgun
历史记录
0.1.0(2016-05-28)
- pypi上的第一个版本。