mirror of
https://github.com/zulip/zulip.git
synced 2025-11-07 15:33:30 +00:00
mypy: Fix strict-optional errors in webhooks directory.
This commit is contained in:
@@ -68,7 +68,7 @@ def api_beanstalk_webhook(request, user_profile,
|
|||||||
author = payload.get('author_full_name')
|
author = payload.get('author_full_name')
|
||||||
url = payload.get('changeset_url')
|
url = payload.get('changeset_url')
|
||||||
revision = payload.get('revision')
|
revision = payload.get('revision')
|
||||||
(short_commit_msg, _, _) = payload.get('message').partition("\n")
|
(short_commit_msg, _, _) = payload['message'].partition("\n")
|
||||||
|
|
||||||
subject = "svn r%s" % (revision,)
|
subject = "svn r%s" % (revision,)
|
||||||
content = "%s pushed [revision %s](%s):\n\n> %s" % (author, revision, url, short_commit_msg)
|
content = "%s pushed [revision %s](%s):\n\n> %s" % (author, revision, url, short_commit_msg)
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ def api_bitbucket_webhook(request, user_profile, payload=REQ(validator=check_dic
|
|||||||
repository.get('absolute_url'),
|
repository.get('absolute_url'),
|
||||||
commit.get('raw_node'))
|
commit.get('raw_node'))
|
||||||
}
|
}
|
||||||
for commit in payload.get('commits')
|
for commit in payload['commits']
|
||||||
]
|
]
|
||||||
|
|
||||||
if len(commits) == 0:
|
if len(commits) == 0:
|
||||||
@@ -43,7 +43,7 @@ def api_bitbucket_webhook(request, user_profile, payload=REQ(validator=check_dic
|
|||||||
branch = payload['commits'][-1]['branch']
|
branch = payload['commits'][-1]['branch']
|
||||||
if branches is not None and branches.find(branch) == -1:
|
if branches is not None and branches.find(branch) == -1:
|
||||||
return json_success()
|
return json_success()
|
||||||
content = get_push_commits_event_message(payload.get('user'), None, branch, commits)
|
content = get_push_commits_event_message(payload['user'], None, branch, commits)
|
||||||
subject = SUBJECT_WITH_BRANCH_TEMPLATE.format(repo=repository['name'], branch=branch)
|
subject = SUBJECT_WITH_BRANCH_TEMPLATE.format(repo=repository['name'], branch=branch)
|
||||||
|
|
||||||
check_send_message(user_profile, get_client("ZulipBitBucketWebhook"), "stream",
|
check_send_message(user_profile, get_client("ZulipBitBucketWebhook"), "stream",
|
||||||
|
|||||||
@@ -89,20 +89,21 @@ def get_push_subjects(payload):
|
|||||||
|
|
||||||
def get_subject(payload):
|
def get_subject(payload):
|
||||||
# type: (Dict[str, Any]) -> str
|
# type: (Dict[str, Any]) -> str
|
||||||
|
assert(payload['repository'] is not None)
|
||||||
return BITBUCKET_SUBJECT_TEMPLATE.format(repository_name=get_repository_name(payload['repository']))
|
return BITBUCKET_SUBJECT_TEMPLATE.format(repository_name=get_repository_name(payload['repository']))
|
||||||
|
|
||||||
def get_subject_based_on_type(payload, type):
|
def get_subject_based_on_type(payload, type):
|
||||||
# type: (Dict[str, Any], str) -> Text
|
# type: (Dict[str, Any], str) -> Text
|
||||||
if type.startswith('pull_request'):
|
if type.startswith('pull_request'):
|
||||||
return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format(
|
return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format(
|
||||||
repo=get_repository_name(payload.get('repository')),
|
repo=get_repository_name(payload['repository']),
|
||||||
type='PR',
|
type='PR',
|
||||||
id=payload['pullrequest']['id'],
|
id=payload['pullrequest']['id'],
|
||||||
title=payload['pullrequest']['title']
|
title=payload['pullrequest']['title']
|
||||||
)
|
)
|
||||||
if type.startswith('issue'):
|
if type.startswith('issue'):
|
||||||
return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format(
|
return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format(
|
||||||
repo=get_repository_name(payload.get('repository')),
|
repo=get_repository_name(payload['repository']),
|
||||||
type='Issue',
|
type='Issue',
|
||||||
id=payload['issue']['id'],
|
id=payload['issue']['id'],
|
||||||
title=payload['issue']['title']
|
title=payload['issue']['title']
|
||||||
@@ -172,9 +173,9 @@ def get_force_push_body(payload, change):
|
|||||||
|
|
||||||
def get_commit_author_name(commit):
|
def get_commit_author_name(commit):
|
||||||
# type: (Dict[str, Any]) -> Text
|
# type: (Dict[str, Any]) -> Text
|
||||||
if commit.get('author').get('user'):
|
if commit['author'].get('user'):
|
||||||
return commit.get('author').get('user').get('username')
|
return commit['author']['user'].get('username')
|
||||||
return commit.get('author').get('raw').split()[0]
|
return commit['author']['raw'].split()[0]
|
||||||
|
|
||||||
def get_normal_push_body(payload, change):
|
def get_normal_push_body(payload, change):
|
||||||
# type: (Dict[str, Any], Dict[str, Any]) -> Text
|
# type: (Dict[str, Any], Dict[str, Any]) -> Text
|
||||||
@@ -204,7 +205,7 @@ def get_fork_body(payload):
|
|||||||
|
|
||||||
def get_commit_comment_body(payload):
|
def get_commit_comment_body(payload):
|
||||||
# type: (Dict[str, Any]) -> Text
|
# type: (Dict[str, Any]) -> Text
|
||||||
comment = payload.get('comment')
|
comment = payload['comment']
|
||||||
action = u'[commented]({})'.format(comment['links']['html']['href'])
|
action = u'[commented]({})'.format(comment['links']['html']['href'])
|
||||||
return get_commits_comment_action_message(
|
return get_commits_comment_action_message(
|
||||||
get_user_username(payload),
|
get_user_username(payload),
|
||||||
@@ -305,18 +306,18 @@ def get_pull_request_comment_action_body(payload, action):
|
|||||||
def get_push_tag_body(payload, change):
|
def get_push_tag_body(payload, change):
|
||||||
# type: (Dict[str, Any], Dict[str, Any]) -> Text
|
# type: (Dict[str, Any], Dict[str, Any]) -> Text
|
||||||
if change.get('created'):
|
if change.get('created'):
|
||||||
tag = change.get('new')
|
tag = change['new']
|
||||||
action = 'pushed'
|
action = 'pushed' # type: Optional[Text]
|
||||||
elif change.get('closed'):
|
elif change.get('closed'):
|
||||||
tag = change.get('old')
|
tag = change['old']
|
||||||
action = 'removed'
|
action = 'removed'
|
||||||
else:
|
else:
|
||||||
tag = change.get('new')
|
tag = change['new']
|
||||||
action = None
|
action = None
|
||||||
return get_push_tag_event_message(
|
return get_push_tag_event_message(
|
||||||
get_user_username(payload),
|
get_user_username(payload),
|
||||||
tag.get('name'),
|
tag.get('name'),
|
||||||
tag_url=tag.get('links').get('html').get('href'),
|
tag_url=tag['links']['html'].get('href'),
|
||||||
action=action
|
action=action
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -137,7 +137,8 @@ def api_github_v2(user_profile, event, payload, branches, default_stream,
|
|||||||
target_stream = commit_stream if commit_stream else default_stream
|
target_stream = commit_stream if commit_stream else default_stream
|
||||||
issue_stream = issue_stream if issue_stream else default_stream
|
issue_stream = issue_stream if issue_stream else default_stream
|
||||||
repository = payload['repository']
|
repository = payload['repository']
|
||||||
topic_focus = topic_focus if topic_focus else repository['name']
|
updated_topic_focus = topic_focus if topic_focus else repository['name']
|
||||||
|
|
||||||
|
|
||||||
# Event Handlers
|
# Event Handlers
|
||||||
if event == 'pull_request':
|
if event == 'pull_request':
|
||||||
@@ -166,7 +167,7 @@ def api_github_v2(user_profile, event, payload, branches, default_stream,
|
|||||||
content = github_object_commented_content(payload, type)
|
content = github_object_commented_content(payload, type)
|
||||||
|
|
||||||
elif event == 'push':
|
elif event == 'push':
|
||||||
subject, content = build_message_from_gitlog(user_profile, topic_focus,
|
subject, content = build_message_from_gitlog(user_profile, updated_topic_focus,
|
||||||
payload['ref'], payload['commits'],
|
payload['ref'], payload['commits'],
|
||||||
payload['before'], payload['after'],
|
payload['before'], payload['after'],
|
||||||
payload['compare'],
|
payload['compare'],
|
||||||
@@ -175,9 +176,9 @@ def api_github_v2(user_profile, event, payload, branches, default_stream,
|
|||||||
created=payload['created'],
|
created=payload['created'],
|
||||||
deleted=payload['deleted'])
|
deleted=payload['deleted'])
|
||||||
elif event == 'commit_comment':
|
elif event == 'commit_comment':
|
||||||
subject = topic_focus
|
subject = updated_topic_focus
|
||||||
|
|
||||||
comment = payload.get('comment')
|
comment = payload['comment']
|
||||||
action = u'[commented]({})'.format(comment['html_url'])
|
action = u'[commented]({})'.format(comment['html_url'])
|
||||||
content = get_commits_comment_action_message(
|
content = get_commits_comment_action_message(
|
||||||
comment['user']['login'],
|
comment['user']['login'],
|
||||||
@@ -301,7 +302,7 @@ def _transform_commits_list_to_common_format(commits):
|
|||||||
new_commits_list = []
|
new_commits_list = []
|
||||||
for commit in commits:
|
for commit in commits:
|
||||||
new_commits_list.append({
|
new_commits_list.append({
|
||||||
'name': commit.get('author').get('username'),
|
'name': commit['author'].get('username'),
|
||||||
'sha': commit.get('id'),
|
'sha': commit.get('id'),
|
||||||
'url': commit.get('url'),
|
'url': commit.get('url'),
|
||||||
'message': commit.get('message'),
|
'message': commit.get('message'),
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ def get_normal_push_event_body(payload):
|
|||||||
'message': commit.get('message'),
|
'message': commit.get('message'),
|
||||||
'url': commit.get('url')
|
'url': commit.get('url')
|
||||||
}
|
}
|
||||||
for commit in payload.get('commits')
|
for commit in payload['commits']
|
||||||
]
|
]
|
||||||
|
|
||||||
return get_push_commits_event_message(
|
return get_push_commits_event_message(
|
||||||
@@ -69,8 +69,8 @@ def get_issue_created_event_body(payload):
|
|||||||
get_issue_user_name(payload),
|
get_issue_user_name(payload),
|
||||||
'created',
|
'created',
|
||||||
get_object_url(payload),
|
get_object_url(payload),
|
||||||
payload.get('object_attributes').get('iid'),
|
payload['object_attributes'].get('iid'),
|
||||||
payload.get('object_attributes').get('description'),
|
payload['object_attributes'].get('description'),
|
||||||
get_objects_assignee(payload)
|
get_objects_assignee(payload)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -80,18 +80,18 @@ def get_issue_event_body(payload, action):
|
|||||||
get_issue_user_name(payload),
|
get_issue_user_name(payload),
|
||||||
action,
|
action,
|
||||||
get_object_url(payload),
|
get_object_url(payload),
|
||||||
payload.get('object_attributes').get('iid'),
|
payload['object_attributes'].get('iid'),
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_merge_request_updated_event_body(payload):
|
def get_merge_request_updated_event_body(payload):
|
||||||
# type: (Dict[str, Any]) -> Text
|
# type: (Dict[str, Any]) -> Text
|
||||||
if payload.get('object_attributes').get('oldrev'):
|
if payload['object_attributes'].get('oldrev'):
|
||||||
return get_merge_request_event_body(payload, "added commit(s) to")
|
return get_merge_request_event_body(payload, "added commit(s) to")
|
||||||
return get_merge_request_open_or_updated_body(payload, "updated")
|
return get_merge_request_open_or_updated_body(payload, "updated")
|
||||||
|
|
||||||
def get_merge_request_event_body(payload, action):
|
def get_merge_request_event_body(payload, action):
|
||||||
# type: (Dict[str, Any], Text) -> Text
|
# type: (Dict[str, Any], Text) -> Text
|
||||||
pull_request = payload.get('object_attributes')
|
pull_request = payload['object_attributes']
|
||||||
return get_pull_request_event_message(
|
return get_pull_request_event_message(
|
||||||
get_issue_user_name(payload),
|
get_issue_user_name(payload),
|
||||||
action,
|
action,
|
||||||
@@ -102,7 +102,7 @@ def get_merge_request_event_body(payload, action):
|
|||||||
|
|
||||||
def get_merge_request_open_or_updated_body(payload, action):
|
def get_merge_request_open_or_updated_body(payload, action):
|
||||||
# type: (Dict[str, Any], Text) -> Text
|
# type: (Dict[str, Any], Text) -> Text
|
||||||
pull_request = payload.get('object_attributes')
|
pull_request = payload['object_attributes']
|
||||||
return get_pull_request_event_message(
|
return get_pull_request_event_message(
|
||||||
get_issue_user_name(payload),
|
get_issue_user_name(payload),
|
||||||
action,
|
action,
|
||||||
@@ -124,63 +124,63 @@ def get_objects_assignee(payload):
|
|||||||
|
|
||||||
def get_commented_commit_event_body(payload):
|
def get_commented_commit_event_body(payload):
|
||||||
# type: (Dict[str, Any]) -> Text
|
# type: (Dict[str, Any]) -> Text
|
||||||
comment = payload.get('object_attributes')
|
comment = payload['object_attributes']
|
||||||
action = u'[commented]({})'.format(comment['url'])
|
action = u'[commented]({})'.format(comment['url'])
|
||||||
return get_commits_comment_action_message(
|
return get_commits_comment_action_message(
|
||||||
get_issue_user_name(payload),
|
get_issue_user_name(payload),
|
||||||
action,
|
action,
|
||||||
payload.get('commit').get('url'),
|
payload['commit'].get('url'),
|
||||||
payload.get('commit').get('id'),
|
payload['commit'].get('id'),
|
||||||
comment['note'],
|
comment['note'],
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_commented_merge_request_event_body(payload):
|
def get_commented_merge_request_event_body(payload):
|
||||||
# type: (Dict[str, Any]) -> Text
|
# type: (Dict[str, Any]) -> Text
|
||||||
comment = payload.get('object_attributes')
|
comment = payload['object_attributes']
|
||||||
action = u'[commented]({}) on'.format(comment['url'])
|
action = u'[commented]({}) on'.format(comment['url'])
|
||||||
url = u'{}/merge_requests/{}'.format(
|
url = u'{}/merge_requests/{}'.format(
|
||||||
payload.get('project').get('web_url'),
|
payload['project'].get('web_url'),
|
||||||
payload.get('merge_request').get('iid')
|
payload['merge_request'].get('iid')
|
||||||
)
|
)
|
||||||
return get_pull_request_event_message(
|
return get_pull_request_event_message(
|
||||||
get_issue_user_name(payload),
|
get_issue_user_name(payload),
|
||||||
action,
|
action,
|
||||||
url,
|
url,
|
||||||
payload.get('merge_request').get('iid'),
|
payload['merge_request'].get('iid'),
|
||||||
message=comment['note'],
|
message=comment['note'],
|
||||||
type='MR'
|
type='MR'
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_commented_issue_event_body(payload):
|
def get_commented_issue_event_body(payload):
|
||||||
# type: (Dict[str, Any]) -> Text
|
# type: (Dict[str, Any]) -> Text
|
||||||
comment = payload.get('object_attributes')
|
comment = payload['object_attributes']
|
||||||
action = u'[commented]({}) on'.format(comment['url'])
|
action = u'[commented]({}) on'.format(comment['url'])
|
||||||
url = u'{}/issues/{}'.format(
|
url = u'{}/issues/{}'.format(
|
||||||
payload.get('project').get('web_url'),
|
payload['project'].get('web_url'),
|
||||||
payload.get('issue').get('iid')
|
payload['issue'].get('iid')
|
||||||
)
|
)
|
||||||
return get_pull_request_event_message(
|
return get_pull_request_event_message(
|
||||||
get_issue_user_name(payload),
|
get_issue_user_name(payload),
|
||||||
action,
|
action,
|
||||||
url,
|
url,
|
||||||
payload.get('issue').get('iid'),
|
payload['issue'].get('iid'),
|
||||||
message=comment['note'],
|
message=comment['note'],
|
||||||
type='Issue'
|
type='Issue'
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_commented_snippet_event_body(payload):
|
def get_commented_snippet_event_body(payload):
|
||||||
# type: (Dict[str, Any]) -> Text
|
# type: (Dict[str, Any]) -> Text
|
||||||
comment = payload.get('object_attributes')
|
comment = payload['object_attributes']
|
||||||
action = u'[commented]({}) on'.format(comment['url'])
|
action = u'[commented]({}) on'.format(comment['url'])
|
||||||
url = u'{}/snippets/{}'.format(
|
url = u'{}/snippets/{}'.format(
|
||||||
payload.get('project').get('web_url'),
|
payload['project'].get('web_url'),
|
||||||
payload.get('snippet').get('id')
|
payload['snippet'].get('id')
|
||||||
)
|
)
|
||||||
return get_pull_request_event_message(
|
return get_pull_request_event_message(
|
||||||
get_issue_user_name(payload),
|
get_issue_user_name(payload),
|
||||||
action,
|
action,
|
||||||
url,
|
url,
|
||||||
payload.get('snippet').get('id'),
|
payload['snippet'].get('id'),
|
||||||
message=comment['note'],
|
message=comment['note'],
|
||||||
type='Snippet'
|
type='Snippet'
|
||||||
)
|
)
|
||||||
@@ -190,8 +190,8 @@ def get_wiki_page_event_body(payload, action):
|
|||||||
return u"{} {} [Wiki Page \"{}\"]({}).".format(
|
return u"{} {} [Wiki Page \"{}\"]({}).".format(
|
||||||
get_issue_user_name(payload),
|
get_issue_user_name(payload),
|
||||||
action,
|
action,
|
||||||
payload.get('object_attributes').get('title'),
|
payload['object_attributes'].get('title'),
|
||||||
payload.get('object_attributes').get('url'),
|
payload['object_attributes'].get('url'),
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_build_hook_event_body(payload):
|
def get_build_hook_event_body(payload):
|
||||||
@@ -211,7 +211,7 @@ def get_build_hook_event_body(payload):
|
|||||||
|
|
||||||
def get_pipeline_event_body(payload):
|
def get_pipeline_event_body(payload):
|
||||||
# type: (Dict[str, Any]) -> Text
|
# type: (Dict[str, Any]) -> Text
|
||||||
pipeline_status = payload.get('object_attributes').get('status')
|
pipeline_status = payload['object_attributes'].get('status')
|
||||||
if pipeline_status == 'pending':
|
if pipeline_status == 'pending':
|
||||||
action = 'was created'
|
action = 'was created'
|
||||||
elif pipeline_status == 'running':
|
elif pipeline_status == 'running':
|
||||||
@@ -220,7 +220,7 @@ def get_pipeline_event_body(payload):
|
|||||||
action = 'changed status to {}'.format(pipeline_status)
|
action = 'changed status to {}'.format(pipeline_status)
|
||||||
|
|
||||||
builds_status = u""
|
builds_status = u""
|
||||||
for build in payload.get('builds'):
|
for build in payload['builds']:
|
||||||
builds_status += u"* {} - {}\n".format(build.get('name'), build.get('status'))
|
builds_status += u"* {} - {}\n".format(build.get('name'), build.get('status'))
|
||||||
return u"Pipeline {} with build(s):\n{}.".format(action, builds_status[:-1])
|
return u"Pipeline {} with build(s):\n{}.".format(action, builds_status[:-1])
|
||||||
|
|
||||||
@@ -300,63 +300,63 @@ def get_subject_based_on_event(event, payload):
|
|||||||
if event == 'Push Hook':
|
if event == 'Push Hook':
|
||||||
return u"{} / {}".format(get_repo_name(payload), get_branch_name(payload))
|
return u"{} / {}".format(get_repo_name(payload), get_branch_name(payload))
|
||||||
elif event == 'Build Hook':
|
elif event == 'Build Hook':
|
||||||
return u"{} / {}".format(payload.get('repository').get('name'), get_branch_name(payload))
|
return u"{} / {}".format(payload['repository'].get('name'), get_branch_name(payload))
|
||||||
elif event == 'Pipeline Hook':
|
elif event == 'Pipeline Hook':
|
||||||
return u"{} / {}".format(
|
return u"{} / {}".format(
|
||||||
get_repo_name(payload),
|
get_repo_name(payload),
|
||||||
payload.get('object_attributes').get('ref').replace('refs/heads/', ''))
|
payload['object_attributes'].get('ref').replace('refs/heads/', ''))
|
||||||
elif event.startswith('Merge Request Hook'):
|
elif event.startswith('Merge Request Hook'):
|
||||||
return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format(
|
return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format(
|
||||||
repo=get_repo_name(payload),
|
repo=get_repo_name(payload),
|
||||||
type='MR',
|
type='MR',
|
||||||
id=payload.get('object_attributes').get('iid'),
|
id=payload['object_attributes'].get('iid'),
|
||||||
title=payload.get('object_attributes').get('title')
|
title=payload['object_attributes'].get('title')
|
||||||
)
|
)
|
||||||
elif event.startswith('Issue Hook'):
|
elif event.startswith('Issue Hook'):
|
||||||
return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format(
|
return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format(
|
||||||
repo=get_repo_name(payload),
|
repo=get_repo_name(payload),
|
||||||
type='Issue',
|
type='Issue',
|
||||||
id=payload.get('object_attributes').get('iid'),
|
id=payload['object_attributes'].get('iid'),
|
||||||
title=payload.get('object_attributes').get('title')
|
title=payload['object_attributes'].get('title')
|
||||||
)
|
)
|
||||||
elif event == 'Note Hook Issue':
|
elif event == 'Note Hook Issue':
|
||||||
return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format(
|
return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format(
|
||||||
repo=get_repo_name(payload),
|
repo=get_repo_name(payload),
|
||||||
type='Issue',
|
type='Issue',
|
||||||
id=payload.get('issue').get('iid'),
|
id=payload['issue'].get('iid'),
|
||||||
title=payload.get('issue').get('title')
|
title=payload['issue'].get('title')
|
||||||
)
|
)
|
||||||
elif event == 'Note Hook MergeRequest':
|
elif event == 'Note Hook MergeRequest':
|
||||||
return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format(
|
return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format(
|
||||||
repo=get_repo_name(payload),
|
repo=get_repo_name(payload),
|
||||||
type='MR',
|
type='MR',
|
||||||
id=payload.get('merge_request').get('iid'),
|
id=payload['merge_request'].get('iid'),
|
||||||
title=payload.get('merge_request').get('title')
|
title=payload['merge_request'].get('title')
|
||||||
)
|
)
|
||||||
|
|
||||||
elif event == 'Note Hook Snippet':
|
elif event == 'Note Hook Snippet':
|
||||||
return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format(
|
return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format(
|
||||||
repo=get_repo_name(payload),
|
repo=get_repo_name(payload),
|
||||||
type='Snippet',
|
type='Snippet',
|
||||||
id=payload.get('snippet').get('id'),
|
id=payload['snippet'].get('id'),
|
||||||
title=payload.get('snippet').get('title')
|
title=payload['snippet'].get('title')
|
||||||
)
|
)
|
||||||
return get_repo_name(payload)
|
return get_repo_name(payload)
|
||||||
|
|
||||||
def get_event(request, payload, branches):
|
def get_event(request, payload, branches):
|
||||||
# type: (HttpRequest, Dict[str, Any], Text) -> Optional[str]
|
# type: (HttpRequest, Dict[str, Any], Optional[Text]) -> Optional[str]
|
||||||
event = request.META['HTTP_X_GITLAB_EVENT']
|
event = request.META['HTTP_X_GITLAB_EVENT']
|
||||||
if event == 'Issue Hook':
|
if event == 'Issue Hook':
|
||||||
action = payload.get('object_attributes').get('action')
|
action = payload['object_attributes'].get('action')
|
||||||
event = "{} {}".format(event, action)
|
event = "{} {}".format(event, action)
|
||||||
elif event == 'Note Hook':
|
elif event == 'Note Hook':
|
||||||
action = payload.get('object_attributes').get('noteable_type')
|
action = payload['object_attributes'].get('noteable_type')
|
||||||
event = "{} {}".format(event, action)
|
event = "{} {}".format(event, action)
|
||||||
elif event == 'Merge Request Hook':
|
elif event == 'Merge Request Hook':
|
||||||
action = payload.get('object_attributes').get('action')
|
action = payload['object_attributes'].get('action')
|
||||||
event = "{} {}".format(event, action)
|
event = "{} {}".format(event, action)
|
||||||
elif event == 'Wiki Page Hook':
|
elif event == 'Wiki Page Hook':
|
||||||
action = payload.get('object_attributes').get('action')
|
action = payload['object_attributes'].get('action')
|
||||||
event = "{} {}".format(event, action)
|
event = "{} {}".format(event, action)
|
||||||
elif event == 'Push Hook':
|
elif event == 'Push Hook':
|
||||||
if branches is not None:
|
if branches is not None:
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ def get_sub_event_for_update_issue(payload):
|
|||||||
return sub_event
|
return sub_event
|
||||||
|
|
||||||
def get_event_type(payload):
|
def get_event_type(payload):
|
||||||
# type: (Dict[str, Any]) -> Text
|
# type: (Dict[str, Any]) -> Optional[Text]
|
||||||
event = payload.get('webhookEvent')
|
event = payload.get('webhookEvent')
|
||||||
if event is None and payload.get('transition'):
|
if event is None and payload.get('transition'):
|
||||||
event = 'jira:issue_updated'
|
event = 'jira:issue_updated'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Webhooks for external integrations.
|
# Webhooks for external integrations.
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
from typing import Any, Callable, Dict, Iterable, Optional, Tuple
|
from typing import Any, Callable, Dict, Iterable, Optional, Tuple, Text
|
||||||
|
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.http import HttpRequest, HttpResponse
|
from django.http import HttpRequest, HttpResponse
|
||||||
@@ -14,10 +14,10 @@ from zerver.models import UserProfile, Stream
|
|||||||
|
|
||||||
@api_key_only_webhook_view("NewRelic")
|
@api_key_only_webhook_view("NewRelic")
|
||||||
@has_request_variables
|
@has_request_variables
|
||||||
def api_newrelic_webhook(request, user_profile, stream=REQ(),
|
def api_newrelic_webhook(request, user_profile, stream=REQ(default='newrelic'),
|
||||||
alert=REQ(validator=check_dict([]), default=None),
|
alert=REQ(validator=check_dict([]), default=None),
|
||||||
deployment=REQ(validator=check_dict([]), default=None)):
|
deployment=REQ(validator=check_dict([]), default=None)):
|
||||||
# type: (HttpRequest, UserProfile, Optional[Stream], Optional[Dict[str, Any]], Optional[Dict[str, Any]]) -> HttpResponse
|
# type: (HttpRequest, UserProfile, Text, Optional[Dict[str, Any]], Optional[Dict[str, Any]]) -> HttpResponse
|
||||||
if alert:
|
if alert:
|
||||||
# Use the message as the subject because it stays the same for
|
# Use the message as the subject because it stays the same for
|
||||||
# "opened", "acknowledged", and "closed" messages that should be
|
# "opened", "acknowledged", and "closed" messages that should be
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ def build_pagerduty_formatdict(message):
|
|||||||
|
|
||||||
|
|
||||||
def send_raw_pagerduty_json(user_profile, client, stream, message, topic):
|
def send_raw_pagerduty_json(user_profile, client, stream, message, topic):
|
||||||
# type: (UserProfile, Client, Text, Dict[str, Any], Text) -> None
|
# type: (UserProfile, Client, Text, Dict[str, Any], Optional[Text]) -> None
|
||||||
subject = topic or 'pagerduty'
|
subject = topic or 'pagerduty'
|
||||||
body = (
|
body = (
|
||||||
u'Unknown pagerduty message\n'
|
u'Unknown pagerduty message\n'
|
||||||
@@ -82,7 +82,7 @@ def send_raw_pagerduty_json(user_profile, client, stream, message, topic):
|
|||||||
|
|
||||||
|
|
||||||
def send_formated_pagerduty(user_profile, client, stream, message_type, format_dict, topic):
|
def send_formated_pagerduty(user_profile, client, stream, message_type, format_dict, topic):
|
||||||
# type: (UserProfile, Client, Text, Text, Dict[str, Any], Text) -> None
|
# type: (UserProfile, Client, Text, Text, Dict[str, Any], Optional[Text]) -> None
|
||||||
if message_type in ('incident.trigger', 'incident.unacknowledge'):
|
if message_type in ('incident.trigger', 'incident.unacknowledge'):
|
||||||
template = (u':imp: Incident '
|
template = (u':imp: Incident '
|
||||||
u'[{incident_num}]({incident_url}) {action} by '
|
u'[{incident_num}]({incident_url}) {action} by '
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ def api_sentry_webhook(request, user_profile,
|
|||||||
stream=REQ(default='sentry')):
|
stream=REQ(default='sentry')):
|
||||||
# type: (HttpRequest, UserProfile, Dict[str, Any], str) -> HttpResponse
|
# type: (HttpRequest, UserProfile, Dict[str, Any], str) -> HttpResponse
|
||||||
subject = "{}".format(payload.get('project_name'))
|
subject = "{}".format(payload.get('project_name'))
|
||||||
body = "New {} [issue]({}): {}.".format(payload.get('level').upper(),
|
body = "New {} [issue]({}): {}.".format(payload['level'].upper(),
|
||||||
payload.get('url'),
|
payload.get('url'),
|
||||||
payload.get('message'))
|
payload.get('message'))
|
||||||
check_send_message(user_profile, request.client, 'stream', [stream], subject, body)
|
check_send_message(user_profile, request.client, 'stream', [stream], subject, body)
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ def parse_create_or_delete(message):
|
|||||||
|
|
||||||
|
|
||||||
def parse_change_event(change_type, message):
|
def parse_change_event(change_type, message):
|
||||||
# type: (str, Mapping[str, Any]) -> Dict[str, Any]
|
# type: (str, Mapping[str, Any]) -> Optional[Dict[str, Any]]
|
||||||
""" Parses change event. """
|
""" Parses change event. """
|
||||||
evt = {} # type: Dict[str, Any]
|
evt = {} # type: Dict[str, Any]
|
||||||
values = {
|
values = {
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ from .view.exceptions import UnsupportedAction
|
|||||||
def api_trello_webhook(request, user_profile, payload=REQ(argument_type='body'), stream=REQ(default='trello')):
|
def api_trello_webhook(request, user_profile, payload=REQ(argument_type='body'), stream=REQ(default='trello')):
|
||||||
# type: (HttpRequest, UserProfile, Mapping[str, Any], Text) -> HttpResponse
|
# type: (HttpRequest, UserProfile, Mapping[str, Any], Text) -> HttpResponse
|
||||||
payload = ujson.loads(request.body)
|
payload = ujson.loads(request.body)
|
||||||
action_type = payload.get('action').get('type')
|
action_type = payload['action'].get('type')
|
||||||
try:
|
try:
|
||||||
subject, body = get_subject_and_body(payload, action_type)
|
subject, body = get_subject_and_body(payload, action_type)
|
||||||
except UnsupportedAction:
|
except UnsupportedAction:
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ from .exceptions import UnsupportedAction
|
|||||||
def api_trello_webhook(request, user_profile, payload=REQ(argument_type='body'), stream=REQ(default='trello')):
|
def api_trello_webhook(request, user_profile, payload=REQ(argument_type='body'), stream=REQ(default='trello')):
|
||||||
# type: (HttpRequest, UserProfile, Mapping[str, Any], Text) -> HttpResponse
|
# type: (HttpRequest, UserProfile, Mapping[str, Any], Text) -> HttpResponse
|
||||||
payload = ujson.loads(request.body)
|
payload = ujson.loads(request.body)
|
||||||
action_type = payload.get('action').get('type')
|
action_type = payload['action'].get('type')
|
||||||
try:
|
try:
|
||||||
subject, body = get_subject_and_body(payload, action_type)
|
subject, body = get_subject_and_body(payload, action_type)
|
||||||
except UnsupportedAction:
|
except UnsupportedAction:
|
||||||
|
|||||||
@@ -64,20 +64,23 @@ def get_proper_action(payload, action_type):
|
|||||||
# type: (Mapping[str, Any], Text) -> Text
|
# type: (Mapping[str, Any], Text) -> Text
|
||||||
if action_type == 'updateCard':
|
if action_type == 'updateCard':
|
||||||
data = get_action_data(payload)
|
data = get_action_data(payload)
|
||||||
|
old_data = data['old']
|
||||||
|
card_data = data['card']
|
||||||
if data.get('listBefore'):
|
if data.get('listBefore'):
|
||||||
return CHANGE_LIST
|
return CHANGE_LIST
|
||||||
if data.get('old').get('name'):
|
if old_data.get('name'):
|
||||||
return CHANGE_NAME
|
return CHANGE_NAME
|
||||||
if data.get('old').get('due', False) is None:
|
if old_data.get('due', False) is None:
|
||||||
return SET_DUE_DATE
|
return SET_DUE_DATE
|
||||||
if data.get('old').get('due'):
|
if old_data.get('due'):
|
||||||
if data.get('card').get('due', False) is None:
|
if card_data.get('due', False) is None:
|
||||||
return REMOVE_DUE_DATE
|
return REMOVE_DUE_DATE
|
||||||
|
|
||||||
else:
|
else:
|
||||||
return CHANGE_DUE_DATE
|
return CHANGE_DUE_DATE
|
||||||
if data.get('old').get('closed') is False and data.get('card').get('closed'):
|
if old_data.get('closed') is False and card_data.get('closed'):
|
||||||
return ARCHIVE
|
return ARCHIVE
|
||||||
if data.get('old').get('closed') and data.get('card').get('closed') is False:
|
if old_data.get('closed') and card_data.get('closed') is False:
|
||||||
return REOPEN
|
return REOPEN
|
||||||
raise UnknownUpdateCardAction()
|
raise UnknownUpdateCardAction()
|
||||||
|
|
||||||
@@ -86,28 +89,28 @@ def get_proper_action(payload, action_type):
|
|||||||
def get_subject(payload):
|
def get_subject(payload):
|
||||||
# type: (Mapping[str, Any]) -> Text
|
# type: (Mapping[str, Any]) -> Text
|
||||||
data = {
|
data = {
|
||||||
'board_name': get_action_data(payload).get('board').get('name')
|
'board_name': get_action_data(payload)['board'].get('name')
|
||||||
}
|
}
|
||||||
return TRELLO_SUBJECT_TEMPLATE.format(**data)
|
return TRELLO_SUBJECT_TEMPLATE.format(**data)
|
||||||
|
|
||||||
def get_body(payload, action_type):
|
def get_body(payload, action_type):
|
||||||
# type: (Mapping[str, Any], Text) -> Text
|
# type: (Mapping[str, Any], Text) -> Text
|
||||||
message_body = ACTIONS_TO_FILL_BODY_MAPPER.get(action_type)(payload, action_type)
|
message_body = ACTIONS_TO_FILL_BODY_MAPPER[action_type](payload, action_type)
|
||||||
creator = payload.get('action').get('memberCreator').get('fullName')
|
creator = payload['action']['memberCreator'].get('fullName')
|
||||||
return TRELLO_MESSAGE_TEMPLATE.format(full_name=creator, rest=message_body)
|
return TRELLO_MESSAGE_TEMPLATE.format(full_name=creator, rest=message_body)
|
||||||
|
|
||||||
def get_added_checklist_body(payload, action_type):
|
def get_added_checklist_body(payload, action_type):
|
||||||
# type: (Mapping[str, Any], Text) -> Text
|
# type: (Mapping[str, Any], Text) -> Text
|
||||||
data = {
|
data = {
|
||||||
'checklist_name': get_action_data(payload).get('checklist').get('name'),
|
'checklist_name': get_action_data(payload)['checklist'].get('name'),
|
||||||
}
|
}
|
||||||
return fill_appropriate_message_content(payload, action_type, data)
|
return fill_appropriate_message_content(payload, action_type, data)
|
||||||
|
|
||||||
def get_added_attachment_body(payload, action_type):
|
def get_added_attachment_body(payload, action_type):
|
||||||
# type: (Mapping[str, Any], Text) -> Text
|
# type: (Mapping[str, Any], Text) -> Text
|
||||||
data = {
|
data = {
|
||||||
'attachment_url': get_action_data(payload).get('attachment').get('url'),
|
'attachment_url': get_action_data(payload)['attachment'].get('url'),
|
||||||
'attachment_name': get_action_data(payload).get('attachment').get('name'),
|
'attachment_name': get_action_data(payload)['attachment'].get('name'),
|
||||||
}
|
}
|
||||||
return fill_appropriate_message_content(payload, action_type, data)
|
return fill_appropriate_message_content(payload, action_type, data)
|
||||||
|
|
||||||
@@ -115,16 +118,17 @@ def get_updated_card_body(payload, action_type):
|
|||||||
# type: (Mapping[str, Any], Text) -> Text
|
# type: (Mapping[str, Any], Text) -> Text
|
||||||
data = {
|
data = {
|
||||||
'card_name': get_card_name(payload),
|
'card_name': get_card_name(payload),
|
||||||
'old_list': get_action_data(payload).get('listBefore').get('name'),
|
'old_list': get_action_data(payload)['listBefore'].get('name'),
|
||||||
'new_list': get_action_data(payload).get('listAfter').get('name'),
|
'new_list': get_action_data(payload)['listAfter'].get('name'),
|
||||||
}
|
}
|
||||||
return fill_appropriate_message_content(payload, action_type, data)
|
return fill_appropriate_message_content(payload, action_type, data)
|
||||||
|
|
||||||
def get_renamed_card_body(payload, action_type):
|
def get_renamed_card_body(payload, action_type):
|
||||||
# type: (Mapping[str, Any], Text) -> Text
|
# type: (Mapping[str, Any], Text) -> Text
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'old_name': get_action_data(payload).get('old').get('name'),
|
'old_name': get_action_data(payload)['old'].get('name'),
|
||||||
'new_name': get_action_data(payload).get('card').get('name'),
|
'new_name': get_action_data(payload)['old'].get('name'),
|
||||||
}
|
}
|
||||||
return fill_appropriate_message_content(payload, action_type, data)
|
return fill_appropriate_message_content(payload, action_type, data)
|
||||||
|
|
||||||
@@ -139,22 +143,22 @@ def get_added_label_body(payload, action_type):
|
|||||||
def get_managed_member_body(payload, action_type):
|
def get_managed_member_body(payload, action_type):
|
||||||
# type: (Mapping[str, Any], Text) -> Text
|
# type: (Mapping[str, Any], Text) -> Text
|
||||||
data = {
|
data = {
|
||||||
'member_name': payload.get('action').get('member').get('fullName')
|
'member_name': payload['action']['member'].get('fullName')
|
||||||
}
|
}
|
||||||
return fill_appropriate_message_content(payload, action_type, data)
|
return fill_appropriate_message_content(payload, action_type, data)
|
||||||
|
|
||||||
def get_managed_due_date_body(payload, action_type):
|
def get_managed_due_date_body(payload, action_type):
|
||||||
# type: (Mapping[str, Any], Text) -> Text
|
# type: (Mapping[str, Any], Text) -> Text
|
||||||
data = {
|
data = {
|
||||||
'due_date': prettify_date(get_action_data(payload).get('card').get('due'))
|
'due_date': prettify_date(get_action_data(payload)['card'].get('due'))
|
||||||
}
|
}
|
||||||
return fill_appropriate_message_content(payload, action_type, data)
|
return fill_appropriate_message_content(payload, action_type, data)
|
||||||
|
|
||||||
def get_changed_due_date_body(payload, action_type):
|
def get_changed_due_date_body(payload, action_type):
|
||||||
# type: (Mapping[str, Any], Text) -> Text
|
# type: (Mapping[str, Any], Text) -> Text
|
||||||
data = {
|
data = {
|
||||||
'due_date': prettify_date(get_action_data(payload).get('card').get('due')),
|
'due_date': prettify_date(get_action_data(payload)['card'].get('due')),
|
||||||
'old_due_date': prettify_date(get_action_data(payload).get('old').get('due'))
|
'old_due_date': prettify_date(get_action_data(payload)['old'].get('due'))
|
||||||
}
|
}
|
||||||
return fill_appropriate_message_content(payload, action_type, data)
|
return fill_appropriate_message_content(payload, action_type, data)
|
||||||
|
|
||||||
@@ -175,19 +179,19 @@ def get_filled_card_url_template(payload):
|
|||||||
|
|
||||||
def get_card_url(payload):
|
def get_card_url(payload):
|
||||||
# type: (Mapping[str, Any]) -> Text
|
# type: (Mapping[str, Any]) -> Text
|
||||||
return u'https://trello.com/c/{}'.format(get_action_data(payload).get('card').get('shortLink'))
|
return u'https://trello.com/c/{}'.format(get_action_data(payload)['card'].get('shortLink'))
|
||||||
|
|
||||||
def get_message_body(action_type):
|
def get_message_body(action_type):
|
||||||
# type: (Text) -> Text
|
# type: (Text) -> Text
|
||||||
return ACTIONS_TO_MESSAGE_MAPPER.get(action_type)
|
return ACTIONS_TO_MESSAGE_MAPPER[action_type]
|
||||||
|
|
||||||
def get_card_name(payload):
|
def get_card_name(payload):
|
||||||
# type: (Mapping[str, Any]) -> Text
|
# type: (Mapping[str, Any]) -> Text
|
||||||
return get_action_data(payload).get('card').get('name')
|
return get_action_data(payload)['card'].get('name')
|
||||||
|
|
||||||
def get_action_data(payload):
|
def get_action_data(payload):
|
||||||
# type: (Mapping[str, Any]) -> Mapping[str, Any]
|
# type: (Mapping[str, Any]) -> Mapping[str, Any]
|
||||||
return payload.get('action').get('data')
|
return payload['action'].get('data')
|
||||||
|
|
||||||
ACTIONS_TO_FILL_BODY_MAPPER = {
|
ACTIONS_TO_FILL_BODY_MAPPER = {
|
||||||
CREATE: get_body_by_action_type_without_data,
|
CREATE: get_body_by_action_type_without_data,
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ import ujson
|
|||||||
|
|
||||||
@api_key_only_webhook_view('Yo')
|
@api_key_only_webhook_view('Yo')
|
||||||
@has_request_variables
|
@has_request_variables
|
||||||
def api_yo_app_webhook(request, user_profile, email=REQ(default=None),
|
def api_yo_app_webhook(request, user_profile, email=REQ(default=""),
|
||||||
username=REQ(default='Yo Bot'), topic=REQ(default=None),
|
username=REQ(default='Yo Bot'), topic=REQ(default=None),
|
||||||
user_ip=REQ(default=None)):
|
user_ip=REQ(default=None)):
|
||||||
# type: (HttpRequest, UserProfile, Optional[str], str, Optional[str], Optional[str]) -> HttpResponse
|
# type: (HttpRequest, UserProfile, str, str, Optional[str], Optional[str]) -> HttpResponse
|
||||||
|
|
||||||
body = ('Yo from %s') % (username,)
|
body = ('Yo from %s') % (username,)
|
||||||
check_send_message(user_profile, request.client, 'private', [email], topic, body)
|
check_send_message(user_profile, request.client, 'private', [email], topic, body)
|
||||||
|
|||||||
Reference in New Issue
Block a user