blob: ec0ef2d600f9799e5b8e49ca2ac9f13e4708ea70 [file] [log] [blame]
# Copyright 2019 AT&T Intellectual Property. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from ONAPLibrary.UUIDKeywords import UUIDKeywords
from RequestsLibrary import RequestsLibrary
import hashlib
from ONAPLibrary.Base64Keywords import Base64Keywords
from ONAPLibrary.HTTPKeywords import HTTPKeywords
from ONAPLibrary.RequestsDecorators import log_wrapped
from ONAPLibrary.RequestsDecorators import default_keywords
class RequestsHelper(object):
""" non keyword methods related to Requests library """
def __init__(self):
super(RequestsHelper, self).__init__()
self.uuid = UUIDKeywords()
self.application_id = "robot-ete"
self.requests = RequestsLibrary()
self.http = HTTPKeywords()
@default_keywords
@log_wrapped
def get_request(self, **kwargs):
"""Runs a get request"""
return self.requests.get_request(alias=kwargs['alias'], uri=kwargs['data_path'],
headers=self._perform_setup(**kwargs))
@default_keywords
@log_wrapped
def post_request(self, **kwargs):
"""Runs a post request"""
kwargs['md5'] = self._format_md5(kwargs['data'])
return self.requests.post_request(alias=kwargs['alias'], uri=kwargs['data_path'], files=kwargs['files'],
data=kwargs['data'], headers=self._perform_setup(**kwargs))
@default_keywords
@log_wrapped
def put_request(self, **kwargs):
"""Runs a put request"""
return self.requests.put_request(alias=kwargs['alias'], uri=kwargs['data_path'], data=kwargs['data'],
headers=self._perform_setup(**kwargs))
@default_keywords
@log_wrapped
def delete_request(self, **kwargs):
"""Runs a delete request"""
return self.requests.delete_request(alias=kwargs['alias'], uri=kwargs['data_path'], data=kwargs['data'],
headers=self._perform_setup(**kwargs))
def _perform_setup(self, **kwargs):
self.http.disable_warnings()
self._create_session(alias=kwargs['alias'], endpoint=kwargs['endpoint'], auth=kwargs['auth'],
client_certs=kwargs['client_certs'])
return self._create_headers(sdc_user_id=kwargs['sdc_user'], accept=kwargs['accept'],
content_type=kwargs['content_type'], md5=kwargs.get("md5", None))
def _create_session(self, alias, endpoint, auth=None, client_certs=None):
if client_certs is not None:
self.requests.create_client_cert_session(alias, endpoint, client_certs=client_certs)
else:
self.requests.create_session(alias, endpoint, auth=auth)
def _create_headers(self, sdc_user_id=None, accept="application/json", content_type="application/json", md5=None):
"""Create the headers that are used by onap"""
uuid = self.uuid.generate_uuid4()
headers = {
"Accept": accept,
"Content-Type": content_type,
"X-TransactionId": self.application_id + "-" + uuid,
"X-FromAppId": self.application_id
}
if sdc_user_id is not None:
headers["USER_ID"] = sdc_user_id
if md5 is not None:
headers["Content-MD5"] = md5
return headers
@staticmethod
def _format_md5(md5_input):
string_input = md5_input
if md5_input is not None:
if isinstance(md5_input, str):
string_input = md5_input.encode('utf-8')
md5 = hashlib.md5()
md5.update(string_input)
return Base64Keywords().base64_encode(md5.hexdigest())
else:
return None