From aac5b57a26c0bfef569c4c04df334344e8e6f339 Mon Sep 17 00:00:00 2001 From: Martin Basti Date: Mar 29 2017 20:08:44 +0000 Subject: issues api: deduplicate getting issues This copy paste can be replaced by function --- diff --git a/pagure/api/issue.py b/pagure/api/issue.py index 0540ba8..e56918d 100644 --- a/pagure/api/issue.py +++ b/pagure/api/issue.py @@ -59,6 +59,22 @@ def _check_token(repo): 401, error_code=APIERROR.EINVALIDTOK) +def _get_issue(repo, issueid, issueuid=None): + """Get issue and check permissions + :param repo: repository name + :param issueid: issue ID + :param issueuid: issue Unique ID + :raises pagure.exceptions.APIError: when issues doesn't exists + :return: issue + """ + issue = pagure.lib.search_issues(SESSION, repo, issueid=issueid, issueuid=issueuid) + + if issue is None or issue.project != repo: + raise pagure.exceptions.APIError(404, error_code=APIERROR.ENOISSUE) + + return issue + + @API.route('//new_issue', methods=['POST']) @API.route('///new_issue', methods=['POST']) @API.route('/fork///new_issue', methods=['POST']) @@ -476,11 +492,7 @@ def api_view_issue(repo, issueid, username=None, namespace=None): except (ValueError, TypeError): issue_uid = issueid - issue = pagure.lib.search_issues( - SESSION, repo, issueid=issue_id, issueuid=issue_uid) - - if issue is None or issue.project != repo: - raise pagure.exceptions.APIError(404, error_code=APIERROR.ENOISSUE) + issue = _get_issue(repo, issue_id, issueuid=issue_uid) if issue.private and not is_repo_committer(repo) \ and (not api_authenticated() or @@ -551,11 +563,7 @@ def api_view_issue_comment( except (ValueError, TypeError): issue_uid = issueid - issue = pagure.lib.search_issues( - SESSION, repo, issueid=issue_id, issueuid=issue_uid) - - if issue is None or issue.project != repo: - raise pagure.exceptions.APIError(404, error_code=APIERROR.ENOISSUE) + issue = _get_issue(repo, issue_id, issueuid=issue_uid) if issue.private and not is_repo_committer(issue.project) \ and (not api_authenticated() or @@ -632,10 +640,7 @@ def api_change_status_issue(repo, issueid, username=None, namespace=None): _check_token(repo) - issue = pagure.lib.search_issues(SESSION, repo, issueid=issueid) - - if issue is None or issue.project != repo: - raise pagure.exceptions.APIError(404, error_code=APIERROR.ENOISSUE) + issue = _get_issue(repo, issueid) if issue.private and not is_repo_committer(repo) \ and (not api_authenticated() or @@ -751,10 +756,7 @@ def api_change_milestone_issue(repo, issueid, username=None, namespace=None): _check_token(repo) - issue = pagure.lib.search_issues(SESSION, repo, issueid=issueid) - - if issue is None or issue.project != repo: - raise pagure.exceptions.APIError(404, error_code=APIERROR.ENOISSUE) + issue = _get_issue(repo, issueid) if issue.private and not is_repo_committer(repo) \ and (not api_authenticated() or @@ -861,10 +863,7 @@ def api_comment_issue(repo, issueid, username=None, namespace=None): raise pagure.exceptions.APIError( 401, error_code=APIERROR.EINVALIDTOK) - issue = pagure.lib.search_issues(SESSION, repo, issueid=issueid) - - if issue is None or issue.project != repo: - raise pagure.exceptions.APIError(404, error_code=APIERROR.ENOISSUE) + issue = _get_issue(repo, issueid) if issue.private and not is_repo_committer(repo) \ and (not api_authenticated() or @@ -949,10 +948,7 @@ def api_assign_issue(repo, issueid, username=None, namespace=None): _check_token(repo) - issue = pagure.lib.search_issues(SESSION, repo, issueid=issueid) - - if issue is None or issue.project != repo: - raise pagure.exceptions.APIError(404, error_code=APIERROR.ENOISSUE) + issue = _get_issue(repo, issueid) if issue.private and not is_repo_committer(repo) \ and (not api_authenticated() or @@ -1055,10 +1051,7 @@ def api_subscribe_issue(repo, issueid, username=None, namespace=None): _check_token(repo) - issue = pagure.lib.search_issues(SESSION, repo, issueid=issueid) - - if issue is None or issue.project != repo: - raise pagure.exceptions.APIError(404, error_code=APIERROR.ENOISSUE) + issue = _get_issue(repo, issueid) if issue.private and not is_repo_admin(repo) \ and (not api_authenticated() or @@ -1146,10 +1139,7 @@ def api_update_custom_field( _check_token(repo) - issue = pagure.lib.search_issues(SESSION, repo, issueid=issueid) - - if issue is None or issue.project != repo: - raise pagure.exceptions.APIError(404, error_code=APIERROR.ENOISSUE) + issue = _get_issue(repo, issueid) if issue.private and not is_repo_admin(repo) \ and (not api_authenticated() or