From c761a572ae14368ad002a911d07d14c5c5c1b703 Mon Sep 17 00:00:00 2001 From: SerenaFeng Date: Wed, 14 Mar 2018 16:17:34 +0800 Subject: bugfix: TestAPI Cookie cannot be found Change-Id: Ibab60aba26e30669dddab74ce61ed00197dc86a8 Signed-off-by: SerenaFeng --- .../testapiclient/utils/clientmanager.py | 63 +++++++++++++++++ .../testapiclient/utils/http_client.py | 80 ---------------------- .../testapi-client/testapiclient/utils/identity.py | 38 ---------- .../testapiclient/utils/url_parse.py | 40 ----------- .../testapi-client/testapiclient/utils/urlparse.py | 40 +++++++++++ testapi/testapi-client/testapiclient/utils/user.py | 2 - 6 files changed, 103 insertions(+), 160 deletions(-) create mode 100644 testapi/testapi-client/testapiclient/utils/clientmanager.py delete mode 100644 testapi/testapi-client/testapiclient/utils/http_client.py delete mode 100644 testapi/testapi-client/testapiclient/utils/identity.py delete mode 100644 testapi/testapi-client/testapiclient/utils/url_parse.py create mode 100644 testapi/testapi-client/testapiclient/utils/urlparse.py delete mode 100644 testapi/testapi-client/testapiclient/utils/user.py (limited to 'testapi/testapi-client/testapiclient/utils') diff --git a/testapi/testapi-client/testapiclient/utils/clientmanager.py b/testapi/testapi-client/testapiclient/utils/clientmanager.py new file mode 100644 index 0000000..7e4e630 --- /dev/null +++ b/testapi/testapi-client/testapiclient/utils/clientmanager.py @@ -0,0 +1,63 @@ +import httplib +import json +import os +import urllib + +import requests + + +class ClientManager(object): + headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} + + def __init__(self, cli_options=None): + self.cli_options = cli_options + self.session = requests.Session() + + def auth(self): + hostname = '{}{}{}'.format(os.environ.get('testapi_cas_auth_url'), + urllib.quote(os.environ.get('testapi_url')), + os.environ.get('testapi_cas_signin_return')) + data = { + 'name': self.cli_options.u, + 'pass': self.cli_options.p, + 'form_id': 'user_login' + } + response = self.session.post(hostname, data) + if "login" in response.text: + raise Exception('Authenticate failed') + + def get(self, url): + return self._parse_response('Get', + self._request('get', url, + headers=self.headers)) + + def post(self, url, data): + return self._parse_response('Create', + self._request('post', url, + data=json.dumps(data), + headers=self.headers)) + + def put(self, url, data): + return self._parse_response('Update', + self._request('put', url, + data=json.dumps(data), + headers=self.headers)) + + def delete(self, url, *args): + data = json.dumps(args[0]) if len(args) > 0 else None + return self._parse_response('Delete', + self._request('delete', url, + data=data, + headers=self.headers)) + + def _request(self, method, *args, **kwargs): + return getattr(self.session, method)(*args, **kwargs) + + def _raise_failure(self, op, response): + raise Exception('{} failed: {}'.format(op, response.reason)) + + def _parse_response(self, op, response): + if response.status_code == httplib.OK: + return response.json() if op != 'Delete' else None + else: + self._raise_failure(op, response) diff --git a/testapi/testapi-client/testapiclient/utils/http_client.py b/testapi/testapi-client/testapiclient/utils/http_client.py deleted file mode 100644 index 359dd14..0000000 --- a/testapi/testapi-client/testapiclient/utils/http_client.py +++ /dev/null @@ -1,80 +0,0 @@ -import httplib -import json - -import requests - -from testapiclient.utils import user - - -class HTTPClient(object): - - __instance = None - headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} - - @staticmethod - def get_Instance(): - """ Static access method. """ - if HTTPClient.__instance is None: - HTTPClient() - return HTTPClient.__instance - - def __init__(self): - """ Virtually private constructor. """ - if HTTPClient.__instance is not None: - raise Exception("This class is a singleton!") - else: - HTTPClient.__instance = self - - def get(self, url): - return self._parse_response('Get', requests.get(url)) - - def post(self, url, data): - return self._parse_response('Create', - self._request('post', url, - data=json.dumps(data), - headers=self.headers)) - - def put(self, url, data): - return self._parse_response('Update', - self._request('put', url, - data=json.dumps(data), - headers=self.headers)) - - def delete(self, url, *args): - data = json.dumps(args[0]) if len(args) > 0 else None - return self._parse_response('Delete', - self._request('delete', url, - data=data, - headers=self.headers)) - - def _request(self, method, *args, **kwargs): - return getattr(user.User.session, method)(*args, **kwargs) - - def _raise_failure(self, op, response): - raise Exception('{} failed: {}'.format(op, response.reason)) - - def _parse_response(self, op, response): - if response.status_code == httplib.OK: - return response.json() if op != 'Delete' else None - else: - self._raise_failure(op, response) - - -def _request(method, *args, **kwargs): - return getattr(HTTPClient.get_Instance(), method)(*args, **kwargs) - - -def get(url): - return _request('get', url) - - -def post(url, data): - return _request('post', url, data) - - -def put(url, data): - return _request('put', url, data) - - -def delete(url, data=None): - return _request('delete', url, data) diff --git a/testapi/testapi-client/testapiclient/utils/identity.py b/testapi/testapi-client/testapiclient/utils/identity.py deleted file mode 100644 index a00dd87..0000000 --- a/testapi/testapi-client/testapiclient/utils/identity.py +++ /dev/null @@ -1,38 +0,0 @@ -import functools -import os -import urllib - -import requests - -from testapiclient.utils import user - - -def _authenticate(username, password): - session = requests.Session() - hostname = '{}{}{}'.format(os.environ.get('testapi_cas_auth_url'), - urllib.quote(os.environ.get('testapi_url')), - os.environ.get('testapi_cas_signin_return')) - data = { - 'name': username, - 'pass': password, - 'form_id': 'user_login' - } - response = session.post(hostname, data) - if "login" not in response.text: - user.User.session = session - return response - - -def authenticate(xstep): - @functools.wraps(xstep) - def wrapper(self, parsed_args): - if(user.User.session is None): - username = parsed_args.u - password = parsed_args.p - if(username and password): - response = _authenticate(username, password) - if "login" in response.text: - print "Authentication has failed." - return - return xstep(self, parsed_args) - return wrapper diff --git a/testapi/testapi-client/testapiclient/utils/url_parse.py b/testapi/testapi-client/testapiclient/utils/url_parse.py deleted file mode 100644 index 9f99a46..0000000 --- a/testapi/testapi-client/testapiclient/utils/url_parse.py +++ /dev/null @@ -1,40 +0,0 @@ -import os - -from six.moves.urllib import parse - - -def path_join(base, *urls): - def _path_join(base, url): - if not base.endswith('/'): - base += '/' - return parse.urljoin(base, url) - - urls = (base,) + urls - return reduce(_path_join, urls) - - -def query_join(base, **queries): - return base + '?' + parse.urlencode(queries) - - -def resource_join(url): - testapi_url = os.environ.get('testapi_url') - return path_join(testapi_url, url) - - -def get_queries(queries, parsed_args): - if not isinstance(queries, list): - queries = [queries] - - return {query: getattr(parsed_args, query) - for query in queries - if hasattr(parsed_args, query) and getattr(parsed_args, query)} - - -def query_by(base, queries, parsed_args): - qs = get_queries(queries, parsed_args) - return query_join(base, **qs) if qs else base - - -def url_format(base, parsed_args): - return base.format(**(parsed_args.__dict__)) diff --git a/testapi/testapi-client/testapiclient/utils/urlparse.py b/testapi/testapi-client/testapiclient/utils/urlparse.py new file mode 100644 index 0000000..9f99a46 --- /dev/null +++ b/testapi/testapi-client/testapiclient/utils/urlparse.py @@ -0,0 +1,40 @@ +import os + +from six.moves.urllib import parse + + +def path_join(base, *urls): + def _path_join(base, url): + if not base.endswith('/'): + base += '/' + return parse.urljoin(base, url) + + urls = (base,) + urls + return reduce(_path_join, urls) + + +def query_join(base, **queries): + return base + '?' + parse.urlencode(queries) + + +def resource_join(url): + testapi_url = os.environ.get('testapi_url') + return path_join(testapi_url, url) + + +def get_queries(queries, parsed_args): + if not isinstance(queries, list): + queries = [queries] + + return {query: getattr(parsed_args, query) + for query in queries + if hasattr(parsed_args, query) and getattr(parsed_args, query)} + + +def query_by(base, queries, parsed_args): + qs = get_queries(queries, parsed_args) + return query_join(base, **qs) if qs else base + + +def url_format(base, parsed_args): + return base.format(**(parsed_args.__dict__)) diff --git a/testapi/testapi-client/testapiclient/utils/user.py b/testapi/testapi-client/testapiclient/utils/user.py deleted file mode 100644 index 7e72163..0000000 --- a/testapi/testapi-client/testapiclient/utils/user.py +++ /dev/null @@ -1,2 +0,0 @@ -class User(): - session = None -- cgit 1.2.3-korg