From 65d2f44d74ad2f981aaf2071765adef651a9deeb Mon Sep 17 00:00:00 2001 From: sameerchoubey Date: Sat, 4 May 2019 02:18:41 +0530 Subject: [PATCH] webhooks/codebase: Implementing Codebase Webhook using Event Hook API. --- static/images/integrations/codebase/001.png | Bin 56680 -> 14578 bytes zerver/lib/integrations.py | 1 + zerver/webhooks/codebase/__init__.py | 0 zerver/webhooks/codebase/doc.md | 16 ++++ .../codebase/fixtures/ticket_creation.json | 4 + .../codebase/fixtures/ticket_update.json | 4 + zerver/webhooks/codebase/tests.py | 18 ++++ zerver/webhooks/codebase/view.py | 83 ++++++++++++++++++ 8 files changed, 126 insertions(+) create mode 100644 zerver/webhooks/codebase/__init__.py create mode 100644 zerver/webhooks/codebase/doc.md create mode 100644 zerver/webhooks/codebase/fixtures/ticket_creation.json create mode 100644 zerver/webhooks/codebase/fixtures/ticket_update.json create mode 100644 zerver/webhooks/codebase/tests.py create mode 100644 zerver/webhooks/codebase/view.py diff --git a/static/images/integrations/codebase/001.png b/static/images/integrations/codebase/001.png index bd4abb494833b091a056eb4e1195a9f02d4eba40..6e5d97e006acf5aa63b0f1b83f44aa31b40d4cb9 100644 GIT binary patch literal 14578 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 x70;~GiH`rrhL}axRQJd`qdjJLH%m@W_ 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 ab%D^x$=p4+#7^~~(Z6G)Q?2Fv=sy5u>ZAey diff --git a/zerver/lib/integrations.py b/zerver/lib/integrations.py index 4e9a2e4ac564e9..7c045446b8dcec 100644 --- a/zerver/lib/integrations.py +++ b/zerver/lib/integrations.py @@ -260,6 +260,7 @@ def __init__(self, name: str, *args: Any, **kwargs: Any) -> None: WebhookIntegration('circleci', ['continuous-integration'], display_name='CircleCI'), WebhookIntegration('clubhouse', ['project-management']), WebhookIntegration('codeship', ['continuous-integration', 'deployment']), + WebhookIntegration('codebase', ['project-management'], display_name='Codebase'), WebhookIntegration('crashlytics', ['monitoring']), WebhookIntegration('dialogflow', ['customer-support'], display_name='Dialogflow'), WebhookIntegration('delighted', ['customer-support', 'marketing'], display_name='Delighted'), diff --git a/zerver/webhooks/codebase/__init__.py b/zerver/webhooks/codebase/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/zerver/webhooks/codebase/doc.md b/zerver/webhooks/codebase/doc.md new file mode 100644 index 00000000000000..ff5431b2dc4745 --- /dev/null +++ b/zerver/webhooks/codebase/doc.md @@ -0,0 +1,16 @@ +Get Zulip notifications for your for Codebase events! + +1. {!create-stream.md!} + +1. {!create-bot-construct-url-indented.md!} + +1. Go to your Codebase Dashboard, and click on the settings icon in + the top-right corner. Click on **Event Hooks**. + Now, click **New Event Webhook**. + +1. Set **Payload URL** to the URL constructed above, and click + **Create**. + +{!congrats.md!} + +![](/static/images/integrations/codebase/001.png) diff --git a/zerver/webhooks/codebase/fixtures/ticket_creation.json b/zerver/webhooks/codebase/fixtures/ticket_creation.json new file mode 100644 index 00000000000000..a8ed753b6f1ef6 --- /dev/null +++ b/zerver/webhooks/codebase/fixtures/ticket_creation.json @@ -0,0 +1,4 @@ +{ + "type": "ticket_creation", + "payload": "{\"id\":2,\"summary\":\"Adding the brand new feature of auto tuning to my webapp\",\"status\":{\"name\":\"New\",\"colour\":\"green\",\"closed\":false},\"milestone\":null,\"priority\":{\"name\":\"High\",\"colour\":\"orange\"},\"assignee\":{\"name\":\"Sameer Choubey\",\"username\":\"sameer-choubey-89\",\"email_address\":\"inadaptabl@firamax.club\"},\"reporter\":{\"name\":\"Sameer Choubey\",\"username\":\"sameer-choubey-89\",\"email_address\":\"inadaptabl@firamax.club\"},\"type\":{\"name\":\"Enhancement\",\"icon\":\"hat\"},\"category\":\"General\",\"description\":\"We'll first start with making a list of ideas that needed to be implemented.\",\"project\":{\"name\":\"Adding support for checking events.\",\"url\":\"http://travelalittle.codebasehq.com/projects/adding-support-for-checking-events\",\"status\":\"active\",\"account\":{\"name\":\"TravelAlIttle\",\"url\":\"https://travelalittle.codebasehq.com\",\"email\":\"inadaptabl@firamax.club\"}},\"url\":\"http://travelalittle.codebasehq.com/projects/adding-support-for-checking-events/tickets/2\"}" +} diff --git a/zerver/webhooks/codebase/fixtures/ticket_update.json b/zerver/webhooks/codebase/fixtures/ticket_update.json new file mode 100644 index 00000000000000..b6bb3b342d4dbc --- /dev/null +++ b/zerver/webhooks/codebase/fixtures/ticket_update.json @@ -0,0 +1,4 @@ +{ + "type": "ticket_update", + "payload": "{\"ticket\":{\"id\":2,\"summary\":\"Adding the brand new feature of auto tuning to my webapp\",\"status\":{\"name\":\"In Progress\",\"colour\":\"blue\",\"closed\":false},\"milestone\":null,\"priority\":{\"name\":\"Normal\",\"colour\":\"blue\"},\"assignee\":{\"name\":\"Sameer Choubey\",\"username\":\"sameer-choubey-89\",\"email_address\":\"inadaptabl@firamax.club\"},\"reporter\":{\"name\":\"Sameer Choubey\",\"username\":\"sameer-choubey-89\",\"email_address\":\"inadaptabl@firamax.club\"},\"type\":{\"name\":\"Feature\",\"icon\":\"construction\"},\"category\":\"Refactoring\",\"description\":\"We'll first start with making a list of ideas that needed to be implemented.\",\"project\":{\"name\":\"Adding support for checking events.\",\"url\":\"http://travelalittle.codebasehq.com/projects/adding-support-for-checking-events\",\"status\":\"active\",\"account\":{\"name\":\"TravelAlIttle\",\"url\":\"https://travelalittle.codebasehq.com\",\"email\":\"inadaptabl@firamax.club\"}},\"url\":\"http://travelalittle.codebasehq.com/projects/adding-support-for-checking-events/tickets/2\"},\"user\":{\"name\":\"Sameer Choubey\",\"username\":\"sameer-choubey-89\",\"email_address\":\"inadaptabl@firamax.club\"},\"content\":\"The second step is to outline the new idea with the help of block statements.\",\"changes\":{\"priority_id\":[\"High\",\"Normal\"],\"ticket_type_id\":[\"Enhancement\",\"Feature\"],\"category_id\":[\"General\",\"Refactoring\"],\"status_id\":[\"New\",\"In Progress\"]},\"commit\":null,\"attachments\":[]}" +} diff --git a/zerver/webhooks/codebase/tests.py b/zerver/webhooks/codebase/tests.py new file mode 100644 index 00000000000000..1d8977e55bbe39 --- /dev/null +++ b/zerver/webhooks/codebase/tests.py @@ -0,0 +1,18 @@ +from zerver.lib.test_classes import WebhookTestCase + +class CobebaseHookTests(WebhookTestCase): + STREAM_NAME = 'codebase' + URL_TEMPLATE = "/api/v1/external/codebase?&api_key={api_key}&stream={stream}" + FIXTURE_DIR_NAME = 'codebase' + + + def test_ticket_creation(self) -> None: + expected_topic = u"Adding the brand new feature of auto tuning to my webapp" + expected_message = u"A ticket of **[Enhancement](http://travelalittle.codebasehq.com/projects/adding-support-for-checking-events/tickets/2)** type and category **General** has been created by **Sameer Choubey**" + + self.send_and_test_stream_message('ticket_creation', expected_topic, expected_message) + + def test_ticket_update(self) -> None: + expected_topic = u"Adding the brand new feature of auto tuning to my webapp" + expected_message = u"Ticket with ID **[2](http://travelalittle.codebasehq.com/projects/adding-support-for-checking-events)**, category **Refactoring** has been updated by **Sameer Choubey**" + self.send_and_test_stream_message('ticket_update', expected_topic, expected_message) diff --git a/zerver/webhooks/codebase/view.py b/zerver/webhooks/codebase/view.py new file mode 100644 index 00000000000000..12ce351833994c --- /dev/null +++ b/zerver/webhooks/codebase/view.py @@ -0,0 +1,83 @@ +import json +from typing import Any, Dict, Iterable + +from django.http import HttpRequest, HttpResponse +from zerver.decorator import api_key_only_webhook_view +from zerver.lib.webhooks.common import check_send_webhook_message, \ + UnexpectedWebhookEventType +from zerver.lib.request import REQ, has_request_variables +from zerver.lib.response import json_success +from zerver.models import UserProfile + +def get_event_type(payload: Dict[str, Any]): + return (payload['type']) + +def get_topic_type(payload: Dict[str, Any]): + + if payload['type'] == "ticket_update": + payload = payload['payload'] + payload = json.loads(payload) + + return payload['ticket']['summary'] + else: + payload = payload['payload'] + payload = json.loads(payload) + + return payload['summary'] + +def ticket_creation(payload: Dict[str, Any], user_profile: UserProfile): + + payload = payload['payload'] + payload = json.loads(payload) + + type = payload['type']['name'] + name = payload['assignee']['name'] + category = payload['category'] + url = payload['url'] + + body = "A ticket of **[{}]({})** type and category **{}** has been created by **{}**".format(type, url, category, name) + + return body + +def ticket_update(payload: Dict[str, Any], user_profile: UserProfile): + payload = payload['payload'] + payload = json.loads(payload) + + id = payload['ticket']['id'] + type = payload['ticket']['category'] + name = payload['user']['name'] + url = payload['ticket']['project']['url'] + + body = "Ticket with ID **[{}]({})**, category **{}** has been updated by **{}**".format(id, url, type, name) + + return body + +CODEBASE_EVENT_MAPPER = { + "ticket_creation": ticket_creation, + "ticket_update": ticket_update +} + +@api_key_only_webhook_view('CodeBase') +@has_request_variables +def api_codebase_webhook( + request: HttpRequest, user_profile: UserProfile, + payload: Dict[str, Iterable[Dict[str, Any]]]=REQ(argument_type='body') +) -> HttpResponse: + + if payload is None: + return json_success() + + event = get_event_type(payload) + topic = get_topic_type(payload) + + if event is not None: + body_func = CODEBASE_EVENT_MAPPER.get(event) + + if body_func is None: + raise UnexpectedWebhookEventType('Cobdebase', event) + + body = body_func(payload, user_profile) # type : str + + check_send_webhook_message(request, user_profile, topic, body) + + return json_success()