From e6715a752d3bdfadbd26642297a0b143f0bd870d Mon Sep 17 00:00:00 2001 From: Aurélien Bompard Date: Aug 25 2017 10:03:34 +0000 Subject: Protect get_user_packages from malformed JSON --- diff --git a/hubs/tests/utils/test_packages.py b/hubs/tests/utils/test_packages.py index 5b258d1..bb50742 100644 --- a/hubs/tests/utils/test_packages.py +++ b/hubs/tests/utils/test_packages.py @@ -63,3 +63,13 @@ class PackageUtilsTest(APPTest): get_user_packages("abompard", use_cache=True) self.assertTrue(self._is_cached()) self.assertEqual(requests.get.call_count, 1) + + @patch("hubs.utils.packages.requests") + def test_get_user_packages_malformed(self, requests): + response = Mock() + response.json.return_value = { + "error": "something bad happened" + } + requests.get.return_value = response + pkgs = get_user_packages("abompard", use_cache=False) + self.assertListEqual(pkgs, []) diff --git a/hubs/utils/packages.py b/hubs/utils/packages.py index 0335ceb..e2276e6 100644 --- a/hubs/utils/packages.py +++ b/hubs/utils/packages.py @@ -40,8 +40,15 @@ def get_user_packages(username, only_owned=False, use_cache=True): "Invalid JSON response getting the list of packages " "owned by %s: %s", username, response.text) return [] + try: + repos = data["repos"] + except KeyError: + log.warning( + "Malformed JSON response getting the list of packages " + "owned by %s: %s", username, response.text) + return [] return sorted(set( - repo['name'] for repo in data["repos"] + repo['name'] for repo in repos if not only_owned or repo["user"]["name"] == username )) if not use_cache: