python-zulip-api/zulip/integrations/trello/zulip_trello.py
Eeshan Garg 1de6613825 integrations/trello: Stop using config files in the Trello script.
A few users have complained about how hard it is to find the
Trello script on their systems after installing the `zulip`
package. One way to solve this issue is to make the Trello
script a part of the exported console scripts in the zulip
package, which would mean that the user would not have to
navigate to a particular directory in order to find the script,
but could run it from a terminal directly.

However, to make this happen, we need to minimize the script's
reliance on external configuration files, because we don't want
the user to have to figure out where the config file lives.
2018-09-25 22:28:25 -02:30

161 lines
4.4 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 log_webhook_info(options: argparse.Namespace, id_webhook: str) -> None:
"""log_webhook_info
Log webhook info in csv file for possible future use
:options: argparse.Namespace arguments
:id_webhook: str Trello webhook id
"""
with open('zulip_trello_webhooks.csv', 'a') as webhooks_file:
webhooks_file.write(
'{},{}\n'.format(
options.trello_board_name,
id_webhook
)
)
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)
# The webhook was successfully created,
# Log informations for possible future needs
print('Logging webhook information')
log_webhook_info(options, id_webhook)
print('Success! The webhook for the {} Trello board was successfully created.'.format(
options.trello_board_name))
print('\nYou can find the webhooks information in the zulip_trello_webhooks.csv file.')
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()