跳转到主要内容

Python Webhook和事件框架。

项目描述

http://thorn.readthedocs.io/en/latest/_images/thorn_banner.png

Build status coverage BSD License Thorn can be installed via wheel Supported Python versions. Support Python implementations.

版本:

1.5.2

网络:

http://thorn.readthedocs.io/

下载:

http://pypi.python.org/pypi/thorn/

源代码:

http://github.com/robinhood/thorn/

关键词:

事件驱动,webhooks,回调,http,django

关于

Thorn是一个针对Python的webhook框架,侧重于易用性和灵活性,无论是在开始使用还是在维护生产系统时。

目标是让webhooks在网络上蓬勃发展,通过为Python项目提供易于实现的解决方案,并保持Python社区发展出的模式仓库。

  • 简单

    使用单个装饰器将webhook功能添加到数据库模型中,包括对模型特定更改的过滤。

  • 灵活

    所有Thorn组件都是可插拔的、可重用的和可扩展的。

  • 可扩展

    通过利用Celery进行异步处理,Thorn可以每秒执行数百万个HTTP请求。

什么是webhooks?

webhook是一个花哨的HTTP回调名称。

用户和其他服务可以通过注册一个URL来订阅系统中发生的任何事件。

标准的示例是GitHub,您可以为每次向您的仓库提交新更改、创建新的bugtracker问题、有人发布评论等情况注册URL。

另一个例子是内部系统之间的通信,传统上由复杂的消息消费者守护程序主导,使用webhooks是一种优雅且符合REST风格的方式来实现事件驱动系统,只需要一个Web服务器(最好是单独的服务来调度HTTP回调请求)。

Webhooks还可以组合使用,因此您可以组合多个HTTP回调来形成复杂的流程,这些流程在多个系统的事件发生时执行。

使用中

Webhooks在实际应用中的显著例子有

网站

文档

Github

https://developer.github.com/webhooks/

Stripe

https://stripe.com/docs/webhooks

PayPal

http://bit.ly/1TbDtvj

示例

以下示例向一个假想的博客引擎的Article模型添加了四个webhook事件

from thorn import ModelEvent, webhook_model

@webhook_model   # <--- activate webhooks for this model
class Article(models.Model):
    uuid = models.UUIDField()
    title = models.CharField(max_length=100)
    body = models.TextField()

    class webhooks:
        on_create = ModelEvent('article.created')
        on_change = ModelEvent('article.changed'),
        on_delete = ModelEvent('article.removed'),
        on_publish = ModelEvent(
            'article.published',
            state__eq='PUBLISHED',
        ).dispatches_on_change(),

    @models.permalink
    def get_absolute_url(self):
        return 'article:detail', None, {'uuid': self.uuid}

现在,用户可以单独订阅这四个事件,或者通过订阅article.*来订阅所有事件,每当文章创建、更改、删除或发布时,都会收到通知

$ curl -X POST                                                      \
> -H "Authorization: Bearer <secret login token>"                   \
> -H "Content-Type: application/json"                               \
> -d '{"event": "article.*", "url": "https://e.com/h/article?u=1"}' \
> http://example.com/hooks/

API的表达能力强,因此您可能需要学习更多关于参数的知识,才能完全理解它。幸运的是,它都在快速入门教程后面的事件指南中描述了。

我需要什么?

Thorn目前只支持Django,并为Django REST Framework提供了订阅事件的API。

扩展Thorn很简单,因此您也可以为您的首选框架提供支持。

对于调度Web请求,我们推荐使用Celery,但您可以直接在本地调度请求以立即开始。

使用Celery调度请求需要类似RabbitMQRedis的消息传输。

如果您有关于高效有效负载交付的想法,或者只是想重用已在生产中部署的技术,您也可以编写自定义调度器。

快速开始

立即转到django-guide指南,开始在使用Django项目中使用Thorn。

如果您使用的是不同的Web框架,请考虑通过实现新的环境类型来为项目做出贡献。

替代方案

Thorn受到多个Python项目的启发

安装

安装稳定版本

您可以通过Python包索引(PyPI)或从源代码安装thorn。

要使用pip安装

$ pip install -U thorn

从源代码下载和安装

http://pypi.python.org/pypi/thorn/下载最新的thorn版本

您可以通过以下命令安装它

$ tar xvfz thorn-0.0.0.tar.gz
$ cd thorn-0.0.0
$ python setup.py build
# python setup.py install

如果当前没有使用virtualenv,则必须以特权用户身份执行最后一个命令。

使用开发版本

使用pip

您可以使用以下pip命令安装thorn的最新快照

$ pip install https://github.com/robinhood/thorn/zipball/master#egg=thorn

获取帮助

邮件列表

有关Thorn的使用、开发和未来讨论,请加入thorn-users邮件列表。

IRC

在IRC上与我们聊天。#thorn频道位于Freenode网络。

错误追踪器

如果您有任何建议、错误报告或不满,请将它们报告给我们的问题跟踪器:https://github.com/robinhood/thorn/issues/

贡献

Thorn的开发在GitHub上进行:https://github.com/robinhood/thorn

强烈鼓励您参与thorn的开发。如果您不喜欢GitHub(出于某种原因),您也可以发送常规补丁。

请务必阅读文档中的为Thorn做出贡献部分。

许可协议

本软件根据New BSD License授权。有关完整的授权文本,请参阅顶层分发目录中的LICENSE文件。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

thorn-1.5.2.tar.gz (130.8 kB 查看散列值)

上传时间

构建分发

thorn-1.5.2-py2.py3-none-any.whl (58.4 kB 查看散列值)

上传时间 Python 2 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面