python-zulip-api/zulip/integrations/trello/zulip_trello.py

149 lines
4.1 KiB
Python
Executable file

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# An easy Trello integration for Zulip.
import sys
import argparse
try:
import requests
except ImportError:
print("Error: Please install the python requests library before running this script:")
print("http://docs.python-requests.org/en/master/user/install/")
sys.exit(1)
def get_model_id(options):
"""get_model_id
Get Model Id from Trello API
:options: argparse.Namespace arguments
:returns: str id_model Trello board idModel
"""
trello_api_url = 'https://api.trello.com/1/board/{}'.format(
options.trello_board_id
)
params = {
'key': options.trello_api_key,
'token': options.trello_token,
}
trello_response = requests.get(
trello_api_url,
params=params
)
if trello_response.status_code is not 200:
print('Error: Can\'t get the idModel. Please check the configuration')
sys.exit(1)
board_info_json = trello_response.json()
return board_info_json['id']
def get_webhook_id(options, id_model):
"""get_webhook_id
Get webhook id from Trello API
:options: argparse.Namespace arguments
:id_model: str Trello board idModel
:returns: str id_webhook Trello webhook id
"""
trello_api_url = 'https://api.trello.com/1/webhooks/'
data = {
'key': options.trello_api_key,
'token': options.trello_token,
'description': 'Webhook for Zulip integration (From Trello {} to Zulip)'.format(
options.trello_board_name,
),
'callbackURL': options.zulip_webhook_url,
'idModel': id_model
}
trello_response = requests.post(
trello_api_url,
data=data
)
if trello_response.status_code is not 200:
print('Error: Can\'t create the Webhook:', trello_response.text)
sys.exit(1)
webhook_info_json = trello_response.json()
return webhook_info_json['id']
def create_webhook(options):
"""create_webhook
Create Trello webhook
:options: argparse.Namespace arguments
"""
# first, we need to get the idModel
print('Getting Trello idModel for the {} board...'.format(options.trello_board_name))
id_model = get_model_id(options)
if id_model:
print('Success! The idModel is', id_model)
id_webhook = get_webhook_id(options, id_model)
if id_webhook:
print('Success! The webhook ID is', id_webhook)
print('Success! The webhook for the {} Trello board was successfully created.'.format(
options.trello_board_name))
def main():
description = """
zulip_trello.py is a handy little script that allows Zulip users to
quickly set up a Trello webhook.
Note: The Trello webhook instructions available on your Zulip server
may be outdated. Please make sure you follow the updated instructions
at <https://zulipchat.com/integrations/doc/trello>.
"""
parser = argparse.ArgumentParser(description=description)
parser.add_argument('--trello-board-name',
required=True,
help='The Trello board name.')
parser.add_argument('--trello-board-id',
required=True,
help=('The Trello board short ID. Can usually be found '
'in the URL of the Trello board.'))
parser.add_argument('--trello-api-key',
required=True,
help=('Visit https://trello.com/1/appkey/generate to generate '
'an APPLICATION_KEY (need to be logged into Trello).'))
parser.add_argument('--trello-token',
required=True,
help=('Visit https://trello.com/1/appkey/generate and under '
'`Developer API Keys`, click on `Token` and generate '
'a Trello access token.'))
parser.add_argument('--zulip-webhook-url',
required=True,
help='The webhook URL that Trello will query.')
options = parser.parse_args()
create_webhook(options)
if __name__ == '__main__':
main()