用于抽象与不同黄蜂交互的库
项目描述
此包是WASP交互的抽象,允许应用程序开发者在无需担心特定黄蜂的消息发送和接收机制的情况下发送和接收消息。
它还允许仅通过配置更改正在使用的WASP,而无需修改应用程序代码。
安装
要安装包,请解压源代码分布并执行以下操作
python setup.py install
您也可以使用easy_install安装
easy_install wasp
或者,如果您使用zc.buildout,您可以直接指定包作为egg需求
[buildout] parts = myeggs ... ... [myeggs] recipe = zc.recipe.egg eggs = wasp ...
最后,如果您使用Zope 2,只需将源代码分布解压到$INSTANCE_HOME/lib/python。如果您使用easy_install或带有Zope 2基本分布的构建配方(如Plone所使用的)进行安装,请小心,因为可能安装了与Zope 2不兼容的包。
配置
发送和接收消息的配置集中在配置提供ISendMessage、INotifyMessage和IRecieveMessage的实用程序上。在interfaces.py中阅读这些的文档将涵盖使用黄蜂包所需的大部分说明。
要使用此包,您首先需要选择一个WASP实现并加载它提供的任何ZCML指令。在此例中,我们将使用演示实现,它基本上将所有操作回显到控制台而不是实际执行任何操作
>>> load_zcml(''' ... <include package="wasp.demo" file="meta.zcml" /> ... ''')
为了发送消息,您需要连接您选择的WASP的ISendMessage实用程序。WASP实现通常提供用于此的自定义ZCML指令,允许您指定参数。
演示实现也不例外
>>> load_zcml(''' ... <configure ... xmlns="http://namespaces.zope.org/zope" ... xmlns:wasp="http://namespaces.simplistix.co.uk/wasp"> ... <wasp:sender /> ... </configure> ... ''')
接下来,如果您计划接收消息或关于已发送消息的通知,您需要连接Receiver视图。出于演示目的,我们将其连接到所有对象,但您可能只想将其连接到特定的URL。
>>> load_zcml(''' ... <configure ... xmlns="http://namespaces.zope.org/zope" ... xmlns:browser="http://namespaces.zope.org/browser"> ... <browser:page ... name="wasp" ... for="*" ... class="wasp.Receiver" ... permission="zope.Public" ... ... /> ... </configure> ... ''')
再次强调,如果您计划接收您发送的消息或通知,您需要安装IProcessReponse工具。这是WASP特有的,但可以独立于接收视图的位置或连接方式更改。这意味着应用程序开发者只需关注在所需位置连接接收视图,系统管理员可以随时选择和更改WASP实现。
对于示例,我们将使用wasp.demo.ProcessResponse实现。
>>> load_zcml(''' ... <configure ... xmlns="http://namespaces.zope.org/zope"> ... <utility factory="wasp.demo.ProcessResponse"/> ... </configure> ... ''')
发送消息
配置完成后,发送消息就像这样简单。
>>> from wasp import send >>> send('271234','some message') Send to: '271234' Message: 'some message' Id: None True
如上图所示,send方法接受一个msisdn、一个message和一个可选的message_id。
如果send返回True,则表示消息已成功发送。如果出现错误,将会抛出异常。
然而,最常见的返回值是False。
>>> load_zcml(''' ... <configure ... xmlns="http://namespaces.zope.org/zope" ... xmlns:wasp="http://namespaces.simplistix.co.uk/wasp"> ... <wasp:sender response="False"/> ... </configure> ... ''') >>> send('271234','some message','id4321') Send to: '271234' Message: 'some message' Id: 'id4321' False
返回值为False表示消息已成功传递给WASP,但WASP在此阶段没有确定的响应。要了解发生了什么,应用程序程序必须传递一个message_id。这个ID将被传递给WASP,当WASP回调时,这个message_id将被返回。这是下一节的主题。
接收已发送消息的通知
要接收已发送消息的通知,应用程序程序员必须提供INotifyMessage工具。
以下是一个非常简单的示例。
>>> class HandleNotification: ... def __call__(self,message_id,status,details): ... print "message_id:",repr(message_id) ... print " status:",repr(status) ... print " details:",repr(details)
通常,我们会通过ZCML注册这个工具,但在这里我们直接通过组件架构进行注册。
>>> from wasp.interfaces import INotifyMessage >>> from zope.component import provideUtility >>> provideUtility(HandleNotification(),provides=INotifyMessage)
我们可以通过使用demo WASP实现回调功能来展示其作用。
>>> browser.open('http://localhost/@@wasp?type=notification&message_id=123&status=delivered&details=ok') message_id: u'123' status: <wasp.status.Delivered instance at ...> details: u'ok'
在某些情况下,尤其是如果数据存储在zodb中,方便地访问接收视图的上下文。通过允许您注册适配器而不是工具,而不是工具,wasp包支持这一点。
以下是一个合适的适配器示例。
>>> class HandleNotification: ... def __init__(self,context): ... self.context = context ... def __call__(self,message_id,status,details): ... print " context:",self.context ... print "message_id:",repr(message_id) ... print " status:",repr(status) ... print " details:",repr(details)
这通常适用于所有对象,因为接收视图将确保仅适配其上下文。
>>> from wasp.interfaces import INotifyMessage >>> from zope.component import provideAdapter >>> provideAdapter(HandleNotification,adapts=(None,),provides=INotifyMessage)
现在,当接收到通知时,被调用的代码可以访问上下文。
>>> browser.open('http://localhost/@@wasp?type=notification&message_id=123&status=delivered&details=ok') context: <security proxied zope.app.folder.folder.Folder instance at ...> message_id: u'123' status: <wasp.status.Delivered instance at ...> details: u'ok'
接收消息
要接收消息,应用程序程序员必须提供IReceiveMessage工具。
以下是一个非常简单的示例。
>>> class HandleMessage: ... def __call__(self,msisdn,message_text): ... print " msisdn:",repr(msisdn) ... print "message_text:",repr(message_text)
通常,我们会通过ZCML注册这个工具,但在这里我们直接通过组件架构进行注册。
>>> from wasp.interfaces import IReceiveMessage >>> from zope.component import provideUtility >>> provideUtility(HandleMessage(),provides=IReceiveMessage)
我们可以通过使用demo WASP实现回调功能来展示其作用。
>>> browser.open('http://localhost/@@wasp?type=message&msisdn=123&message_text=my+message') msisdn: u'123' message_text: u'my message'
在某些情况下,尤其是如果数据存储在zodb中,方便地访问接收视图的上下文。通过允许您注册适配器而不是工具,而不是工具,wasp包支持这一点。
以下是一个合适的适配器示例。
>>> class HandleMessage: ... def __init__(self,context): ... self.context = context ... def __call__(self,msisdn,message_text): ... print " context:",self.context ... print " msisdn:",repr(msisdn) ... print "message_text:",repr(message_text)
这通常适用于所有对象,因为接收视图将确保仅适配其上下文。
>>> from wasp.interfaces import IReceiveMessage >>> from zope.component import provideAdapter >>> provideAdapter(HandleMessage,adapts=(None,),provides=IReceiveMessage)
现在,当接收到消息时,被调用的代码可以访问上下文。
>>> browser.open('http://localhost/@@wasp?type=message&msisdn=123&message_text=my+message') context: <security proxied zope.app.folder.folder.Folder instance at ...> msisdn: u'123' message_text: u'my message'
当前可用的WASP
当前可用WASP配置的文档可在每个wasp子包的'readme.txt'中找到。每个子包代表不同的WASP实现。
以下是当前可用的WASP实现列表
- demo
一个用于测试的WASP,它只是回显请求和响应。
- bulksms
一个为http://bulksms.2way.co.za/提供的服务的实现。
许可
版权(c)2008 Simplistix Ltd
本软件根据MIT许可证发布:https://open-source.org.cn/licenses/mit-license.html有关详细信息,请参阅license.txt。
鸣谢
- Roche Compaan和Rijk Stofberg在Upfront
想法和资金
- Chris Withers
开发
变更
1.0.1
首次开源发布
1.0.0
BulkSMS WASP的实现
在IReceiveMessage中澄清了msisdn的含义
为WASP实现添加了通用的SendException
将IProcessResponse修改为返回通知、消息和浏览器响应
0.9.0
仅包含demo实现的初始发布
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
wasp-1.0.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cbd59de4a99d7b5db7fca9b2db832ce5969638a871c48a5c5a9240582182c11b |
|
MD5 | 759f504066116c29a5bd0077b3267ceb |
|
BLAKE2b-256 | 452eb8134455fa6e98695ebc9a59c47cd0a73ef556c7c54fc2b0c9fe95153f26 |
wasp-1.0.1-py2.4.egg的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b1c1725cda847779610132e4ab48ac65ca0fb87d38d5f851e43570c052370a87 |
|
MD5 | f62b0ded244dfe1fd87c72e0197a8ac3 |
|
BLAKE2b-256 | 4758a229afdcfea6a8b14b3e03f672e193d5272cb39988250bfa44729b0c78b1 |