From ee289e9e9d33e58bde7184b7adcf88ee1fa40da2 Mon Sep 17 00:00:00 2001 From: Bruno Garcia Date: Wed, 21 Oct 2020 09:45:57 +0200 Subject: [PATCH] Add timeout by default to requests, fix issues when SM is not available --- Interfaces/management.py | 23 +++++++++++++---------- REST/rest_client.py | 20 +++++++++++--------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/Interfaces/management.py b/Interfaces/management.py index 602ba1e..f9a8888 100644 --- a/Interfaces/management.py +++ b/Interfaces/management.py @@ -146,15 +146,18 @@ def GetNsdRequirements(self, nsd: str) -> Optional[Metal]: return None def GetBaseSliceDescriptors(self) -> List[str]: - url = f"{self.api_url}/base_slice_des" - response = self.HttpGet(url, {"Accept": "application/json"}) - data: List[Dict] = self.ResponseToJson(response) - res = [] - for desc in data: - descId = desc.get('Slice_des_ID', desc.get('base_slice_des_id', None)) - if descId is not None: - res.append(descId) - return res - + try: + url = f"{self.api_url}/base_slice_des" + response = self.HttpGet(url, {"Accept": "application/json"}) + data: List[Dict] = self.ResponseToJson(response) + res = [] + for desc in data: + descId = desc.get('Slice_des_ID', desc.get('base_slice_des_id', None)) + if descId is not None: + res.append(descId) + return res + except Exception as e: + Log.E(f"Exception while retrieving Base Slice Descriptors: {e}") + return [] diff --git a/REST/rest_client.py b/REST/rest_client.py index 3364c23..869cd5a 100644 --- a/REST/rest_client.py +++ b/REST/rest_client.py @@ -16,7 +16,7 @@ class Payload(Enum): class RestClient: HEADERS = {'Accept-Language': 'en-US;q=0.5,en;q=0.3'} - RETRIES = 10 + RETRIES = 3 FILENAME_PATTERN = re.compile(r".*filename=\"(.*)\"") def __init__(self, api_host, api_port, suffix, https=False, insecure=False): @@ -69,15 +69,16 @@ def GetFilename(self, content_disposition): return result.group(1) return "unknown_filename" - def HttpGet(self, url, extra_headers=None): + def HttpGet(self, url, extra_headers=None, timeout=10): traceId = self.GetTraceId() extra_headers = {} if extra_headers is None else extra_headers self.Trace(traceId, url, 'GET', headers=extra_headers) - return self.DumpResponse(traceId, self.pool.request('GET', url, headers=extra_headers, retries=self.RETRIES)) + return self.DumpResponse(traceId, self.pool.request('GET', url, headers=extra_headers, + retries=self.RETRIES, timeout=timeout)) def HttpPost(self, url, extra_headers=None, body: Optional[Union[str, Dict]] = None, - files=None, payload: Payload = None): + files=None, payload: Payload = None, timeout=10): traceId = self.GetTraceId() extra_headers = {} if extra_headers is None else extra_headers @@ -101,26 +102,27 @@ def HttpPost(self, url, extra_headers=None, body: Optional[Union[str, Dict]] = N if files is None: return self.DumpResponse(traceId, self.pool.request('POST', url, body=body or '', - headers={**self.HEADERS, **extra_headers}, retries=self.RETRIES)) + headers={**self.HEADERS, **extra_headers}, + retries=self.RETRIES, timeout=timeout)) else: return self.DumpResponse(traceId, post(f"{self.api_url}{url}", data=body, headers={**self.HEADERS, **extra_headers}, files=files, verify=not self.insecure)) - def HttpPatch(self, url, extra_headers=None, body=''): + def HttpPatch(self, url, extra_headers=None, body='', timeout=10): traceId = self.GetTraceId() extra_headers = {} if extra_headers is None else extra_headers self.Trace(traceId, url, 'PATCH', headers=extra_headers, body=body) return self.DumpResponse(traceId, self.pool.request('PATCH', url, body=body, headers={**self.HEADERS, **extra_headers}, - retries=self.RETRIES)) + retries=self.RETRIES, timeout=timeout)) - def HttpDelete(self, url, extra_headers=None): + def HttpDelete(self, url, extra_headers=None, timeout=10): traceId = self.GetTraceId() extra_headers = {} if extra_headers is None else extra_headers self.Trace(traceId, url, 'DELETE', headers=extra_headers) return self.DumpResponse(traceId, self.pool.request('DELETE', url, headers={**self.HEADERS, **extra_headers}, - retries=self.RETRIES)) + retries=self.RETRIES, timeout=timeout)) @staticmethod def ResponseStatusCode(response) -> int: