Source code for vodem.connection
import datetime
import logging
import requests
from .exceptions import RequestsError, InputError
logging.basicConfig()
[docs]class Connection(object):
BASE_URL = 'http://192.168.9.1'
def __init__(self):
self._session = requests.Session()
self._set_headers()
[docs] def get(self, params):
logging.getLogger(__name__).debug('calling post')
logging.getLogger(__name__).debug(params)
self._validate_dict(params)
params.update(self._extra_params())
request = requests.Request('GET', self._get_url(), params=params)
return self._handle_request(request)
[docs] def post(self, data):
logging.getLogger(__name__).debug('calling get')
logging.getLogger(__name__).debug(data)
self._validate_dict(data)
data.update(self._extra_params())
request = requests.Request('POST', self._post_url(), data=data)
return self._handle_request(request)
def _get_url(self):
logging.getLogger(__name__).debug('calling _get_url')
return self.BASE_URL + '/goform/goform_get_cmd_process'
def _post_url(self):
logging.getLogger(__name__).debug('calling _post_url')
return self.BASE_URL + '/goform/goform_set_cmd_process'
def _handle_request(self, request):
logging.getLogger(__name__).debug('calling handle_request')
try:
prepared_request = self._session.prepare_request(request)
logging.getLogger(__name__).debug(
'Request %s', prepared_request.url)
logging.getLogger(__name__).debug(
'Request Method: %s', prepared_request.method)
logging.getLogger(__name__).debug(
'Request Headers: %s', prepared_request.headers)
logging.getLogger(__name__).debug(
'Request Body: %s', prepared_request.body)
response = self._session.send(
prepared_request, stream=True, timeout=(3.05, 120))
response.raise_for_status()
logging.getLogger(__name__).debug('Response %s', response.text)
logging.getLogger(__name__).debug(
'Response Status %s', response.status_code)
logging.getLogger(__name__).debug(
'Response Headers %s', response.headers)
logging.getLogger(__name__).debug(
'Response Cookies %s', response.cookies.items())
return self._decode_json(response)
except requests.RequestException as ex:
logging.getLogger(__name__).error(ex)
raise RequestsError(ex)
def _set_headers(self):
logging.getLogger(__name__).debug('calling _set_headers')
self._session.headers.update({
'Accept': 'application/json, text/javascript, */*; q=0.01',
'X-Requested-With': 'XMLHttpRequest',
'Referer': self.BASE_URL + '/home.htm',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'en-GB,en-US;q=0.8,en;q=0.6',
})
@staticmethod
def _decode_json(response):
logging.getLogger(__name__).debug('calling _decode_json')
try:
return response.json()
except ValueError as ex:
# Incorrectly escaped json is returned in some instances,
# so it must be handled gracefully
logging.getLogger(__name__).debug(ex)
return response.text
@staticmethod
def _extra_params():
logging.getLogger(__name__).debug('calling _extra_params')
delta = datetime.datetime.now() - datetime.datetime(1970, 1, 1)
milliseconds = delta.total_seconds() * 1000
params = {
'_': '{0:13.0f}'.format(milliseconds),
}
return params
@staticmethod
def _validate_dict(params_or_data):
logging.getLogger(__name__).debug('calling _validate_dict')
logging.getLogger(__name__).debug(params_or_data)
if params_or_data is None or isinstance(params_or_data, dict) is False:
raise InputError('Invalid parameters',
params_or_data, type(params_or_data))
for key, val in params_or_data.items():
if key is None or isinstance(key, str) is False or len(key) == 0:
raise InputError('Invalid parameter key', key, val)
if val is None or isinstance(val, str) is False:
raise InputError('Invalid parameter value', key, val)
DEFAULT_CONNECTION = Connection()
[docs]def get(params):
return DEFAULT_CONNECTION.get(params)
[docs]def post(params):
return DEFAULT_CONNECTION.post(params)