Merge "[docs] Update mailing list to use #yardstick" into stable/gambia
[yardstick.git] / yardstick / common / httpClient.py
index ab2e9a3..5b78311 100644 (file)
@@ -6,9 +6,12 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
-import json
+from __future__ import absolute_import
+
 import logging
+import time
 
+from oslo_serialization import jsonutils
 import requests
 
 logger = logging.getLogger(__name__)
@@ -16,15 +19,24 @@ logger = logging.getLogger(__name__)
 
 class HttpClient(object):
 
-    def post(self, url, data):
-        data = json.dumps(data)
+    def post(self, url, data, timeout=0):
+        data = jsonutils.dump_as_bytes(data)
         headers = {'Content-Type': 'application/json'}
-        try:
-            response = requests.post(url, data=data, headers=headers)
-            result = response.json()
-            logger.debug('The result is: %s', result)
+        t_end = time.time() + timeout
+        while True:
+            try:
+                response = requests.post(url, data=data, headers=headers)
+                response.raise_for_status()
+                result = response.json()
+                logger.debug('The result is: %s', result)
+                return result
+            except Exception: # pylint: disable=broad-except
+                if time.time() > t_end:
+                    logger.exception('')
+                    raise
+            time.sleep(1)
 
-            return result
-        except Exception as e:
-            logger.debug('Failed: %s', e)
-            raise
+    def get(self, url):
+        response = requests.get(url)
+        response.raise_for_status()
+        return response.json()