Source code for omxware.config.Connection
# -*- coding: utf-8 -*-
import requests
import simplejson as json
import urllib3
from omxware import OmxResponse
from omxware.config.Configuration import Configuration
from omxware.exceptions.ServiceException import ServiceException
# Disable the SSL warning
urllib3.disable_warnings()
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
[docs]class Connection:
"""OMXWare connect class"""
__hosturl = ''
__token = ''
# session: requests.Session
# config: Configuration
__headers = {}
def __init__(self, config: Configuration):
self.__config = config
self.__hosturl = config.server_url()
self.__token = config.token()
def __setHeaders(self):
self.__token = self.__config.token()
self.token = self.config().auth_token()
user_email = self.__config.user_info().get('email')
self.__headers = {
'From': ''+user_email,
'User-Agent': 'application/json',
'Authorization': 'Bearer '+self.token
}
[docs] def connect(self):
self.__token = self.__config.token()
"""Connect to the OMXWare services"""
self.__session = requests.Session()
self.__setHeaders()
[docs] def config(self):
return self.__config
[docs] def get(self, methodurl, headers: {}, payload=None):
"""Issue a HTTP GET request
Arguments:
methodurl -- relative path to the GET method
headers -- HTTP headers
payload -- (optional) additional payload (HTTP body)
"""
self.connect()
if self.__session is None:
raise Exception("No connection has been established")
headers.update(self.__headers)
hu = self.__hosturl
hu = hu + methodurl
response = self.__session.get(
hu,
verify=False,
params=payload,
headers=headers
)
# TODO: OmxResponse should be able to handle the response.status_code as well
if response.status_code < 200 or response.status_code >= 300:
raise self._process_http_response(response)
r = OmxResponse.OmxResponse(self, response)
return r
[docs] def get_file(self, methodurl, headers: {}, payload=None):
"""Issue a HTTP GET request to get a files as a String
Arguments:
methodurl -- relative path to the GET method
headers -- HTTP headers
payload -- (optional) additional payload (HTTP body)
"""
self.connect()
if self.__session is None:
raise Exception("No connection has been established")
headers.update(self.__headers)
response = self.__session.get(
self.__hosturl + methodurl,
verify=False,
params=payload,
headers=headers
)
# TODO: OmxResponse should be able to handle the response.status_code as well
if response.status_code < 200 or response.status_code >= 300:
raise self._process_http_response(response)
r = response.text
return r
[docs] def post(self, methodurl, parameters=None, headers={}, files=None):
"""Issue a HTTP POST request
Arguments:
methodurl -- relative path to the POST method
parameters -- (optional) form parameters
headers -- (optional) HTTP headers
files -- (optional) multi-part form file content
"""
self.connect()
if self.__session is None:
raise Exception("No connection has been established")
headers.update(self.__headers)
response = self.__session.post(
self.__hosturl + methodurl,
data=parameters,
verify=False,
headers=headers,
files=files
)
if response.status_code < 200 or response.status_code >= 300:
raise self._process_http_response(response)
return OmxResponse(self, response)
[docs] def delete(self, methodurl, headers={}, payload=None):
"""Issue a HTTP DELETE request
Arguments:
methodurl -- relative path to the POST method
headers -- HTTP headers
payload -- (optional) additional payload (HTTP body)
"""
self.connect()
if self.__session is None:
raise Exception("No connection has been established")
headers.update(self.headers)
response = self.__session.delete(self.hosturl + methodurl, verify=False, params=payload, headers=headers)
if response.status_code < 200 or response.status_code >= 300:
raise self._process_http_response(response)
return response
[docs] def disconnect(self):
"""Disconnect from OMXWare services"""
if self.__session is None:
raise Exception("No connection has been established")
self.__session.close()
self.__session = None
def _process_http_response(self, response):
"""Internal method for processing HTTP response"""
try:
responseJ = json.loads(response.text)
except SyntaxError:
return ServiceException(response.text, response.status_code)
except ValueError:
return ServiceException(response.text, response.status_code)
return ServiceException(responseJ['message'], response.status_code)