From a66bbafa4c7a2738fa45f8f64c22813d25d10d57 Mon Sep 17 00:00:00 2001 From: Ondrej Nosek Date: Feb 14 2019 14:18:29 +0000 Subject: Show hint when Pagure token expires Fixes: #285 Signed-off-by: Ondrej Nosek --- diff --git a/fedpkg/cli.py b/fedpkg/cli.py index 5b943ca..abd8b80 100644 --- a/fedpkg/cli.py +++ b/fedpkg/cli.py @@ -855,7 +855,7 @@ targets to build the package for a particular stream. pagure_url = config.get('{0}.pagure'.format(name), 'url') pagure_token = get_pagure_token(config, name) print(new_pagure_issue( - pagure_url, pagure_token, ticket_title, ticket_body)) + pagure_url, pagure_token, ticket_title, ticket_body, name)) def request_branch(self): if self.args.repo_name_for_branch: @@ -982,7 +982,7 @@ targets to build the package for a particular stream. b, ns, repo_name) print(new_pagure_issue( - pagure_url, pagure_token, ticket_title, ticket_body)) + pagure_url, pagure_token, ticket_title, ticket_body, name)) # For non-standard rpm branch requests, also request a matching new # module repo with a matching branch. diff --git a/fedpkg/utils.py b/fedpkg/utils.py index d81f7d5..dcb29ef 100644 --- a/fedpkg/utils.py +++ b/fedpkg/utils.py @@ -87,7 +87,7 @@ def get_sl_type(url, sl_name): return None -def new_pagure_issue(url, token, title, body): +def new_pagure_issue(url, token, title, body, cli_name): """ Posts a new Pagure issue :param url: a string of the URL to Pagure @@ -127,6 +127,11 @@ def new_pagure_issue(url, token, title, body): rv_error = rv.json().get('error') except ValueError: rv_error = rv.text + # show hint for expired token + if re.search(r"Invalid or expired token", rv_error, re.IGNORECASE): + base_error_msg += '\nFor invalid or expired token refer to ' \ + '"{0} request-repo -h" to set a token in your user ' \ + 'configuration.'.format(cli_name) raise rpkgError(base_error_msg.format(rv_error)) return '{0}/releng/fedora-scm-requests/issue/{1}'.format( diff --git a/test/test_utils.py b/test/test_utils.py index 504d3a9..74db227 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -357,7 +357,7 @@ class TestNewPagureIssue(unittest.TestCase): six.assertRaisesRegex( self, rpkgError, 'The connection to Pagure failed', utils.new_pagure_issue, - 'http://distgit/', '123456', 'new package', {'repo': 'pkg1'}) + 'http://distgit/', '123456', 'new package', {'repo': 'pkg1'}, 'fedpkg') def test_responses_not_ok_and_response_body_is_not_json(self, post): rv = Mock(ok=False, text='error') @@ -368,7 +368,22 @@ class TestNewPagureIssue(unittest.TestCase): self, rpkgError, 'The following error occurred while creating a new issue', utils.new_pagure_issue, - 'http://distgit/', '123456', 'new package', {'repo': 'pkg1'}) + 'http://distgit/', '123456', 'new package', {'repo': 'pkg1'}, 'fedpkg') + + def test_responses_not_ok_when_token_is_expired(self, post): + rv = Mock( + ok=False, + text='Invalid or expired token. Please visit ' + 'https://pagure.io/settings#api-keys to get or renew your API token.') + rv.json.side_effect = ValueError + post.return_value = rv + + six.assertRaisesRegex( + self, rpkgError, + 'For invalid or expired token refer to "fedpkg request-repo -h" to set ' + 'a token in your user configuration.', + utils.new_pagure_issue, + 'http://distgit/', '123456', 'new package', {'repo': 'pkg1'}, 'fedpkg') def test_create_pagure_issue(self, post): rv = Mock(ok=True) @@ -381,7 +396,8 @@ class TestNewPagureIssue(unittest.TestCase): issue_url = utils.new_pagure_issue(pagure_api_url, '123456', 'new package', - issue_ticket_body) + issue_ticket_body, + 'fedpkg',) expected_issue_url = ( '{0}/releng/fedora-scm-requests/issue/1'