提供一个简单的侦听器/观察者库。

snitcher的Python项目详细描述


告密者图片::https://circleci.com/bb/arcanefoom/snitcher/tree/master.svg?style=shield
:目标:https://circleci.com/bb/arcanefoom/snitcher/tree/master

…图片::https://coveralls.io/repos/bitbucket/arcanefoom/snitcher/badge.svg?branch=master
:目标:https://coveralls.io/bitbucket/arcanefoom/snitcher?分支=主

…图片::https://readthedocs.org/projects/snitcher/badge/?version=latest
:目标:http://snitcher.readthedocs.io/en/latest/?badge=latest
:alt:documentation status


quickstart
--


克隆或下载并提取存储库,并导航到文件夹
,其中的源代码是::


adjust for the specific python command available in your environment(但必须是python 3.5+)

snitcher
----


snitcher类打算由希望提供订户通知机制的其他类继承。snitcher方法的前缀是"s",这样它们就不太可能与现有的或继承的api冲突。


代理
必须有一个带有签名*notify(self,\*args,\*\*kwargs)*的方法。当在
snitcher中调用*s\\u inform*方法时,将通知所有注册的代理。传递给*s\\inform*方法的任何参数都将转发给来自snitcher import snitcher
>>的
agents::

>>定义工作(自我,工作):
…工作中的W:
…打印("正在处理{}"。格式(w))
…self.s_inform()让代理知道工作已经完成

>;>班级主管:
…def notify(self,*args,**kwargs):
…打印("工作完成")

>;>w1=worker()
>;>work=["loada","loadb"]
>;>boss=supervisor()
>;>w1.s撸u register撸u agent(boss)
>;>w1.do撸work(work)
working on loada
working on loadb
worker done

scoop类提供了一个方便的容器,用于将信息从告密者传递给代理。spoop
类提供一个单独的属性来指示spoop的类型(这对于简单的通知来说应该足够了)。
为了方便批量通知,spoop类提供了一个简单的嵌套机制,其中可以将spoop
添加到其他的spoop(通过*s\\u add*方法)。scoop是iterable,允许轻松访问所有嵌套的scoop。
s\\u add*方法正确地构建了勺链,因此可以将所有嵌套的scoop添加到单个头部勺,并在
更混乱的环境中添加到链中的任何勺。Scoop类可以扩展以添加更多字段,以便
根据特定应用程序调整信息包:

>;
>;from datetime import datetime
>;>from snithcer import scoop
>;>import time
>;>职业工人合作社(独家新闻):
…定义初始化(self,type,started,finished):
…super()。\uu init(类型)
…self.started=已启动
…self.finished=已完成

>>>>班上工人(告密者):
…定义工作(自我,工作):
…勺=无
…对于W工作中:
…start=datetime.now()
…打印("正在处理{}"。格式(w))
…睡眠时间(2)
…s=workerscoop(type="work",started=start,finished=datetime.now())
…如果勺子没有:
…勺=s
…其他:
…独家新闻添加
…自我通知(独家新闻)
>;>def notify(self,独家新闻):
…信息=[(str(s.starter),str(s.finished))用于勺中的s]
…打印("worker done with:{},details:{}.format(spook.type,info))
>;>;>work=["loada","loadb"]
>;>boss=supervisor()
>;>w1.s廑add廑agent(boss)
>;>w1.do廑work(work)
working on loada
正在处理加载b
工作已完成:工作,详细信息:[('2017-09-30 22:44:09.576904','2017-09-30 22:44:11.577410'),('2017-09-30 22:44:11.577410','2017-09-30 22:44:13.577559')]


在告密者那里登记时。应该从代理实例(即不是从代理类)查询提供的方法。
最后,snitcher有一个标志(*s\'u chatty*)控制在调用
通知方法时是否通知代理::

定义工作(自我,工作):
…勺=无
…工作中的W:
…start=datetime.now()
…打印("正在处理{}"。格式(w))
…睡眠时间(2)
…s=workerscoop(type="work",started=start,finished=datetime.now())
…如果勺子没有:
…勺=s
…其他:
…独家新闻添加
…自行通知(独家)

…def do_break(self,持续时间):
…start=datetime.now()
…睡眠时间(持续时间)
…s=workerscoop(type="break",start=start,finished=datetime.now())
…自我通知:

>;>def supervise(self,scoop):
…info=[(str(s.started),str(s.finished))用于勺中的s]
…打印("worker done with:{},details:{}.format(spook.type,info))

>;>w1=worker()
>;>work=["loada","loadb"]
>;>boss=supervisor()
>;>w1.s撸register撸agent(boss,上司监督)提供首选的通知方法
>;>w1.做工作(工作)
做装载工作a
做装载工作b
做工作的工人:工作,详细信息:[('2017-10-03 19:39:43.534965','2017-10-03 19:39:45.535265','2017-10-03 19:39:45.535265',"2017-10-03 19:39:47.536316’)]
>;>w1.休息时间(2)
工作人员休息时间:休息时间,详细信息:[('2017-10-03 19:39:47.536316','2017-10-03 19:39:49.536355')]
>;>w1.s聊天时间=假;不要监控休息时间
>;>w1.休息时间(2)
>;w1.s_u chatty=true监控返回
>;>work=["loade","loadf"]
>;>w1.在loade上工作(work)
在loade上工作
在loadf上工作
完成的工人:work,详细信息:[('2017-10-03 19:39:55.537225','2017-10-03 19:39:57.537791'),('2017-10-03 19:39:57.537791','2017-10-03 19:39:59.538375')]



logging
----


snitcher在*info*级别记录代理注册/注销事件。访问
代理的通知方法




changelog
==
此项目的所有显著更改都将记录在他的文件。

格式基于[保留更改日志](http://keep a changelog.com/en/1.0.0/)
,并且此项目遵循[语义版本控制](http://semver.org/spec/v2.0.0.html)。


[未发布]
----


[0.2.1]-2018-04-23
---------

添加示例。
-向snitcher init添加*args和**kwargs以改进继承支持。
-改进日志消息

[0.1.6]-2017-08-27
----
包括第一个api实现、测试和文档。

…添加了
~~~~~
更改了
~~~~~~
修复了
~~~~

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

推荐PyPI第三方库


热门话题
java如何将字符串转换为自定义对象   java如何从socket方法获取数据?   Java中的soap读取回车和新行   java在单击时替换图像   java推荐的使用RXJava执行异步任务的方法   java MySql连接器JDBC驱动程序不支持连接池吗?   java将活动堆栈清理到顶部   java计数用户输入的数量   java从webservice下载大文件导致应用程序性能问题   JavaLocalDate。EPOCH不可用   java如何在使用Selenium等待一定时间后,在页面无法加载(get(url))时自动刷新页面   java Calendar setLenient方法不允许检查年份字段的健全性   java Eclipse和intelliJ 安卓 SDK问题   java为什么我可以在没有super关键字的情况下调用父方法?   java iText的PDF格式不好