From c257bdf2f54ae896a00f31db7b54e40d8960de11 Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 11 Oct 2018 10:53:58 +0800 Subject: [PATCH 1/6] add parameter on get result class for custom field --- testrail/client.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/testrail/client.py b/testrail/client.py index ea103d1..d624146 100644 --- a/testrail/client.py +++ b/testrail/client.py @@ -327,6 +327,10 @@ def _results_for_test(self, test): @methdispatch def result(self): return Result() + + @result.register(dict) + def _result_for_dict(self, content): + return Result(content) @add.register(Result) def _add_result(self, obj): From 80500db05c8e47e0700b02986995c344f6cdc37e Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 15 Nov 2018 15:32:02 +0800 Subject: [PATCH 2/6] add verify_ssl parameter --- testrail/api.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/testrail/api.py b/testrail/api.py index ee29aa3..2561f7f 100644 --- a/testrail/api.py +++ b/testrail/api.py @@ -8,6 +8,7 @@ import yaml import requests +from requests.packages.urllib3.exceptions import InsecureRequestWarning from retry import retry from testrail.helper import TestRailError, TooManyRequestsError, ServiceUnavailableError @@ -107,10 +108,10 @@ class API(object): '_timeout': 30, '_project_id': None} - def __init__(self, email=None, key=None, url=None): + def __init__(self, email=None, key=None, url=None, verify_ssl=True): self.__dict__ = self._shared_state if email is not None and key is not None and url is not None: - config = dict(email=email, key=key, url=url) + config = dict(email=email, key=key, url=url, verify_ssl=verify_ssl) self._config = config elif self._config is not None: config = self._config @@ -121,6 +122,8 @@ def __init__(self, email=None, key=None, url=None): self._url = config['url'] self.headers = {'Content-Type': 'application/json'} self.verify_ssl = config.get('verify_ssl', True) + if not self.verify_ssl: + requests.packages.urllib3.disable_warnings(InsecureRequestWarning) def _conf(self): TR_EMAIL = 'TESTRAIL_USER_EMAIL' From 5957029d3649af5c55af45c6c1b9285ae39e743f Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 15 Nov 2018 15:32:56 +0800 Subject: [PATCH 3/6] Update client.py --- testrail/client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testrail/client.py b/testrail/client.py index d624146..b71d6b6 100644 --- a/testrail/client.py +++ b/testrail/client.py @@ -20,8 +20,8 @@ unicode = str class TestRail(object): - def __init__(self, project_id=0, email=None, key=None, url=None): - self.api = API(email=email, key=key, url=url) + def __init__(self, project_id=0, email=None, key=None, url=None, verify_ssl=True): + self.api = API(email=email, key=key, url=url, verify_ssl=verify_ssl) self.api.set_project_id(project_id) self._project_id = project_id From ae1de647d9bce00a87e553a488dc927df0fe2dfd Mon Sep 17 00:00:00 2001 From: Tony_Ni Date: Thu, 5 Sep 2019 09:48:16 +0800 Subject: [PATCH 4/6] add session for http requests --- setup.py | 2 +- testrail/api.py | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/setup.py b/setup.py index 80f09d7..a081dd9 100644 --- a/setup.py +++ b/setup.py @@ -15,7 +15,7 @@ setup( name='testrail', packages=['testrail'], - version='0.3.12', + version='0.4.0', description='Python library for interacting with TestRail via REST APIs.', author='Travis Pavek', author_email='travis.pavek@gmail.com', diff --git a/testrail/api.py b/testrail/api.py index 2561f7f..573f012 100644 --- a/testrail/api.py +++ b/testrail/api.py @@ -120,6 +120,9 @@ def __init__(self, email=None, key=None, url=None, verify_ssl=True): self._auth = (config['email'], config['key']) self._url = config['url'] + self._session = requests.Session() + self._session.headers.update({'Content-Type': 'application/json'}) + self._session.auth=self._auth self.headers = {'Content-Type': 'application/json'} self.verify_ssl = config.get('verify_ssl', True) if not self.verify_ssl: @@ -617,8 +620,7 @@ def configs(self): @retry((TooManyRequestsError, ValueError), tries=3, delay=1, backoff=2) def _get(self, uri, params=None): uri = '/index.php?/api/v2/%s' % uri - r = requests.get(self._url+uri, params=params, auth=self._auth, - headers=self.headers, verify=self.verify_ssl) + r = self._session.get(self._url+uri, params=params,verify=self.verify_ssl) self._raise_on_429_or_503_status(r) @@ -641,8 +643,7 @@ def _get(self, uri, params=None): @retry(TooManyRequestsError, tries=3, delay=1, backoff=2) def _post(self, uri, data={}): uri = '/index.php?/api/v2/%s' % uri - r = requests.post(self._url+uri, json=data, auth=self._auth, - verify=self.verify_ssl) + r = self._session.post(self._url+uri, json=data, verify=self.verify_ssl) self._raise_on_429_or_503_status(r) From 79a19d38536912ca286eb9c19a123382728afd1a Mon Sep 17 00:00:00 2001 From: Tony_Ni Date: Mon, 4 Nov 2019 16:57:04 +0800 Subject: [PATCH 5/6] add proxy parameter --- testrail/api.py | 9 +++++---- testrail/client.py | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/testrail/api.py b/testrail/api.py index 573f012..17a8940 100644 --- a/testrail/api.py +++ b/testrail/api.py @@ -108,10 +108,10 @@ class API(object): '_timeout': 30, '_project_id': None} - def __init__(self, email=None, key=None, url=None, verify_ssl=True): + def __init__(self, email=None, key=None, url=None, verify_ssl=True, proxies=None): self.__dict__ = self._shared_state if email is not None and key is not None and url is not None: - config = dict(email=email, key=key, url=url, verify_ssl=verify_ssl) + config = dict(email=email, key=key, url=url, verify_ssl=verify_ssl, proxies=proxies) self._config = config elif self._config is not None: config = self._config @@ -125,6 +125,7 @@ def __init__(self, email=None, key=None, url=None, verify_ssl=True): self._session.auth=self._auth self.headers = {'Content-Type': 'application/json'} self.verify_ssl = config.get('verify_ssl', True) + self.proxies = config.get('proxies', None) if not self.verify_ssl: requests.packages.urllib3.disable_warnings(InsecureRequestWarning) @@ -620,7 +621,7 @@ def configs(self): @retry((TooManyRequestsError, ValueError), tries=3, delay=1, backoff=2) def _get(self, uri, params=None): uri = '/index.php?/api/v2/%s' % uri - r = self._session.get(self._url+uri, params=params,verify=self.verify_ssl) + r = self._session.get(self._url+uri, params=params,verify=self.verify_ssl, proxies=self.proxies) self._raise_on_429_or_503_status(r) @@ -643,7 +644,7 @@ def _get(self, uri, params=None): @retry(TooManyRequestsError, tries=3, delay=1, backoff=2) def _post(self, uri, data={}): uri = '/index.php?/api/v2/%s' % uri - r = self._session.post(self._url+uri, json=data, verify=self.verify_ssl) + r = self._session.post(self._url+uri, json=data, verify=self.verify_ssl, proxies=self.proxies) self._raise_on_429_or_503_status(r) diff --git a/testrail/client.py b/testrail/client.py index b71d6b6..1a03245 100644 --- a/testrail/client.py +++ b/testrail/client.py @@ -20,8 +20,8 @@ unicode = str class TestRail(object): - def __init__(self, project_id=0, email=None, key=None, url=None, verify_ssl=True): - self.api = API(email=email, key=key, url=url, verify_ssl=verify_ssl) + def __init__(self, project_id=0, email=None, key=None, url=None, verify_ssl=True, proxies=None): + self.api = API(email=email, key=key, url=url, verify_ssl=verify_ssl, proxies=proxies) self.api.set_project_id(project_id) self._project_id = project_id From 403b9249e9fdc0259839793ed037e9260e31e026 Mon Sep 17 00:00:00 2001 From: Tony_Ni Date: Mon, 4 Nov 2019 17:02:03 +0800 Subject: [PATCH 6/6] change version to 0.5.0 --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a081dd9..e26a3d3 100644 --- a/setup.py +++ b/setup.py @@ -15,7 +15,7 @@ setup( name='testrail', packages=['testrail'], - version='0.4.0', + version='0.5.0', description='Python library for interacting with TestRail via REST APIs.', author='Travis Pavek', author_email='travis.pavek@gmail.com', @@ -40,5 +40,6 @@ 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', ], )