Awesomestream创造了令人敬畏的溪流

awesomestream的Python项目详细描述


冬虫夏草

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服务器 特别注意“user”、“kind”和“repo”键。这将使 有点更有意义

在另一个控制台中,我们将实例化一个客户机。

>>> 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!',
... })
>>>

但用户犯了一个错误,将其命名为“first”,而不是“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默认情况下, 函数的作用是:检索20个项目,但通常我们需要 定制下面是它的外观:

>>> c.items(user=[23, 291], start=1, end=3)
[{'kind': 'friend', 'user': 291, 'friend': 23},
 {'repo': 2842, 'owner': 23, 'kind': 'watch', 'user': 291}
]

支持的后端

  • In-Memory (mostly for testing)
  • SQL
  • Redis

计划支持

  • CouchDB
  • Cassandra

成熟度

我写这篇文章是为了在http://radiosox.com/上进行最终部署,但还没有 但在生产中使用。这样做的风险由你自己承担

要求

小结:

Use pip, and do pip install -U -r requirements.txt

较长摘要:

Strictly speaking, the only requirement is simplejson. That being said, if you want redis support, you need redis installed. If you want SQL support, you need SQLAlchemy installed. If you want support for creating a WSGI app to expose this over HTTP, you’ll need werkzeug installed. Finally, if you want a simple, pure-python way of running that WSGI app, you’ll want to install cherrypy.

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

推荐PyPI第三方库


热门话题
java如何在没有代码气味的情况下编写遵循Liskov替代和其他可靠原则的不可变映射?   java最新jre上的压缩字符串对旧编译代码有好处吗?   java是否可以在javascript中取消PrimeFaces menuitem onclick函数   mysql从SQL数据库中访问java中xml名称空间标记的值   从java程序打开excel文件   java在方法中使用“var”是否会使执行(并发)线程不安全?   java使搜索视图以一种关于AndroidManifest的通用方式可用。xml   java对如何准确使用正则表达式感到困惑?   mule如何访问java文件中的记录变量   java在从2D数组引发异常后继续   枚举当前设置为的java值   java当listview只有几个项目时,如何使alert对话框显示listview的所有项目?   java getTableRow()返回大于项大小的索引   c用java传输二进制文件(数据)   java更改多选列表项复选框颜色