Skip to content

Commit d3f1d55

Browse files
authored
Merge pull request #686 from wilkmar/retry_launchpad_request
Add retry mechanism for the Launchpad API
2 parents 8db3638 + 4fa84bf commit d3f1d55

2 files changed

Lines changed: 18 additions & 3 deletions

File tree

unit_tests/utilities/test_zaza_utilities_launchpad.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
class TestUtilitiesLaunchpad(ut_utils.BaseTestCase):
2323

2424
def test_get_ubuntu_series(self):
25-
self.patch_object(launchpad.requests, 'get')
25+
self.patch_object(launchpad.requests.Session, 'get')
2626
expect = {'entries': {}}
2727
r = unittest.mock.MagicMock()
2828
r.text = json.dumps(expect)

zaza/utilities/launchpad.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import json
1717
import requests
1818
import typing
19+
from requests.adapters import HTTPAdapter
20+
from requests.packages.urllib3.util.retry import Retry
1921

2022

2123
def get_ubuntu_series(
@@ -26,8 +28,21 @@ def get_ubuntu_series(
2628
https://launchpad.net/+apidoc/devel.html#distribution
2729
https://launchpad.net/+apidoc/devel.html#distro_series
2830
"""
29-
r = requests.get('https://api.launchpad.net/devel/ubuntu/series')
30-
return json.loads(r.text)
31+
retries = Retry(
32+
total=10,
33+
backoff_factor=2,
34+
status_forcelist=[429, 500, 502, 503, 504],
35+
allowed_methods=["GET"]
36+
)
37+
s = requests.Session()
38+
s.mount("https://", HTTPAdapter(max_retries=retries))
39+
40+
try:
41+
r = s.get('https://api.launchpad.net/devel/ubuntu/series')
42+
r.raise_for_status()
43+
return json.loads(r.text)
44+
finally:
45+
s.close()
3146

3247

3348
def get_ubuntu_series_by_version() -> typing.Dict[str, typing.Dict[str, any]]:

0 commit comments

Comments
 (0)