Skip to content

Commit d23c1b4

Browse files
authored
Add context for error; fix for Issue #9751 (#12633)
* Add context for error; fix for Issue #9751 * translate TypeError into a user friendly error message * test for unexpected results from search * fixed broken unexpected results test
1 parent f37e5ed commit d23c1b4

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

conans/client/rest/rest_client_common.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,12 @@ def search(self, pattern=None, ignorecase=True):
242242
"""
243243
url = self.router.search(pattern, ignorecase)
244244
response = self.get_json(url)["results"]
245-
return [ConanFileReference.loads(reference) for reference in response]
245+
try:
246+
return [ConanFileReference.loads(reference) for reference in response]
247+
except TypeError as te:
248+
raise ConanException("Unexpected response from server.\n"
249+
"URL: `{}`\n"
250+
"Expected an iterable, but got {}.".format(url, type(response)))
246251

247252
def search_packages(self, ref):
248253
"""Client is filtering by the query"""

conans/test/unittests/client/rest/rest_client_v1/test_get_package_manifest.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,15 @@ def test_corrupted_manifest(self):
3333
" from remote ({})".format(pref, remote_url),
3434
str(exc.exception))
3535
self.assertIn("invalid literal for int() with base 10", str(exc.exception))
36+
37+
def test_unexpected_results_from_search(self):
38+
remote_url = "http://some.url"
39+
with patch.object(RestV1Methods, "get_json", return_value={"results": None}):
40+
v1 = RestV1Methods(remote_url, token=None, custom_headers=None, output=None,
41+
requester=None, config=None, verify_ssl=None)
42+
with self.assertRaises(ConanException) as exc:
43+
v1.search()
44+
45+
self.assertIn("Unexpected response from server.\n"
46+
"URL: `http://some.url/v1/conans/search`\n"
47+
"Expected an iterable, but got <class 'NoneType'>.", str(exc.exception))

conans/test/unittests/client/rest/rest_client_v2/test_get_package_manifest.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,15 @@ def test_corrupted_manifest(self):
3030
" from remote ({})".format(pref.full_str(), remote_url),
3131
str(exc.exception))
3232
self.assertIn("invalid literal for int() with base 10", str(exc.exception))
33+
34+
def test_unexpected_results_from_search(self):
35+
remote_url = "http://some.url"
36+
with patch.object(RestV2Methods, "get_json", return_value={"results": None}):
37+
v2 = RestV2Methods(remote_url, token=None, custom_headers=None, output=None,
38+
requester=None, config=None, verify_ssl=None)
39+
with self.assertRaises(ConanException) as exc:
40+
v2.search()
41+
42+
self.assertIn("Unexpected response from server.\n"
43+
"URL: `http://some.url/v2/conans/search`\n"
44+
"Expected an iterable, but got <class 'NoneType'>.", str(exc.exception))

0 commit comments

Comments
 (0)