AwesomeStream创建出色的流
项目描述
AwesomeStream
AwesomeStream是一套用于创建“流服务器”的工具。也就是说,一个可以存储事件发生的信息的服务器,并且可以以有趣的方式逆序查询这些事件。
示例和用例
假设你运行一个像GitHub这样的网站,人们以各种不同的方式互动。人们可以创建存储库、分叉它们、关注或取消关注存储库、添加朋友等。用户可以在网站上执行各种操作。让我们看看AwesomeStream如何帮助。
首先,我们将设置一个简单的基于Redis的服务器
>>> from awesomestream.backends import RedisBackend >>> from awesomestream.jsonrpc import create_app, run_server >>> backend = RedisBackend( ... keys=['user', 'kind', 'repo'], ... host='127.0.0.1', ... port=6379 ... ) >>> >>> app = create_app(backend) >>> run_server(app, 8080)
这个简单的脚本设置了一个基于Redis的AwesomeStream服务器,特别关注“用户”、“类型”和“存储库”键。这将在稍后变得更加清晰。
在另一个控制台中,我们将实例化一个客户端。
>>> from awesomestream.jsonrpc import Client >>> c = Client('http://127.0.0.1:8080/')
好的,现在我们已经设置了客户端,让我们开始记录用户操作。看,一个用户刚刚创建了一个新的存储库!
>>> c.insert({ ... 'kind': 'create-repo', ... 'repo': 17, ... 'user': 291, ... 'name': 'frist', ... 'description': 'This is my first repo ever!', ... }) >>>
但用户犯了一个错误,将其命名为“frist”而不是“first”。所以他们继续删除它
>>> c.insert({ ... 'kind': 'delete-repo', ... 'repo': 17, ... 'user': 291, ... 'reason': 'Made a typo :(', ... }) >>>
然后他们放弃了,决定关注另一个用户的存储库
>>> c.insert({'kind': 'watch', 'repo': 2842, 'user': 291, 'owner': 23})
最后他们添加那个用户为朋友
>>> c.insert({'kind': 'friend', 'user': 291, 'friend': 23})
第二个用户注意到有人关注他们,并回关
>>> c.insert({'kind': 'friend', 'user': 23, 'friend': 291})
现在我们已经将数据插入到流服务器中,我们可以查询它以获取完整的流。这里是如何看起来像这样
>>> c.items() [{'kind': 'friend', 'user': 23, 'friend': 291}, {'kind': 'friend', 'user': 291, 'friend': 23}, {'repo': 2842, 'owner': 23, 'kind': 'watch', 'user': 291}, {'repo': 17, 'kind': 'delete-repo', 'reason': 'Made a typo :(', 'user': 291}, {'repo': 17, 'kind': 'create-repo', 'user': 291, 'name': 'frist', 'description': 'This is my first repo ever!'} ]
正如您所看到的,我们以倒序时间顺序获得了整个流。但假设我们只想过滤出‘朋友’请求。我们很容易做到这一点。
>>> c.items(kind='friend') [{'kind': 'friend', 'user': 23, 'friend': 291}, {'kind': 'friend', 'user': 291, 'friend': 23} ]
请注意,它们仍然以倒序时间顺序排列。我们还可以组合我们的谓词,以仅获取特定用户发出的朋友请求。
>>> c.items(kind='friend', user=23) [{'kind': 'friend', 'user': 23, 'friend': 291}]
但一个非常常见的案例是您只想看到您朋友生成的内容。在AwesomeStream中,这很简单。
>>> c.items(user=[23, 291]) [{'kind': 'friend', 'user': 23, 'friend': 291}, {'kind': 'friend', 'user': 291, 'friend': 23}, {'repo': 2842, 'owner': 23, 'kind': 'watch', 'user': 291}, {'repo': 17, 'kind': 'delete-repo', 'reason': 'Made a typo :(', 'user': 291}, {'repo': 17, 'kind': 'create-repo', 'user': 291, 'name': 'frist', 'description': 'This is my first repo ever!'} ]
正如您所看到的,列表中通过每个用户ID都检索到了。默认情况下,items()函数检索20个项目,但通常我们需要对其进行自定义。这将是以下样子:
>>> c.items(user=[23, 291], start=1, end=3) [{'kind': 'friend', 'user': 291, 'friend': 23}, {'repo': 2842, 'owner': 23, 'kind': 'watch', 'user': 291} ]
支持的后端
内存中(主要用于测试)
SQL
Redis
计划支持
CouchDB
Cassandra
成熟度
我正在编写此文档,以最终部署在http://radiosox.com/上,但尚未在生产环境中部署。请自行承担风险。
需求
简短摘要
使用pip,并执行pip install -U -r requirements.txt
详细摘要
严格来说,唯一的需求是simplejson。但话虽如此,如果您想支持redis,则需要安装redis。如果您想支持SQL,则需要安装SQLAlchemy。如果您想支持创建一个WSGI应用程序来通过HTTP公开,则需要安装werkzeug。最后,如果您想以纯Python的方式运行该WSGI应用程序,则想安装cherrypy。
项目详情
awesomestream-0.1.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d8d8463063873d48a7f3febe026b759276362c055b66d8a6ec563acd56190887 |
|
MD5 | faba9ebcb66b08373258337d8ce8dd8f |
|
BLAKE2b-256 | 2286af5110968a47e0606ad1c54012db7b456b2e4a30a10b6ac032cdc5c42ba8 |