Skip to main content

Django Trello Webhooks - Django 的 Trello 回调集成。

项目描述

用于管理 Trello webhook 的 Django 应用程序。

*寻找贡献者*

2014 年 12 月 1 日更新

现在可以使用他们的 Deploy 按钮将应用程序直接部署到 Heroku。此外,捆绑到此 repo 中的测试应用程序已部署并已上线。

我将在 Trello 板上发布更多文档,以便成为更新的主要来源:https ://trello.com/b/TAAnwdP9/

地位

https://travis-ci.org/yunojuno/django-trello-webhooks.svg?branch=master

该应用程序现在可以运行,并且可以部署到 Heroku(见下文)。主要的悬而未决的问题是编写一些适当的文档,但除非/除非在这个项目中表现出任何真正的外部兴趣,否则我不会在它上面花费任何正式时间,所以请不要期待太多。

背景

Trello webhook 只能通过 API 以编程方式管理,这很聪明,但也是一个庞大的 PITA。此外,在创建新的 webhook 时,Trello 将立即使用 HEAD 请求调用注册的回调 URL,以验证它是否存在。这使得设置 webhook 变得繁琐和复杂(尤其是在本地开发环境中进行试验时)。

这个项目是一个 Django 应用程序,可以轻松管理 Trello webhook。嗯,更容易。它通过 Django 管理站点将 Trello webhook 公开为标准 Django 模型,可以通过 Web UI 创建和删除这些模型。然后通过引发的 Django 信号公开传入的 webhook 事件,并且可以将其集成到您的应用程序中。

它是如何工作的?

每个 webhook 都被建模为一个 Django 模型 ( Webhook ),并且在 webhook 上接收到的每个回调都被建模为一个包含 JSON 有效负载的CallbackEvent对象(因此它将维护所有回调的完整历史记录)。

Webhook.save ()方法用于向 Trello API 注册 webhook。相应的 delete 方法用于从 Trello 中删除 webhook。

该应用程序包含一个单一的视图函数api_callback,它接收来自 Trello 的回调,并且还支持 Trello 同步激活新的 webhook。(当您通过 Trello API 创建 webhook 时,他们会立即向提供的回调 url 发出 HEAD 请求,因此您需要能够立即处理。)

重要的是你如何在应用程序中使用回调。这是通过 Django 信号完成的。在每个 webhook 回调中,应用程序都会发送 callback_received信号,传递通过回调接收到的数据。

然后您的应用程序通过此信号连接;下面取自包含的 test_app,它将格式化的事件发送到 HipChat:

from django.conf import settings
from django.dispatch import receiver

from test_app.hipchat import send_to_hipchat

from trello_webhooks.signals import callback_received

@receiver(callback_received, dispatch_uid="callback_received")
def on_callback_received(sender, **kwargs):
if settings.HIPCHAT_ENABLED:
    event = kwargs.pop('event')
    send_to_hipchat(event.render())

如果您只想过滤掉某些要发送的事件:

def on_callback_received(sender, **kwargs):
    event = kwargs.pop('event')
    if event.event_type == 'commentCard':
        send_to_hipchat(event.render())

有一个 Django 管理命令可用于同步任何现有的 webhook(双向),称为sync_webhooks。自行运行,不带任何参数,这将查找本地 Django 数据库中的所有 webhook,然后与 Trello 同步(如果它们不存在,则创建它们)。它还将检查 Trello 是否已注册但本地不存在的任何 webhook,并创建它们。

渲染有效载荷

收到回调及其 JSON 有效负载后,下一个问题是如何有效地使用它。假设(由我)这个项目的核心用例是将事件传递到其他地方——在我们的例子中是到 HipChat,但其他消息服务可用——你甚至可以去老派和电子邮件人的东西。无论您决定做什么,您都可能希望将 JSON 转换为某种形式的可读文本输出。为了促进这一点,每个事件类型(createCardcommentCard等)都有一个关联的 Django 模板。CallbackEvent模型有一个渲染方法,它将整个 JSON 有效负载作为模板上下文传递到相关模板中,以便您可以提取数据。

下面是默认的commendCard.html模板的示例。

<b>{{action.memberCreator.fullName}}</b> commented
on the card "<b>{{action.data.card.name}}</b>"
on the board "<b>{{action.data.board.name}}</b>":
<blockquote>{{action.data.text}}</blockquote>

默认模板旨在显示可能的情况 - 建议您在应用程序中覆盖这些模板。您可以使用 Django 模板覆盖来执行此操作 - 将您的模板添加到您的应用程序中的同一位置 ( /templates/trello_webhooks/<event_type>.html ) 并在 INSTALLED_APPS设置中的trello_webhooks应用程序上方声明您的应用程序,您的模板将被使用而不是默认值。

可覆盖模板和callback_received信号的组合意味着您应该能够将 Trello 完全集成到您的应用程序中。

NB 一个警告

我没有尝试确保涵盖所有事件——这不是重点。此应用程序将存储和转发它收到的任何事件。为了更轻松地管理意外事件,在管理站点列表视图中显示了CallbackEvent的一个属性 - Has Template。如果这是真的,那么这是一个我们有默认模板的事件。如果它是 False,那么这是我们的新模板 - 我们鼓励您尝试添加新模板。请务必将所有新的默认模板反馈给项目。

配置

一共有三种强制环境设置(遵循 12-factor app原则):

  • TRELLO_API_KEY

  • TRELLO_API_SECRET

  • CALLBACK_DOMAIN

前两个是核心 Trello 开发人员 API 密钥 - 可从此处获得: https ://trello.com/1/appKey/generate

CALLBACK_DOMAIN 包含在内,因为您需要为 Trello API 提供完全限定的域,并且并不总是可以推断出可能是什么 - 例如,在本地开发时,您需要使用从机器到网络的隧道类似ngrok的东西。

通过 Trello API 管理挂钩时,需要第三个密钥,这是用户特定的 - 管理站点在表单上的auth_token字段旁边有一个链接,用于创建新的 Webhook。这使用 Trello API client.js 来执行 Oauth dance - 并提供用户令牌。所有 webhook 都针对用户令牌进行注册。这就是它的工作原理。(注意,您可以将您拥有的任何用户令牌传递给sync_webhooks命令,它将检查 Trello 是否有任何使用这些令牌注册的现有 webhook。)

测试

您可以以正常方式自己运行测试:

$ python manage.py test

但是,如果您安装了tox(我真的建议您这样做),那么您可以简单地运行$ tox,这也将包括覆盖范围。

覆盖率不是 100%(什么时候),但如果您确实做出了贡献,请务必对您所做的任何更改进行测试。

测试本身使用模拟对象来复制两个 Trello API 调用(list_hookscreate_hook),因此不需要互联网访问。(该项目依赖于py-trello,并且覆盖了 API 调用。)

设置

该应用程序在 PyPI 上以django-trello-webhooks 的形式提供,因此请使用pip安装:

$ pip install django-trello-webhooks

进一步发展

  • 写一些测试

  • 与 Trello API 更好地集成

  • 正确处理用户身份验证令牌到期

  • 与 Heroku 的“部署到 Heroku”按钮集成

贡献

通常的规则适用 - 分叉,发送拉取请求。请尝试并遵守现有的编码风格——它可能不是你的风格,但它是项目的风格,所以如果 PR 有“味道不好”,它们将被拒绝。具体来说,鉴于这是一个通过网络推送数据的应用程序,因此难以调试 - 大量日志记录和大量评论。严重地。很多。

执照

麻省理工学院(见许可证文件)

依赖项

核心 Trello API 集成是使用Richard Kolkovich (@sarumont)的 py-trello完成的 ,因此感谢他。他自然依赖来自 Kenneth Reitz 以及request-oauthlib的请求,因此感谢任何参与其中的任何人。

附加物

webhook API 适用于 Trello 模型 ID 的概念。这指的是被监视的对象 - 可能是板、列表、卡片等。委婉地说,获取这些 id 有点痛苦,所以我强烈建议使用 Harald Wartig的优秀Trello Explorer应用程序(@hwartig)。

我还建议在开发过程中使用ngrok来公开本地 Django 开发服务器。

至于开发本身 - 使用 virtualenv,从 requirements.txt 安装依赖项并设置环境变量。如果这对你没有任何意义——恐怕你还有很多东西要学。

部署到 Heroku

TODO:编写适当的文档

https://www.herokucdn.com/deploy/button.png

这个 repo 包含一个测试应用程序,可以使用他们的 Deploy 按钮直接部署到 Heroku。这个应用程序会将 Trello 更新直接传送到 Hipchat 房间。您需要以下信息才能设置和配置应用程序:

TRELLO_API_KEYTRELLO_API_SECRET,您可以从这里获得 - https://trello.com/1/appKey/generate HIPCHAT_API_TOKENHIPCHAT_ROOM_ID,您可以从 hipchat.com 获得

此外,部署应用程序后,您需要设置CALLBACK_DOMAIN环境设置。这应该设置为 <app_name>.herokuapp.com 域,一旦 Heroku 部署它就可用。

推荐的黑客方法 (IMO) 是设置 Heroku 应用程序,并将其用作您的主要 git 远程 - 在本地将其拉下,更改相关模板,然后推送回 Heroku。如果您实际上是在添加功能,请按照上面的贡献 说明进行操作。

项目详情


下载文件

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

源分布

django-trello-webhooks-0.3.tar.gz (21.9 kB 查看哈希)

已上传 source

内置发行版

django_trello_webhooks-0.3-py2-none-any.whl (38.5 kB 查看哈希

已上传 2 7

django-trello-webhooks-0.3.macosx-10.6-x86_64.tar.gz (34.2 kB 查看哈希)

已上传 any