diff --git a/zerver/views/webhooks/bitbucket.py b/zerver/views/webhooks/bitbucket.py index 1a19f81e76..9f76011022 100644 --- a/zerver/views/webhooks/bitbucket.py +++ b/zerver/views/webhooks/bitbucket.py @@ -1,7 +1,6 @@ from __future__ import absolute_import -from six import text_type -from typing import Any, Mapping +from typing import Any, Mapping, Text from django.http import HttpRequest, HttpResponse @@ -17,7 +16,7 @@ from zerver.lib.webhooks.git import get_push_commits_event_message, SUBJECT_WITH @has_request_variables def api_bitbucket_webhook(request, user_profile, payload=REQ(validator=check_dict([])), stream=REQ(default='commits')): - # type: (HttpRequest, UserProfile, Mapping[text_type, Any], text_type) -> HttpResponse + # type: (HttpRequest, UserProfile, Mapping[Text, Any], Text) -> HttpResponse repository = payload['repository'] commits = [ diff --git a/zerver/views/webhooks/bitbucket2.py b/zerver/views/webhooks/bitbucket2.py index 29f37192ab..bf2cbfba4d 100644 --- a/zerver/views/webhooks/bitbucket2.py +++ b/zerver/views/webhooks/bitbucket2.py @@ -2,9 +2,8 @@ from __future__ import absolute_import import re from functools import partial -from six import text_type from six.moves import zip -from typing import Any, Callable, Optional +from typing import Any, Callable, Optional, Text from django.http import HttpRequest, HttpResponse from django.utils.translation import ugettext as _ from zerver.lib.actions import check_send_message @@ -63,7 +62,7 @@ def api_bitbucket2_webhook(request, user_profile, client, payload=REQ(argument_t return json_success() def get_subject_for_branch_specified_events(payload, branch_name=None): - # type: (Dict[str, Any], Optional[text_type]) -> text_type + # type: (Dict[str, Any], Optional[Text]) -> Text return SUBJECT_WITH_BRANCH_TEMPLATE.format( repo=get_repository_name(payload['repository']), branch=get_branch_name_for_push_event(payload) if branch_name is None else branch_name @@ -89,7 +88,7 @@ def get_subject(payload): return BITBUCKET_SUBJECT_TEMPLATE.format(repository_name=get_repository_name(payload['repository'])) def get_subject_based_on_type(payload, type): - # type: (Dict[str, Any], str) -> text_type + # type: (Dict[str, Any], str) -> Text if type.startswith('pull_request'): return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format( repo=get_repository_name(payload.get('repository')), @@ -137,7 +136,7 @@ def get_body_based_on_type(type): return GET_SINGLE_MESSAGE_BODY_DEPENDING_ON_TYPE_MAPPER.get(type) def get_push_bodies(payload): - # type: (Dict[str, Any]) -> List[text_type] + # type: (Dict[str, Any]) -> List[Text] messages_list = [] for change in payload['push']['changes']: potential_tag = (change['new'] or change['old'] or {}).get('type') @@ -152,14 +151,14 @@ def get_push_bodies(payload): return messages_list def get_remove_branch_push_body(payload, change): - # type: (Dict[str, Any], Dict[str, Any]) -> text_type + # type: (Dict[str, Any], Dict[str, Any]) -> Text return get_remove_branch_event_message( get_user_username(payload), change['old']['name'], ) def get_force_push_body(payload, change): - # type: (Dict[str, Any], Dict[str, Any]) -> text_type + # type: (Dict[str, Any], Dict[str, Any]) -> Text return get_force_push_commits_event_message( get_user_username(payload), change['links']['html']['href'], @@ -168,7 +167,7 @@ def get_force_push_body(payload, change): ) def get_normal_push_body(payload, change): - # type: (Dict[str, Any], Dict[str, Any]) -> text_type + # type: (Dict[str, Any], Dict[str, Any]) -> Text commits_data = [{ 'sha': commit.get('hash'), 'url': commit.get('links').get('html').get('href'), @@ -193,7 +192,7 @@ def get_fork_body(payload): ) def get_commit_comment_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text comment = payload.get('comment') action = u'[commented]({})'.format(comment['links']['html']['href']) return get_commits_comment_action_message( @@ -220,12 +219,12 @@ def get_commit_status_changed_body(payload): ) def get_issue_commented_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text action = '[commented]({}) on'.format(payload['comment']['links']['html']['href']) return get_issue_action_body(payload, action) def get_issue_action_body(payload, action): - # type: (Dict[str, Any], str) -> text_type + # type: (Dict[str, Any], str) -> Text issue = payload['issue'] assignee = None message = None @@ -244,7 +243,7 @@ def get_issue_action_body(payload, action): ) def get_pull_request_action_body(payload, action): - # type: (Dict[str, Any], str) -> text_type + # type: (Dict[str, Any], str) -> Text pull_request = payload['pullrequest'] return get_pull_request_event_message( get_user_username(payload), @@ -254,7 +253,7 @@ def get_pull_request_action_body(payload, action): ) def get_pull_request_created_or_updated_body(payload, action): - # type: (Dict[str, Any], str) -> text_type + # type: (Dict[str, Any], str) -> Text pull_request = payload['pullrequest'] assignee = None if pull_request.get('reviewers'): @@ -272,17 +271,17 @@ def get_pull_request_created_or_updated_body(payload, action): ) def get_pull_request_comment_created_action_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text action = '[commented]({})'.format(payload['comment']['links']['html']['href']) return get_pull_request_comment_action_body(payload, action) def get_pull_request_deleted_or_updated_comment_action_body(payload, action): - # type: (Dict[str, Any], text_type) -> text_type + # type: (Dict[str, Any], Text) -> Text action = "{} a [comment]({})".format(action, payload['comment']['links']['html']['href']) return get_pull_request_comment_action_body(payload, action) def get_pull_request_comment_action_body(payload, action): - # type: (Dict[str, Any], str) -> text_type + # type: (Dict[str, Any], str) -> Text action += ' on' return get_pull_request_event_message( get_user_username(payload), @@ -293,7 +292,7 @@ def get_pull_request_comment_action_body(payload, action): ) def get_push_tag_body(payload, change): - # type: (Dict[str, Any], Dict[str, Any]) -> text_type + # type: (Dict[str, Any], Dict[str, Any]) -> Text if change.get('created'): tag = change.get('new') action = 'pushed' diff --git a/zerver/views/webhooks/circleci.py b/zerver/views/webhooks/circleci.py index 8265bd3357..2ceb229d9b 100644 --- a/zerver/views/webhooks/circleci.py +++ b/zerver/views/webhooks/circleci.py @@ -2,8 +2,7 @@ from __future__ import absolute_import from django.http import HttpRequest, HttpResponse -from six import text_type -from typing import Any +from typing import Any, Text from zerver.lib.actions import check_send_message from zerver.lib.response import json_success, json_error @@ -22,7 +21,7 @@ FAILED_STATUS = 'failed' @has_request_variables def api_circleci_webhook(request, user_profile, client, payload=REQ(argument_type='body'), stream=REQ(default='circleci')): - # type: (HttpRequest, UserProfile, Client, Dict[str, Any], text_type) -> HttpResponse + # type: (HttpRequest, UserProfile, Client, Dict[str, Any], Text) -> HttpResponse payload = payload['payload'] subject = get_subject(payload) body = get_body(payload) @@ -31,11 +30,11 @@ def api_circleci_webhook(request, user_profile, client, payload=REQ(argument_typ return json_success() def get_subject(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return CIRCLECI_SUBJECT_TEMPLATE.format(repository_name=payload['reponame']) def get_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text data = { 'build_url': payload['build_url'], 'username': payload['username'], @@ -45,7 +44,7 @@ def get_body(payload): return CIRCLECI_MESSAGE_TEMPLATE.format(**data) def get_status(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text status = payload['status'] if payload['previous']['status'] == FAILED_STATUS and status == FAILED_STATUS: return u'is still failing' diff --git a/zerver/views/webhooks/crashlytics.py b/zerver/views/webhooks/crashlytics.py index ac3b4e1e5d..046e8f9a9d 100644 --- a/zerver/views/webhooks/crashlytics.py +++ b/zerver/views/webhooks/crashlytics.py @@ -6,8 +6,7 @@ from zerver.lib.response import json_success, json_error from zerver.decorator import REQ, has_request_variables, api_key_only_webhook_view from zerver.models import Client, UserProfile from django.http import HttpRequest, HttpResponse -from six import text_type -from typing import Any +from typing import Any, Text CRASHLYTICS_SUBJECT_TEMPLATE = '{display_id}: {title}' CRASHLYTICS_MESSAGE_TEMPLATE = '[Issue]({url}) impacts at least {impacted_devices_count} device(s).' @@ -19,7 +18,7 @@ VERIFICATION_EVENT = 'verification' @has_request_variables def api_crashlytics_webhook(request, user_profile, client, payload=REQ(argument_type='body'), stream=REQ(default='crashlytics')): - # type: (HttpRequest, UserProfile, Client, Dict[str, Any], text_type) -> HttpResponse + # type: (HttpRequest, UserProfile, Client, Dict[str, Any], Text) -> HttpResponse try: event = payload['event'] if event == VERIFICATION_EVENT: diff --git a/zerver/views/webhooks/deskdotcom.py b/zerver/views/webhooks/deskdotcom.py index e769e6cd92..41120b4678 100644 --- a/zerver/views/webhooks/deskdotcom.py +++ b/zerver/views/webhooks/deskdotcom.py @@ -6,7 +6,7 @@ from zerver.lib.actions import check_send_message from zerver.lib.response import json_success from zerver.decorator import REQ, has_request_variables, authenticated_rest_api_view -from six import text_type +from typing import Text # Desk.com's integrations all make the user supply a template, where it fills # in stuff like {{customer.name}} and posts the result as a "data" parameter. @@ -18,7 +18,7 @@ from six import text_type def api_deskdotcom_webhook(request, user_profile, data=REQ(), topic=REQ(default="Desk.com notification"), stream=REQ(default="desk.com")): - # type: (HttpRequest, UserProfile, text_type, text_type, text_type) -> HttpResponse + # type: (HttpRequest, UserProfile, Text, Text, Text) -> HttpResponse check_send_message(user_profile, get_client("ZulipDeskWebhook"), "stream", [stream], topic, data) return json_success() diff --git a/zerver/views/webhooks/freshdesk.py b/zerver/views/webhooks/freshdesk.py index 612f194604..4e0d67990d 100644 --- a/zerver/views/webhooks/freshdesk.py +++ b/zerver/views/webhooks/freshdesk.py @@ -13,8 +13,7 @@ from zerver.decorator import REQ, has_request_variables, authenticated_rest_api_ import logging import ujson -from six import text_type -from typing import Any, Dict, Optional, Tuple, Union +from typing import Any, Dict, Optional, Tuple, Union, Text class TicketDict(dict): @@ -116,7 +115,7 @@ def format_freshdesk_ticket_creation_message(ticket): @has_request_variables def api_freshdesk_webhook(request, user_profile, payload=REQ(argument_type='body'), stream=REQ(default='freshdesk')): - # type: (HttpRequest, UserProfile, Dict[str, Any], text_type) -> HttpResponse + # type: (HttpRequest, UserProfile, Dict[str, Any], Text) -> HttpResponse ticket_data = payload["freshdesk_webhook"] required_keys = [ diff --git a/zerver/views/webhooks/github.py b/zerver/views/webhooks/github.py index 29840d45e6..3509399824 100644 --- a/zerver/views/webhooks/github.py +++ b/zerver/views/webhooks/github.py @@ -14,8 +14,7 @@ import logging import re import ujson -from six import text_type -from typing import Any, Mapping, Optional, Sequence, Tuple +from typing import Any, Mapping, Optional, Sequence, Tuple, Text from zerver.lib.str_utils import force_str from django.http import HttpRequest, HttpResponse @@ -23,14 +22,14 @@ ZULIP_TEST_REPO_NAME = 'zulip-test' ZULIP_TEST_REPO_ID = 6893087 def is_test_repository(repository): - # type: (Mapping[text_type, Any]) -> bool + # type: (Mapping[Text, Any]) -> bool return repository['name'] == ZULIP_TEST_REPO_NAME and repository['id'] == ZULIP_TEST_REPO_ID class UnknownEventType(Exception): pass def github_pull_request_content(payload): - # type: (Mapping[text_type, Any]) -> text_type + # type: (Mapping[Text, Any]) -> Text pull_request = payload['pull_request'] action = get_pull_request_or_issue_action(payload) @@ -53,7 +52,7 @@ def github_pull_request_content(payload): ) def github_issues_content(payload): - # type: (Mapping[text_type, Any]) -> text_type + # type: (Mapping[Text, Any]) -> Text issue = payload['issue'] action = get_pull_request_or_issue_action(payload) @@ -74,7 +73,7 @@ def github_issues_content(payload): ) def github_object_commented_content(payload, type): - # type: (Mapping[text_type, Any], text_type) -> text_type + # type: (Mapping[Text, Any], Text) -> Text comment = payload['comment'] issue = payload['issue'] action = u'[commented]({}) on'.format(comment['html_url']) @@ -89,17 +88,17 @@ def github_object_commented_content(payload, type): ) def get_pull_request_or_issue_action(payload): - # type: (Mapping[text_type, Any]) -> text_type + # type: (Mapping[Text, Any]) -> Text return 'synchronized' if payload['action'] == 'synchronize' else payload['action'] def get_pull_request_or_issue_assignee(object_payload): - # type: (Mapping[text_type, Any]) -> text_type + # type: (Mapping[Text, Any]) -> Text assignee_dict = object_payload.get('assignee') if assignee_dict: return assignee_dict.get('login') def get_pull_request_or_issue_subject(repository, payload_object, type): - # type: (Mapping[text_type, Any], Mapping[text_type, Any], text_type) -> text_type + # type: (Mapping[Text, Any], Mapping[Text, Any], Text) -> Text return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format( repo=repository['name'], type=type, @@ -108,12 +107,12 @@ def get_pull_request_or_issue_subject(repository, payload_object, type): ) def github_generic_subject(noun, topic_focus, blob): - # type: (text_type, text_type, Mapping[text_type, Any]) -> text_type + # type: (Text, Text, Mapping[Text, Any]) -> Text # issue and pull_request objects have the same fields we're interested in return u'%s: %s %d: %s' % (topic_focus, noun, blob['number'], blob['title']) def api_github_v1(user_profile, event, payload, branches, stream, **kwargs): - # type: (UserProfile, text_type, Mapping[text_type, Any], text_type, text_type, **Any) -> Tuple[text_type, text_type, text_type] + # type: (UserProfile, Text, Mapping[Text, Any], Text, Text, **Any) -> Tuple[Text, Text, Text] """ processes github payload with version 1 field specification `payload` comes in unmodified from github @@ -126,7 +125,7 @@ def api_github_v1(user_profile, event, payload, branches, stream, **kwargs): def api_github_v2(user_profile, event, payload, branches, default_stream, commit_stream, issue_stream, topic_focus = None): - # type: (UserProfile, text_type, Mapping[text_type, Any], text_type, text_type, text_type, text_type, Optional[text_type]) -> Tuple[text_type, text_type, text_type] + # type: (UserProfile, Text, Mapping[Text, Any], Text, Text, Text, Text, Optional[Text]) -> Tuple[Text, Text, Text] """ processes github payload with version 2 field specification `payload` comes in unmodified from github @@ -205,7 +204,7 @@ def api_github_landing(request, user_profile, event=REQ(), exclude_commits=REQ(converter=flexible_boolean, default=False), emphasize_branch_in_topic=REQ(converter=flexible_boolean, default=False), ): - # type: (HttpRequest, UserProfile, text_type, Mapping[text_type, Any], text_type, text_type, int, text_type, text_type, bool, bool, bool, bool) -> HttpResponse + # type: (HttpRequest, UserProfile, Text, Mapping[Text, Any], Text, Text, int, Text, Text, bool, bool, bool, bool) -> HttpResponse repository = payload['repository'] @@ -280,7 +279,7 @@ def api_github_landing(request, user_profile, event=REQ(), message_content=content) def build_message_from_gitlog(user_profile, name, ref, commits, before, after, url, pusher, forced=None, created=None): - # type: (UserProfile, text_type, text_type, List[Dict[str, str]], text_type, text_type, text_type, text_type, Optional[text_type], Optional[text_type]) -> Tuple[text_type, text_type] + # type: (UserProfile, Text, Text, List[Dict[str, str]], Text, Text, Text, Text, Optional[Text], Optional[Text]) -> Tuple[Text, Text] short_ref = re.sub(r'^refs/heads/', '', ref) subject = SUBJECT_WITH_BRANCH_TEMPLATE.format(repo=name, branch=short_ref) diff --git a/zerver/views/webhooks/github_webhook.py b/zerver/views/webhooks/github_webhook.py index 996fab1f32..5a04915baa 100644 --- a/zerver/views/webhooks/github_webhook.py +++ b/zerver/views/webhooks/github_webhook.py @@ -1,8 +1,7 @@ from __future__ import absolute_import import re from functools import partial -from six import text_type -from typing import Any, Callable +from typing import Any, Callable, Text from django.http import HttpRequest, HttpResponse from zerver.lib.actions import check_send_message from zerver.lib.response import json_success @@ -18,7 +17,7 @@ class UnknownEventType(Exception): pass def get_opened_or_update_pull_request_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text pull_request = payload['pull_request'] action = payload['action'] if action == 'synchronized': @@ -38,7 +37,7 @@ def get_opened_or_update_pull_request_body(payload): ) def get_closed_pull_request_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text pull_request = payload['pull_request'] action = 'merged' if pull_request['merged'] else 'closed without merge' return get_pull_request_event_message( @@ -48,7 +47,7 @@ def get_closed_pull_request_body(payload): ) def get_membership_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text action = payload['action'] member = payload['member'] scope = payload['scope'] @@ -64,7 +63,7 @@ def get_membership_body(payload): ) def get_member_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return u"{} {} [{}]({}) to [{}]({})".format( get_sender_name(payload), payload['action'], @@ -75,7 +74,7 @@ def get_member_body(payload): ) def get_issue_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text action = payload['action'] issue = payload['issue'] assignee = issue['assignee'] @@ -89,7 +88,7 @@ def get_issue_body(payload): ) def get_issue_comment_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text action = payload['action'] comment = payload['comment'] issue = payload['issue'] @@ -109,7 +108,7 @@ def get_issue_comment_body(payload): ) def get_fork_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text forkee = payload['forkee'] return u"{} forked [{}]({})".format( get_sender_name(payload), @@ -118,19 +117,19 @@ def get_fork_body(payload): ) def get_deployment_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return u'{} created new deployment'.format( get_sender_name(payload), ) def get_change_deployment_status_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return u'Deployment changed status to {}'.format( payload['deployment_status']['state'], ) def get_create_or_delete_body(payload, action): - # type: (Dict[str, Any], text_type) -> text_type + # type: (Dict[str, Any], Text) -> Text ref_type = payload['ref_type'] return u'{} {} {} {}'.format( get_sender_name(payload), @@ -140,7 +139,7 @@ def get_create_or_delete_body(payload, action): ).rstrip() def get_commit_comment_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text comment = payload['comment'] comment_url = comment['html_url'] commit_url = comment_url.split('#', 1)[0] @@ -154,7 +153,7 @@ def get_commit_comment_body(payload): ) def get_push_tags_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return get_push_tag_event_message( get_sender_name(payload), get_tag_name_from_ref(payload['ref']), @@ -162,7 +161,7 @@ def get_push_tags_body(payload): ) def get_push_commits_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text commits_data = [{ 'sha': commit['id'], 'url': commit['url'], @@ -176,14 +175,14 @@ def get_push_commits_body(payload): ) def get_public_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return u"{} made [the repository]({}) public".format( get_sender_name(payload), payload['repository']['html_url'], ) def get_wiki_pages_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text wiki_page_info_template = u"* {action} [{title}]({url})\n" wiki_info = u'' for page in payload['pages']: @@ -195,14 +194,14 @@ def get_wiki_pages_body(payload): return u"{}:\n{}".format(get_sender_name(payload), wiki_info.rstrip()) def get_watch_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return u"{} starred [the repository]({})".format( get_sender_name(payload), payload['repository']['html_url'] ) def get_repository_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return u"{} {} [the repository]({})".format( get_sender_name(payload), payload.get('action'), @@ -210,21 +209,21 @@ def get_repository_body(payload): ) def get_add_team_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return u"[The repository]({}) was added to team {}".format( payload['repository']['html_url'], payload['team']['name'] ) def get_release_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return u"{} published [the release]({})".format( get_sender_name(payload), payload['release']['html_url'], ) def get_page_build_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text build = payload['build'] action = build['status'] if action == 'null': @@ -243,7 +242,7 @@ def get_page_build_body(payload): ) def get_status_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text if payload['target_url']: status = '[{}]({})'.format( payload['state'], @@ -258,7 +257,7 @@ def get_status_body(payload): ) def get_pull_request_review_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return get_pull_request_event_message( get_sender_name(payload), 'submitted', @@ -267,7 +266,7 @@ def get_pull_request_review_body(payload): ) def get_pull_request_review_comment_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text action = payload['action'] message = None if action == 'created': @@ -282,19 +281,19 @@ def get_pull_request_review_comment_body(payload): ) def get_repository_name(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return payload['repository']['name'] def get_sender_name(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return payload['sender']['login'] def get_branch_name_from_ref(ref_string): - # type: (text_type) -> text_type + # type: (Text) -> Text return re.sub(r'^refs/heads/', '', ref_string) def get_tag_name_from_ref(ref_string): - # type: (text_type) -> text_type + # type: (Text) -> Text return re.sub(r'^refs/tags/', '', ref_string) def is_commit_push_event(payload): @@ -302,7 +301,7 @@ def is_commit_push_event(payload): return bool(re.match(r'^refs/heads/', payload['ref'])) def get_subject_based_on_type(payload, event): - # type: (Dict[str, Any], text_type) -> text_type + # type: (Dict[str, Any], Text) -> Text if 'pull_request' in event: return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format( repo=get_repository_name(payload), @@ -368,7 +367,7 @@ EVENT_FUNCTION_MAPPER = { def api_github_webhook( request, user_profile, client, payload=REQ(argument_type='body'), stream=REQ(default='github')): - # type: (HttpRequest, UserProfile, Client, Dict[str, Any], text_type) -> HttpResponse + # type: (HttpRequest, UserProfile, Client, Dict[str, Any], Text) -> HttpResponse event = get_event(request, payload) subject = get_subject_based_on_type(payload, event) body = get_body_function_based_on_type(event)(payload) diff --git a/zerver/views/webhooks/gitlab.py b/zerver/views/webhooks/gitlab.py index 7ea4e5fe55..43755701f5 100644 --- a/zerver/views/webhooks/gitlab.py +++ b/zerver/views/webhooks/gitlab.py @@ -10,8 +10,7 @@ from zerver.lib.webhooks.git import get_push_commits_event_message, EMPTY_SHA,\ from zerver.models import Client, UserProfile from django.http import HttpRequest, HttpResponse -from six import text_type -from typing import Dict, Any, Iterable, Optional +from typing import Dict, Any, Iterable, Optional, Text class UnknownEventType(Exception): @@ -19,13 +18,13 @@ class UnknownEventType(Exception): def get_push_event_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text if payload.get('after') == EMPTY_SHA: return get_remove_branch_event_body(payload) return get_normal_push_event_body(payload) def get_normal_push_event_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text compare_url = u'{}/compare/{}...{}'.format( get_repository_homepage(payload), payload['before'], @@ -49,14 +48,14 @@ def get_normal_push_event_body(payload): ) def get_remove_branch_event_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return get_remove_branch_event_message( get_user_name(payload), get_branch_name(payload) ) def get_tag_push_event_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return get_push_tag_event_message( get_user_name(payload), get_tag_name(payload), @@ -64,7 +63,7 @@ def get_tag_push_event_body(payload): ) def get_issue_created_event_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return get_issue_event_message( get_issue_user_name(payload), 'created', @@ -75,7 +74,7 @@ def get_issue_created_event_body(payload): ) def get_issue_event_body(payload, action): - # type: (Dict[str, Any], text_type) -> text_type + # type: (Dict[str, Any], Text) -> Text return get_issue_event_message( get_issue_user_name(payload), action, @@ -84,13 +83,13 @@ def get_issue_event_body(payload, action): ) def get_merge_request_updated_event_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text if payload.get('object_attributes').get('oldrev'): return get_merge_request_event_body(payload, "added commit(s) to") return get_merge_request_open_or_updated_body(payload, "updated") def get_merge_request_event_body(payload, action): - # type: (Dict[str, Any], text_type) -> text_type + # type: (Dict[str, Any], Text) -> Text pull_request = payload.get('object_attributes') return get_pull_request_event_message( get_issue_user_name(payload), @@ -101,7 +100,7 @@ def get_merge_request_event_body(payload, action): ) def get_merge_request_open_or_updated_body(payload, action): - # type: (Dict[str, Any], text_type) -> text_type + # type: (Dict[str, Any], Text) -> Text pull_request = payload.get('object_attributes') return get_pull_request_event_message( get_issue_user_name(payload), @@ -116,13 +115,13 @@ def get_merge_request_open_or_updated_body(payload, action): ) def get_objects_assignee(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text assignee_object = payload.get('assignee') if assignee_object: return assignee_object.get('name') def get_commented_commit_event_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text comment = payload.get('object_attributes') action = u'[commented]({})'.format(comment['url']) return get_commits_comment_action_message( @@ -134,7 +133,7 @@ def get_commented_commit_event_body(payload): ) def get_commented_merge_request_event_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text comment = payload.get('object_attributes') action = u'[commented]({}) on'.format(comment['url']) url = u'{}/merge_requests/{}'.format( @@ -151,7 +150,7 @@ def get_commented_merge_request_event_body(payload): ) def get_commented_issue_event_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text comment = payload.get('object_attributes') action = u'[commented]({}) on'.format(comment['url']) url = u'{}/issues/{}'.format( @@ -168,7 +167,7 @@ def get_commented_issue_event_body(payload): ) def get_commented_snippet_event_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text comment = payload.get('object_attributes') action = u'[commented]({}) on'.format(comment['url']) url = u'{}/snippets/{}'.format( @@ -185,7 +184,7 @@ def get_commented_snippet_event_body(payload): ) def get_wiki_page_event_body(payload, action): - # type: (Dict[str, Any], text_type) -> text_type + # type: (Dict[str, Any], Text) -> Text return u"{} {} [Wiki Page \"{}\"]({}).".format( get_issue_user_name(payload), action, @@ -194,7 +193,7 @@ def get_wiki_page_event_body(payload, action): ) def get_build_hook_event_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text build_status = payload.get('build_status') if build_status == 'created': action = 'was created' @@ -209,7 +208,7 @@ def get_build_hook_event_body(payload): ) def get_pipeline_event_body(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text pipeline_status = payload.get('object_attributes').get('status') if pipeline_status == 'pending': action = 'was created' @@ -224,35 +223,35 @@ def get_pipeline_event_body(payload): return u"Pipeline {} with build(s):\n{}.".format(action, builds_status[:-1]) def get_repo_name(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return payload['project']['name'] def get_user_name(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return payload['user_name'] def get_issue_user_name(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return payload['user']['name'] def get_repository_homepage(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return payload['repository']['homepage'] def get_branch_name(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return payload['ref'].replace('refs/heads/', '') def get_tag_name(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return payload['ref'].replace('refs/tags/', '') def get_object_iid(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return payload['object_attributes']['iid'] def get_object_url(payload): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text return payload['object_attributes']['url'] EVENT_FUNCTION_MAPPER = { @@ -281,7 +280,7 @@ EVENT_FUNCTION_MAPPER = { def api_gitlab_webhook(request, user_profile, client, stream=REQ(default='gitlab'), payload=REQ(argument_type='body')): - # type: (HttpRequest, UserProfile, Client, text_type, Dict[str, Any]) -> HttpResponse + # type: (HttpRequest, UserProfile, Client, Text, Dict[str, Any]) -> HttpResponse event = get_event(request, payload) body = get_body_based_on_event(event)(payload) subject = get_subject_based_on_event(event, payload) @@ -293,7 +292,7 @@ def get_body_based_on_event(event): return EVENT_FUNCTION_MAPPER[event] def get_subject_based_on_event(event, payload): - # type: (str, Dict[str, Any]) -> text_type + # type: (str, Dict[str, Any]) -> Text if event == 'Push Hook': return u"{} / {}".format(get_repo_name(payload), get_branch_name(payload)) elif event == 'Build Hook': diff --git a/zerver/views/webhooks/helloworld.py b/zerver/views/webhooks/helloworld.py index 8a8d6db320..a8dc8464c8 100644 --- a/zerver/views/webhooks/helloworld.py +++ b/zerver/views/webhooks/helloworld.py @@ -8,15 +8,14 @@ from zerver.lib.validator import check_dict, check_string from zerver.models import Client, UserProfile from django.http import HttpRequest, HttpResponse -from six import text_type -from typing import Dict, Any, Iterable, Optional +from typing import Dict, Any, Iterable, Optional, Text @api_key_only_webhook_view('HelloWorld') @has_request_variables def api_helloworld_webhook(request, user_profile, client, payload=REQ(argument_type='body'), stream=REQ(default='test'), topic=REQ(default='Hello World')): - # type: (HttpRequest, UserProfile, Client, Dict[str, Iterable[Dict[str, Any]]], text_type, Optional[text_type]) -> HttpResponse + # type: (HttpRequest, UserProfile, Client, Dict[str, Iterable[Dict[str, Any]]], Text, Optional[Text]) -> HttpResponse # construct the body of the message body = 'Hello! I am happy to be here! :smile:' diff --git a/zerver/views/webhooks/jira.py b/zerver/views/webhooks/jira.py index e610b476e4..35b57608db 100644 --- a/zerver/views/webhooks/jira.py +++ b/zerver/views/webhooks/jira.py @@ -1,6 +1,6 @@ # Webhooks for external integrations. from __future__ import absolute_import -from typing import Any, Optional +from typing import Any, Optional, Text from django.utils.translation import ugettext as _ from django.db.models import Q @@ -12,8 +12,6 @@ from zerver.lib.actions import check_send_message from zerver.lib.response import json_success, json_error from zerver.decorator import api_key_only_webhook_view, has_request_variables, REQ -from six import text_type - import logging import re import ujson @@ -92,7 +90,7 @@ def convert_jira_markup(content, realm): def api_jira_webhook(request, user_profile, client, payload=REQ(argument_type='body'), stream=REQ(default='jira')): - # type: (HttpRequest, UserProfile, Client, Dict[str, Any], text_type) -> HttpResponse + # type: (HttpRequest, UserProfile, Client, Dict[str, Any], Text) -> HttpResponse def get_in(payload, keys, default=''): # type: (Dict[str, Any], List[str], str) -> Any try: diff --git a/zerver/views/webhooks/librato.py b/zerver/views/webhooks/librato.py index f8369ca29d..b4f50e07f0 100644 --- a/zerver/views/webhooks/librato.py +++ b/zerver/views/webhooks/librato.py @@ -1,7 +1,6 @@ from __future__ import absolute_import -from typing import Any, Optional, Callable, Tuple -from six import text_type +from typing import Any, Optional, Callable, Tuple, Text from six.moves import zip from django.utils.translation import ugettext as _ @@ -28,17 +27,17 @@ class LibratoWebhookParser(object): self.attachments = attachments def generate_alert_url(self, alert_id): - # type: (int) -> text_type + # type: (int) -> Text return self.ALERT_URL_TEMPLATE.format(alert_id=alert_id) def parse_alert(self): - # type: () -> Tuple[int, text_type, text_type, text_type] + # type: () -> Tuple[int, Text, Text, Text] alert = self.payload['alert'] alert_id = alert['id'] return alert_id, alert['name'], self.generate_alert_url(alert_id), alert['runbook_url'] def parse_condition(self, condition): - # type: (Dict[str, Any]) -> Tuple[text_type, text_type, text_type, text_type] + # type: (Dict[str, Any]) -> Tuple[Text, Text, Text, Text] summary_function = condition['summary_function'] threshold = condition.get('threshold', '') condition_type = condition['type'] @@ -46,7 +45,7 @@ class LibratoWebhookParser(object): return summary_function, threshold, condition_type, duration def parse_violation(self, violation): - # type: (Dict[str, Any]) -> Tuple[text_type, text_type] + # type: (Dict[str, Any]) -> Tuple[Text, Text] metric_name = violation['metric'] recorded_at = datetime.fromtimestamp((violation['recorded_at'])) return metric_name, recorded_at @@ -62,7 +61,7 @@ class LibratoWebhookParser(object): return violations def parse_snapshot(self, snapshot): - # type: (Dict[str, Any]) -> Tuple[text_type, text_type, text_type] + # type: (Dict[str, Any]) -> Tuple[Text, Text, Text] author_name, image_url, title = snapshot['author_name'], snapshot['image_url'], snapshot['title'] return author_name, image_url, title @@ -90,11 +89,11 @@ class LibratoWebhookHandler(LibratoWebhookParser): raise Exception("Unexcepted message type") def handle(self): - # type: () -> text_type + # type: () -> Text return self.find_handle_method()() def generate_topic(self): - # type: () -> text_type + # type: () -> Text if self.attachments: return "Snapshots" topic_template = "Alert {alert_name}" @@ -102,7 +101,7 @@ class LibratoWebhookHandler(LibratoWebhookParser): return topic_template.format(alert_name=alert_name) def handle_alert_clear_message(self): - # type: () -> text_type + # type: () -> Text alert_clear_template = "Alert [alert_name]({alert_url}) has cleared at {trigger_time}!" trigger_time = datetime.fromtimestamp((self.payload['trigger_time'])) alert_id, alert_name, alert_url, alert_runbook_url = self.parse_alert() @@ -110,21 +109,21 @@ class LibratoWebhookHandler(LibratoWebhookParser): return content def handle_snapshots(self): - # type: () -> text_type + # type: () -> Text content = u'' for attachment in self.attachments: content += self.handle_snapshot(attachment) return content def handle_snapshot(self, snapshot): - # type: (Dict[str, Any]) -> text_type + # type: (Dict[str, Any]) -> Text snapshot_template = u"**{author_name}** sent a [snapshot]({image_url}) of [metric]({title})" author_name, image_url, title = self.parse_snapshot(snapshot) content = snapshot_template.format(author_name=author_name, image_url=image_url, title=title) return content def handle_alert_violation_message(self): - # type: () -> text_type + # type: () -> Text alert_violation_template = u"Alert [alert_name]({alert_url}) has triggered! " alert_id, alert_name, alert_url, alert_runbook_url = self.parse_alert() content = alert_violation_template.format(alert_name=alert_name, alert_url=alert_url) @@ -135,7 +134,7 @@ class LibratoWebhookHandler(LibratoWebhookParser): return content def generate_conditions_and_violations(self): - # type: () -> text_type + # type: () -> Text conditions = self.parse_conditions() violations = self.parse_violations() content = u"" @@ -144,7 +143,7 @@ class LibratoWebhookHandler(LibratoWebhookParser): return content def generate_violated_metric_condition(self, violation, condition): - # type: (Dict[str, Any], Dict[str, Any]) -> text_type + # type: (Dict[str, Any], Dict[str, Any]) -> Text summary_function, threshold, condition_type, duration = self.parse_condition(condition) metric_name, recorded_at = self.parse_violation(violation) metric_condition_template = u"\n>Metric `{metric_name}`, {summary_function} was {condition_type} {threshold}" @@ -160,7 +159,7 @@ class LibratoWebhookHandler(LibratoWebhookParser): @has_request_variables def api_librato_webhook(request, user_profile, client, payload=REQ(converter=ujson.loads, default={}), stream=REQ(default='librato'), topic=REQ(default=None)): - # type: (HttpRequest, UserProfile, Client, Dict[str, Any], text_type, text_type) -> HttpResponse + # type: (HttpRequest, UserProfile, Client, Dict[str, Any], Text, Text) -> HttpResponse try: attachments = ujson.loads(request.body).get('attachments', []) except ValueError: diff --git a/zerver/views/webhooks/pivotal.py b/zerver/views/webhooks/pivotal.py index 9f096a7573..8ef531abe6 100644 --- a/zerver/views/webhooks/pivotal.py +++ b/zerver/views/webhooks/pivotal.py @@ -14,12 +14,11 @@ from defusedxml.ElementTree import fromstring as xml_fromstring import logging import re import ujson -from six import text_type -from typing import List, Optional, Tuple +from typing import List, Optional, Tuple, Text def api_pivotal_webhook_v3(request, user_profile, stream): - # type: (HttpRequest, UserProfile, text_type) -> Tuple[text_type, text_type] + # type: (HttpRequest, UserProfile, Text) -> Tuple[Text, Text] payload = xml_fromstring(request.body) def get_text(attrs): @@ -73,7 +72,7 @@ def api_pivotal_webhook_v3(request, user_profile, stream): return subject, content def api_pivotal_webhook_v5(request, user_profile, stream): - # type: (HttpRequest, UserProfile, text_type) -> Tuple[text_type, text_type] + # type: (HttpRequest, UserProfile, Text) -> Tuple[Text, Text] payload = ujson.loads(request.body) event_type = payload["kind"] @@ -98,7 +97,7 @@ def api_pivotal_webhook_v5(request, user_profile, stream): subject = "#%s: %s" % (story_id, story_name) def extract_comment(change): - # type: (Dict[str, Dict]) -> Optional[text_type] + # type: (Dict[str, Dict]) -> Optional[Text] if change.get("kind") == "comment": return change.get("new_values", {}).get("text", None) return None @@ -163,7 +162,7 @@ def api_pivotal_webhook_v5(request, user_profile, stream): @api_key_only_webhook_view("Pivotal") @has_request_variables def api_pivotal_webhook(request, user_profile, client, stream=REQ()): - # type: (HttpRequest, UserProfile, Client, text_type) -> HttpResponse + # type: (HttpRequest, UserProfile, Client, Text) -> HttpResponse subject = content = None try: subject, content = api_pivotal_webhook_v3(request, user_profile, stream) diff --git a/zerver/views/webhooks/semaphore.py b/zerver/views/webhooks/semaphore.py index 90c6a5ddfc..33a1277679 100644 --- a/zerver/views/webhooks/semaphore.py +++ b/zerver/views/webhooks/semaphore.py @@ -11,7 +11,6 @@ from zerver.decorator import REQ, has_request_variables, api_key_only_webhook_vi from zerver.models import UserProfile, Client import ujson -from six import text_type from typing import Any, Dict diff --git a/zerver/views/webhooks/stash.py b/zerver/views/webhooks/stash.py index 15876fa958..d6d566d3da 100644 --- a/zerver/views/webhooks/stash.py +++ b/zerver/views/webhooks/stash.py @@ -11,15 +11,14 @@ from zerver.decorator import REQ, has_request_variables, authenticated_rest_api_ from zerver.models import UserProfile import ujson -from six import text_type -from typing import Any, Dict +from typing import Any, Dict, Text @authenticated_rest_api_view(is_webhook=True) @has_request_variables def api_stash_webhook(request, user_profile, payload=REQ(argument_type='body'), stream=REQ(default='commits')): - # type: (HttpRequest, UserProfile, Dict[str, Any], text_type) -> HttpResponse + # type: (HttpRequest, UserProfile, Dict[str, Any], Text) -> HttpResponse # We don't get who did the push, or we'd try to report that. try: repo_name = payload["repository"]["name"] diff --git a/zerver/views/webhooks/stripe.py b/zerver/views/webhooks/stripe.py index 35ae4c7f20..35736c619b 100644 --- a/zerver/views/webhooks/stripe.py +++ b/zerver/views/webhooks/stripe.py @@ -8,8 +8,7 @@ from zerver.lib.validator import check_dict, check_string from zerver.models import Client, UserProfile from django.http import HttpRequest, HttpResponse -from six import text_type -from typing import Dict, Any, Iterable, Optional +from typing import Dict, Any, Iterable, Optional, Text from datetime import datetime @@ -18,7 +17,7 @@ from datetime import datetime def api_stripe_webhook(request, user_profile, client, payload=REQ(argument_type='body'), stream=REQ(default='test'), topic=REQ(default='stripe')): - # type: (HttpRequest, UserProfile, Client, Dict[str, Any], text_type, Optional[text_type]) -> HttpResponse + # type: (HttpRequest, UserProfile, Client, Dict[str, Any], Text, Optional[Text]) -> HttpResponse body = "" event_type = "" try: diff --git a/zerver/views/webhooks/trello/__init__.py b/zerver/views/webhooks/trello/__init__.py index 11dc2b8c23..5c2e6611cc 100644 --- a/zerver/views/webhooks/trello/__init__.py +++ b/zerver/views/webhooks/trello/__init__.py @@ -1,8 +1,7 @@ # Webhooks for external integrations. from __future__ import absolute_import import ujson -from six import text_type -from typing import Mapping, Any, Tuple +from typing import Mapping, Any, Tuple, Text from django.utils.translation import ugettext as _ from django.http import HttpRequest, HttpResponse from zerver.lib.actions import check_send_message @@ -19,7 +18,7 @@ from .exceptions import UnsupportedAction @return_success_on_head_request @has_request_variables def api_trello_webhook(request, user_profile, client, payload=REQ(argument_type='body'), stream=REQ(default='trello')): - # type: (HttpRequest, UserProfile, Client, Mapping[str, Any], text_type) -> HttpResponse + # type: (HttpRequest, UserProfile, Client, Mapping[str, Any], Text) -> HttpResponse payload = ujson.loads(request.body) action_type = payload.get('action').get('type') try: @@ -31,7 +30,7 @@ def api_trello_webhook(request, user_profile, client, payload=REQ(argument_type= return json_success() def get_subject_and_body(payload, action_type): - # type: (Mapping[str, Any], text_type) -> Tuple[text_type, text_type] + # type: (Mapping[str, Any], Text) -> Tuple[Text, Text] if action_type in SUPPORTED_CARD_ACTIONS: return process_card_action(payload, action_type) if action_type in SUPPORTED_BOARD_ACTIONS: diff --git a/zerver/views/webhooks/trello/board_actions.py b/zerver/views/webhooks/trello/board_actions.py index a17d70626d..c2d2f90805 100644 --- a/zerver/views/webhooks/trello/board_actions.py +++ b/zerver/views/webhooks/trello/board_actions.py @@ -1,5 +1,4 @@ -from six import text_type -from typing import Mapping, Any, Tuple, Optional, MutableMapping +from typing import Mapping, Any, Tuple, Optional, MutableMapping, Text from .exceptions import UnknownUpdateBoardAction from .templates import TRELLO_SUBJECT_TEMPLATE, TRELLO_MESSAGE_TEMPLATE @@ -25,12 +24,12 @@ ACTIONS_TO_MESSAGE_MAPPER = { } def process_board_action(payload, action_type): - # type: (Mapping[str, Any], text_type) -> Tuple[text_type, text_type] + # type: (Mapping[str, Any], Text) -> Tuple[Text, Text] action_type = get_proper_action(payload, action_type) return get_subject(payload), get_body(payload, action_type) def get_proper_action(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text if action_type == 'updateBoard': data = get_action_data(payload) if data.get('old').get('name'): @@ -39,34 +38,34 @@ def get_proper_action(payload, action_type): return action_type def get_subject(payload): - # type: (Mapping[str, Any]) -> text_type + # type: (Mapping[str, Any]) -> Text data = { 'board_name': get_action_data(payload).get('board').get('name') } return TRELLO_SUBJECT_TEMPLATE.format(**data) def get_body(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text message_body = ACTIONS_TO_FILL_BODY_MAPPER[action_type](payload, action_type) creator = payload.get('action').get('memberCreator').get('fullName') return TRELLO_MESSAGE_TEMPLATE.format(full_name=creator, rest=message_body) def get_managed_member_body(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text data = { 'member_name': payload.get('action').get('member').get('fullName'), } return fill_appropriate_message_content(payload, action_type, data) def get_create_list_body(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text data = { 'list_name': get_action_data(payload).get('list').get('name'), } return fill_appropriate_message_content(payload, action_type, data) def get_change_name_body(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text data = { 'old_name': get_action_data(payload).get('old').get('name'), } @@ -74,26 +73,26 @@ def get_change_name_body(payload, action_type): def fill_appropriate_message_content(payload, action_type, data=None): - # type: (Mapping[str, Any], text_type, Optional[Dict[str, Any]]) -> text_type + # type: (Mapping[str, Any], Text, Optional[Dict[str, Any]]) -> Text data = {} if data is None else data data['board_url_template'] = data.get('board_url_template', get_filled_board_url_template(payload)) message_body = get_message_body(action_type) return message_body.format(**data) def get_filled_board_url_template(payload): - # type: (Mapping[str, Any]) -> text_type + # type: (Mapping[str, Any]) -> Text return TRELLO_BOARD_URL_TEMPLATE.format(board_name=get_board_name(payload), board_url=get_board_url(payload)) def get_board_name(payload): - # type: (Mapping[str, Any]) -> text_type + # type: (Mapping[str, Any]) -> Text return get_action_data(payload).get('board').get('name') def get_board_url(payload): - # type: (Mapping[str, Any]) -> text_type + # type: (Mapping[str, Any]) -> Text return u'https://trello.com/b/{}'.format(get_action_data(payload).get('board').get('shortLink')) def get_message_body(action_type): - # type: (text_type) -> text_type + # type: (Text) -> Text return ACTIONS_TO_MESSAGE_MAPPER[action_type] def get_action_data(payload): diff --git a/zerver/views/webhooks/trello/card_actions.py b/zerver/views/webhooks/trello/card_actions.py index 4c254a068a..c1113f0a5a 100644 --- a/zerver/views/webhooks/trello/card_actions.py +++ b/zerver/views/webhooks/trello/card_actions.py @@ -1,5 +1,4 @@ -from six import text_type -from typing import Dict, Tuple, Any, Optional, MutableMapping, Mapping +from typing import Dict, Tuple, Any, Optional, MutableMapping, Mapping, Text from datetime import datetime from .exceptions import UnknownUpdateCardAction from .templates import TRELLO_SUBJECT_TEMPLATE, TRELLO_MESSAGE_TEMPLATE @@ -53,12 +52,12 @@ ACTIONS_TO_MESSAGE_MAPPER = { } def process_card_action(payload, action_type): - # type: (Mapping[str, Any], text_type) -> Tuple[text_type, text_type] + # type: (Mapping[str, Any], Text) -> Tuple[Text, Text] action_type = get_proper_action(payload, action_type) return get_subject(payload), get_body(payload, action_type) def get_proper_action(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text if action_type == 'updateCard': data = get_action_data(payload) if data.get('listBefore'): @@ -81,27 +80,27 @@ def get_proper_action(payload, action_type): return action_type def get_subject(payload): - # type: (Mapping[str, Any]) -> text_type + # type: (Mapping[str, Any]) -> Text data = { 'board_name': get_action_data(payload).get('board').get('name') } return TRELLO_SUBJECT_TEMPLATE.format(**data) def get_body(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text message_body = ACTIONS_TO_FILL_BODY_MAPPER.get(action_type)(payload, action_type) creator = payload.get('action').get('memberCreator').get('fullName') return TRELLO_MESSAGE_TEMPLATE.format(full_name=creator, rest=message_body) def get_added_checklist_body(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text data = { 'checklist_name': get_action_data(payload).get('checklist').get('name'), } return fill_appropriate_message_content(payload, action_type, data) def get_added_attachment_body(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text data = { 'attachment_url': get_action_data(payload).get('attachment').get('url'), 'attachment_name': get_action_data(payload).get('attachment').get('name'), @@ -109,7 +108,7 @@ def get_added_attachment_body(payload, action_type): return fill_appropriate_message_content(payload, action_type, data) def get_updated_card_body(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text data = { 'card_name': get_card_name(payload), 'old_list': get_action_data(payload).get('listBefore').get('name'), @@ -118,7 +117,7 @@ def get_updated_card_body(payload, action_type): return fill_appropriate_message_content(payload, action_type, data) def get_renamed_card_body(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text data = { 'old_name': get_action_data(payload).get('old').get('name'), 'new_name': get_action_data(payload).get('card').get('name'), @@ -126,7 +125,7 @@ def get_renamed_card_body(payload, action_type): return fill_appropriate_message_content(payload, action_type, data) def get_added_label_body(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text data = { 'color': get_action_data(payload).get('value'), 'text': get_action_data(payload).get('text'), @@ -134,14 +133,14 @@ def get_added_label_body(payload, action_type): return fill_appropriate_message_content(payload, action_type, data) def get_managed_member_body(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text data = { 'member_name': payload.get('action').get('member').get('fullName') } return fill_appropriate_message_content(payload, action_type, data) def get_managed_due_date_body(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text date_format = "%Y-%m-%dT%H:%M:%S.000Z" display_date_format = '%m/%d/%Y %I:%M%p' new_date = datetime.strptime(get_action_data(payload).get('card').get('due'), date_format) @@ -151,7 +150,7 @@ def get_managed_due_date_body(payload, action_type): return fill_appropriate_message_content(payload, action_type, data) def get_changed_due_date_body(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text date_format = "%Y-%m-%dT%H:%M:%S.000Z" display_date_format = '%m/%d/%Y %I:%M%p' new_date = datetime.strptime(get_action_data(payload).get('card').get('due'), date_format) @@ -163,30 +162,30 @@ def get_changed_due_date_body(payload, action_type): return fill_appropriate_message_content(payload, action_type, data) def get_body_by_action_type_without_data(payload, action_type): - # type: (Mapping[str, Any], text_type) -> text_type + # type: (Mapping[str, Any], Text) -> Text return fill_appropriate_message_content(payload, action_type) def fill_appropriate_message_content(payload, action_type, data=None): - # type: (Mapping[str, Any], text_type, Optional[Dict[str, Any]]) -> text_type + # type: (Mapping[str, Any], Text, Optional[Dict[str, Any]]) -> Text data = {} if data is None else data data['card_url_template'] = data.get('card_url_template', get_filled_card_url_template(payload)) message_body = get_message_body(action_type) return message_body.format(**data) def get_filled_card_url_template(payload): - # type: (Mapping[str, Any]) -> text_type + # type: (Mapping[str, Any]) -> Text return TRELLO_CARD_URL_TEMPLATE.format(card_name=get_card_name(payload), card_url=get_card_url(payload)) def get_card_url(payload): - # type: (Mapping[str, Any]) -> text_type + # type: (Mapping[str, Any]) -> Text return u'https://trello.com/c/{}'.format(get_action_data(payload).get('card').get('shortLink')) def get_message_body(action_type): - # type: (text_type) -> text_type + # type: (Text) -> Text return ACTIONS_TO_MESSAGE_MAPPER.get(action_type) def get_card_name(payload): - # type: (Mapping[str, Any]) -> text_type + # type: (Mapping[str, Any]) -> Text return get_action_data(payload).get('card').get('name') def get_action_data(payload): diff --git a/zerver/views/webhooks/zendesk.py b/zerver/views/webhooks/zendesk.py index 10235df51f..2f53a063da 100644 --- a/zerver/views/webhooks/zendesk.py +++ b/zerver/views/webhooks/zendesk.py @@ -5,10 +5,10 @@ from zerver.lib.actions import check_send_message from zerver.lib.response import json_success from zerver.decorator import authenticated_rest_api_view, REQ, has_request_variables from django.http import HttpRequest, HttpResponse -from six import text_type +from typing import Text def truncate(string, length): - # type: (text_type, int) -> text_type + # type: (Text, int) -> Text if len(string) > length: string = string[:length-3] + '...' return string