diff --git a/setup.py b/setup.py index fe852e1..e3a0f3e 100644 --- a/setup.py +++ b/setup.py @@ -15,7 +15,7 @@ setup( name='testrail', packages=['testrail'], - version='0.3.13', + 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', ], ) diff --git a/testrail/api.py b/testrail/api.py index 597e4bb..a670aef 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, 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) + 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 @@ -119,8 +120,14 @@ def __init__(self, email=None, key=None, url=None): 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) + self.proxies = config.get('proxies', None) + if not self.verify_ssl: + requests.packages.urllib3.disable_warnings(InsecureRequestWarning) def _conf(self): TR_EMAIL = 'TESTRAIL_USER_EMAIL' @@ -627,8 +634,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, proxies=self.proxies) self._raise_on_429_or_503_status(r) @@ -651,8 +657,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, proxies=self.proxies) self._raise_on_429_or_503_status(r) diff --git a/testrail/client.py b/testrail/client.py index c12b0c8..8776ca1 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, 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 @@ -331,6 +331,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):