python-zulip-api/zulip/integrations/trello/zulip_trello.py
Eeshan Garg 5210e79dbd integrations/trello: Stop logging to CSV file in Trello script.
The information logged to the CSV file is largely redundant, since
the ID of the webhook is already printed to the screen once a
webhook is setup correctly.

Since this is a script that the user is required to run
once, we should minimize its reliance on external files as much
as possible. This makes it easier to run the script when one
is SSH-ing into a server and doesn't really care about where
the script lives, for instance.
2018-09-25 22:28:25 -02:30

136 lines
3.7 KiB
Python
Executable file

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# An easy Trello integration for Zulip.
from __future__ import absolute_import
import sys
import argparse
import requests
def get_model_id(options: argparse.Namespace) -> str:
"""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: argparse.Namespace, id_model: str) -> str:
"""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: argparse.Namespace) -> None:
"""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() -> None:
parser = argparse.ArgumentParser()
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()