From b8b9d9f71521aae1fcb1b8f9158daa8376379b16 Mon Sep 17 00:00:00 2001 From: Mauricio Baeza Date: Tue, 7 Sep 2021 23:07:17 -0500 Subject: [PATCH] Capture network errors --- source/acloud/server.py | 61 +++++++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 21 deletions(-) diff --git a/source/acloud/server.py b/source/acloud/server.py index 9ccbb90..575219e 100644 --- a/source/acloud/server.py +++ b/source/acloud/server.py @@ -19,6 +19,7 @@ import json import logging import requests +from requests.exceptions import ConnectionError, Timeout LOG_FORMAT = '%(asctime)s - %(levelname)s - %(message)s' @@ -35,6 +36,9 @@ STATUS = { 'OK': 200, 'INVALID': 422, } +METHODS = { + 'AUTH': 'auth/login', +} class ACloudServer(object): @@ -60,19 +64,37 @@ class ACloudServer(object): def token(self, value): self._token = value - def _post(self, method, data): - headers = { - 'Authorization': f'Bearer {self.token}', - 'accept': 'application/json' - } + def _post(self, method, data, headers={}): + if not headers: + headers = { + 'Authorization': f'Bearer {self.token}', + 'accept': 'application/json', + } url = f'{self._server}/{method}' - result = requests.post(url, data=data, headers=headers) + try: + response = requests.post(url, data=data, headers=headers, timeout=TIMEOUT) + except ConnectionError: + self._error = 'ConnectionError' + log.error('ConnectionError') + except Timeout: + self._error = 'Timeout' + log.error('Timeout') - print(1, result.status_code) - print(2, result) + if self.error: + return - self._status = result.status_code - return result.json() + self._status = response.status_code + data = response.json() + # ~ log.debug(data) + + if self.status == STATUS['OK']: + return data + + if self.status == STATUS['INVALID']: + self._error = data['errors'] + log.error(self.error) + + return def _delete(self, method, params): headers = { @@ -86,18 +108,15 @@ class ACloudServer(object): return response.json() def login(self, user, contra, token_name='token'): - data = {'email': user, 'password': contra, 'token_name': token_name} - result = requests.post(f'{self._server}/auth/login', data=data) + data = { + 'email': user, + 'password': contra, + 'token_name': token_name + } + headers = {'accept': 'application/json'} + data = self._post(METHODS['AUTH'], data, headers) - data = result.json() - if result.status_code == STATUS['INVALID']: - self._error = data['errors'] - log.error(self.error) - return False - - if result.status_code != STATUS['OK']: - self._error = data['errors'] - log.error(self.error) + if self.error: return False self._token = data['user']['access_token']