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无法在未设置数据源的情况下启动springboot应用程序   返回/泛型的类型?   java通过在navigationView中按id重新加载navigationView内容   java实现安卓的状态更新   java Equals()对于两个相等的字符串不返回true   java如何保存屏幕截图(matlab)   java GWT如何在重新加载页面之前确保函数已完全执行   java在Groovy中实现ObjectJSON映射的标准方法是什么?   java在ApacheTomcat中,是否可以通过连接器过滤多个访问日志文件?   java当JVM达到其Xmx限制时,它会强制垃圾收集吗?   如何在JAVA中生成包含特定数字的不同随机数列表?   rcp中透视图之间的java切换   java理解名为“分区”的Linkedlist算法中的无限循环   RestTemplate的java测微计统计信息   Android中使用自定义服务BLE的java读/写特性   java验证输入以确保负数   关于Java扫描器的io基本查询   java如何使用子字符串或其他函数将字符串拆分为单词?   java Storm群集重复元组