Correctly handle pagure project response

If pagure returns 404 when looking for the project it means that project
didn't exist. When this happens just return None instead of raising error.

Signed-off-by: Michal Konečný <mkonecny@redhat.com>
This commit is contained in:
Michal Konečný 2022-08-24 17:29:38 +02:00
parent 4a9894c86a
commit 16ab7a52ff
2 changed files with 30 additions and 5 deletions

View file

@ -1107,7 +1107,7 @@ class TestPagureGetProject:
Assert that getting project_info works correctly.
"""
response_mock = Mock()
response_mock.status_code = 200
response_mock.ok = True
project_name = "zlopez"
data = {"name": project_name}
@ -1128,14 +1128,37 @@ class TestPagureGetProject:
assert result == data
def test_get_project_doesnt_exist(self):
"""
Assert that getting project_info doesn't return anything if the project doesn't exist.
"""
response_mock = Mock()
response_mock.ok = False
response_mock.status_code = 404
self.pagure._requests_session.get.return_value = response_mock
namespace = "namespace"
repo = "repo"
result = self.pagure.get_project(namespace, repo)
self.pagure._requests_session.get.assert_called_with(
"https://pagure.io/api/0/{0}/{1}".format(namespace, repo),
headers=self.pagure.get_auth_header(),
)
assert result is None
def test_get_project_failure(self):
"""
Assert that failing to get project data is handled correctly.
"""
response_mock = Mock()
response_mock.ok = False
response_mock.status_code = 500
self.pagure._requests_session.get.side_effect = response_mock
self.pagure._requests_session.get.return_value = response_mock
namespace = "namespace"
repo = "repo"

View file

@ -555,13 +555,15 @@ class Pagure:
log.debug("Getting project '{0}/{1}'".format(namespace, repo))
response = self._requests_session.get(contributors_api_url, headers=headers)
if response.status_code != 200:
if response.ok:
result = response.json()
elif response.status_code == 404:
result = None
else:
log.error(
"Error when retrieving project '{0}/{1}'. "
"Got status_code '{2}'.".format(namespace, repo, response.status_code)
)
raise PagureError("Couldn't get project '{0}/{1}'".format(namespace, repo))
result = response.json()
return result