init
This commit is contained in:
66
web/commons/vendors/__init__.py
vendored
Normal file
66
web/commons/vendors/__init__.py
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
from urllib.parse import urlencode
|
||||
|
||||
import requests
|
||||
|
||||
|
||||
class ApiException(Exception):
|
||||
def __init__(self, code, message):
|
||||
self.code = code
|
||||
self.message = message
|
||||
super().__init__()
|
||||
|
||||
def __str__(self):
|
||||
return self.message
|
||||
|
||||
|
||||
class BaseClient:
|
||||
gateway = None
|
||||
timeout = 10
|
||||
max_retries = 3
|
||||
|
||||
def _build_url(self, interface, params, query=None, files=None):
|
||||
method, uri = interface
|
||||
|
||||
query_params = query or {}
|
||||
if params and (method == 'get' or files):
|
||||
query_params.update(params)
|
||||
|
||||
api_url = '{}/{}?{}'.format(self.gateway, uri, urlencode(query_params))
|
||||
return api_url
|
||||
|
||||
def _get_headers(self):
|
||||
return None
|
||||
|
||||
def call(self, interface, params=None, query=None, files=None, max_retries=max_retries, without_unpack=False):
|
||||
method, *_ = interface
|
||||
api_url = self._build_url(interface, params, query, files)
|
||||
headers = self._get_headers()
|
||||
try:
|
||||
if method == 'get':
|
||||
response = requests.request(method, api_url, headers=headers, timeout=self.timeout)
|
||||
else:
|
||||
response = requests.request(
|
||||
method, api_url, headers=headers, timeout=self.timeout, json=params, files=files
|
||||
)
|
||||
except Exception as e:
|
||||
if max_retries > 0:
|
||||
return self.call(interface, params, files=files, max_retries=max_retries - 1)
|
||||
raise ApiException(504, "GATEWAY TIMEOUT") from e
|
||||
|
||||
if without_unpack:
|
||||
return response
|
||||
|
||||
try:
|
||||
data = self.unpack(response)
|
||||
except ApiException as e:
|
||||
raise e
|
||||
except Exception as e:
|
||||
print('BaseClient.call | interface | {}'.format(interface))
|
||||
print('BaseClient.call | api_url | {}'.format(api_url))
|
||||
raise ApiException(502, "BAD GATEWAY") from e
|
||||
|
||||
return data
|
||||
|
||||
@staticmethod
|
||||
def unpack(response):
|
||||
pass
|
Reference in New Issue
Block a user