From 2767fd9da1387a7aa0d9296dac51de8f5936a6cf Mon Sep 17 00:00:00 2001 From: Max Reuter Date: Wed, 12 Jun 2019 09:59:57 -0400 Subject: [PATCH 1/7] Add verify to IBMQClient --- qiskit/providers/ibmq/api_v2/ibmqclient.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/qiskit/providers/ibmq/api_v2/ibmqclient.py b/qiskit/providers/ibmq/api_v2/ibmqclient.py index b92559d54..ebc15832e 100644 --- a/qiskit/providers/ibmq/api_v2/ibmqclient.py +++ b/qiskit/providers/ibmq/api_v2/ibmqclient.py @@ -25,24 +25,26 @@ class IBMQClient: """Client for programmatic access to the IBM Q API.""" - def __init__(self, api_token, auth_url, proxies=None): + def __init__(self, api_token, auth_url, verify=True, proxies=None): """IBMQClient constructor. Args: api_token (str): IBM Q api token. auth_url (str): URL for the authentication service. + verify (bool): if False, ignores SSL certificates errors. proxies (dict): proxies used in the connection. """ self.api_token = api_token self.auth_url = auth_url - self.client_auth = Auth(RetrySession(auth_url, proxies=proxies)) - self.client_api, self.client_ws = self._init_service_clients(proxies=proxies) + self.client_auth = Auth(RetrySession(auth_url, verify=verify, proxies=proxies)) + self.client_api, self.client_ws = self._init_service_clients(verify=verify, proxies=proxies) - def _init_service_clients(self, proxies): + def _init_service_clients(self, verify, proxies): """Initialize the clients used for communicating with the API and ws. Args: + verify (bool): if False, ignores SSL certificates errors. proxies (dict): proxies used in the connection. Returns: @@ -57,7 +59,8 @@ def _init_service_clients(self, proxies): service_urls = self._user_urls() # Create the api server client, using the access token. - client_api = Api(RetrySession(service_urls['http'], access_token, proxies=proxies)) + client_api = Api(RetrySession(service_urls['http'], access_token, + verify=verify, proxies=proxies)) # Create the websocket server client, using the access token. client_ws = WebsocketClient(service_urls['ws'], access_token) From 7a27459965ad84e359f4e7c2dfc715f3c1518429 Mon Sep 17 00:00:00 2001 From: Max Reuter Date: Thu, 13 Jun 2019 09:27:06 -0400 Subject: [PATCH 2/7] Add verify to _authenticate and IBMQVersionFinder --- qiskit/providers/ibmq/api_v2/ibmqversionfinder.py | 7 +++++-- qiskit/providers/ibmq/ibmqsingleprovider.py | 7 ++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/qiskit/providers/ibmq/api_v2/ibmqversionfinder.py b/qiskit/providers/ibmq/api_v2/ibmqversionfinder.py index 3d4356b68..ebd894b03 100644 --- a/qiskit/providers/ibmq/api_v2/ibmqversionfinder.py +++ b/qiskit/providers/ibmq/api_v2/ibmqversionfinder.py @@ -21,15 +21,18 @@ class IBMQVersionFinder: """Client for finding the API version being used.""" - def __init__(self, url, proxies=None): + def __init__(self, url, verify=True, proxies=None): """IBMQVersionFinder constructor. Args: url (str): URL for the service. + verify (bool): if False, ignores SSL certificates errors. proxies (dict): proxies used in the connection. """ self.url = url - self.client_version_finder = VersionFinder(RetrySession(url, proxies=proxies)) + self.client_version_finder = VersionFinder( + RetrySession(url, verify=verify, proxies=proxies) + ) def version(self): """Return the version info. diff --git a/qiskit/providers/ibmq/ibmqsingleprovider.py b/qiskit/providers/ibmq/ibmqsingleprovider.py index b3e2e0573..8bb760e6d 100644 --- a/qiskit/providers/ibmq/ibmqsingleprovider.py +++ b/qiskit/providers/ibmq/ibmqsingleprovider.py @@ -66,11 +66,12 @@ def backends(self, name=None, filters=None, **kwargs): return filter_backends(backends, filters=filters, **kwargs) - def _authenticate(self, credentials): + def _authenticate(self, credentials, verify=True): """Authenticate against the IBMQ API. Args: credentials (Credentials): Quantum Experience or IBMQ credentials. + verify (bool): if False, ignores SSL certificates errors. Returns: IBMQConnector: instance of the IBMQConnector. @@ -89,7 +90,7 @@ def _authenticate(self, credentials): config_dict['websocket_url'] = credentials.websocket_url version_finder = IBMQVersionFinder(url=credentials.url, - proxies=proxies) + verify=verify, proxies=proxies) version_info = version_finder.version() # Check if the URL belongs to auth services of the new API. @@ -99,7 +100,7 @@ def _authenticate(self, credentials): if version_info['new_api'] and 'api-auth' in version_info: return IBMQClient(api_token=credentials.token, auth_url=credentials.url, - proxies=proxies) + verify=verify, proxies=proxies) else: return IBMQConnector(credentials.token, config_dict, credentials.verify) From aab7dab990396e4c4ab169e96bfcebd6ece47008 Mon Sep 17 00:00:00 2001 From: Max Reuter Date: Thu, 13 Jun 2019 10:03:49 -0400 Subject: [PATCH 3/7] Fix proxy test failures; lint --- qiskit/providers/ibmq/ibmqsingleprovider.py | 13 ++----------- test/ibmq/test_proxies.py | 12 ++++++------ 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/qiskit/providers/ibmq/ibmqsingleprovider.py b/qiskit/providers/ibmq/ibmqsingleprovider.py index 5fc8fdeb0..6dab9ff98 100644 --- a/qiskit/providers/ibmq/ibmqsingleprovider.py +++ b/qiskit/providers/ibmq/ibmqsingleprovider.py @@ -78,17 +78,6 @@ def _authenticate(self, credentials, verify=True): Raises: ConnectionError: if the authentication resulted in error. """ - # Prepare the config_dict for IBMQConnector. - config_dict = { - 'url': credentials.url, - } - proxies = None - if credentials.proxies: - config_dict['proxies'] = credentials.proxies - proxies = credentials.proxies['urls'] - if credentials.websocket_url: - config_dict['websocket_url'] = credentials.websocket_url - # Use an IBMQVersionFinder for finding out the API version. proxies = credentials.proxies.get('urls') version_finder = IBMQVersionFinder(url=credentials.base_url, @@ -108,6 +97,8 @@ def _authenticate(self, credentials, verify=True): config_dict = { 'url': credentials.url, } + if credentials.websocket_url: + config_dict['websocket_url'] = credentials.websocket_url if credentials.proxies: config_dict['proxies'] = credentials.proxies diff --git a/test/ibmq/test_proxies.py b/test/ibmq/test_proxies.py index 490db63a2..ebb7e1a13 100644 --- a/test/ibmq/test_proxies.py +++ b/test/ibmq/test_proxies.py @@ -56,7 +56,7 @@ def test_proxies_ibmqclient(self, qe_token, qe_url): """Should reach the proxy using IBMQClient.""" pproxy_desired_access_log_line_ = pproxy_desired_access_log_line(qe_url) - _ = IBMQClient(qe_token, qe_url, VALID_PROXIES) + _ = IBMQClient(qe_token, qe_url, proxies=VALID_PROXIES) self.proxy_process.terminate() # kill to be able of reading the output self.assertIn(pproxy_desired_access_log_line_, @@ -69,7 +69,7 @@ def test_proxies_ibmqversionfinder(self, qe_token, qe_url): """Should reach the proxy using IBMQVersionFinder.""" pproxy_desired_access_log_line_ = pproxy_desired_access_log_line(qe_url) - version_finder = IBMQVersionFinder(qe_url, VALID_PROXIES) + version_finder = IBMQVersionFinder(qe_url, proxies=VALID_PROXIES) version_finder.version() # call the version finder, sending logging to the proxy process self.proxy_process.terminate() # kill to be able of reading the output @@ -81,7 +81,7 @@ def test_proxies_ibmqversionfinder(self, qe_token, qe_url): def test_invalid_proxy_port_ibmqclient(self, qe_token, qe_url): """Should raise RequestApiError with ProxyError as original exception using IBMQClient.""" with self.assertRaises(RequestsApiError) as context_manager: - _ = IBMQClient(qe_token, qe_url, INVALID_PORT_PROXIES) + _ = IBMQClient(qe_token, qe_url, proxies=INVALID_PORT_PROXIES) self.assertIsInstance(context_manager.exception.original_exception, ProxyError) @@ -92,7 +92,7 @@ def test_invalid_proxy_port_ibmqversionfinder(self, qe_token, qe_url): """Should raise RequestApiError with ProxyError as original exception using IBMQVersionFinder.""" with self.assertRaises(RequestsApiError) as context_manager: - version_finder = IBMQVersionFinder(qe_url, INVALID_PORT_PROXIES) + version_finder = IBMQVersionFinder(qe_url, proxies=INVALID_PORT_PROXIES) version_finder.version() self.assertIsInstance(context_manager.exception.original_exception, ProxyError) @@ -103,7 +103,7 @@ def test_invalid_proxy_address_ibmqclient(self, qe_token, qe_url): """Should raise RequestApiError with ProxyError as original exception using IBMQClient.""" with self.assertRaises(RequestsApiError) as context_manager: - _ = IBMQClient(qe_token, qe_url, INVALID_ADDRESS_PROXIES) + _ = IBMQClient(qe_token, qe_url, proxies=INVALID_ADDRESS_PROXIES) self.assertIsInstance(context_manager.exception.original_exception, ProxyError) @@ -114,7 +114,7 @@ def test_invalid_proxy_address_ibmqversionfinder(self, qe_token, qe_url): """Should raise RequestApiError with ProxyError as original exception using IBMQVersionFinder.""" with self.assertRaises(RequestsApiError) as context_manager: - version_finder = IBMQVersionFinder(qe_url, INVALID_ADDRESS_PROXIES) + version_finder = IBMQVersionFinder(qe_url, proxies=INVALID_ADDRESS_PROXIES) version_finder.version() self.assertIsInstance(context_manager.exception.original_exception, ProxyError) From bfe1e7ae8606f0fe21c774211e973351f8785b1f Mon Sep 17 00:00:00 2001 From: Max Reuter Date: Thu, 13 Jun 2019 11:41:15 -0400 Subject: [PATCH 4/7] Clean up merge leftovers, use credentials.verify --- qiskit/providers/ibmq/api_v2/ibmqversionfinder.py | 1 - qiskit/providers/ibmq/ibmqsingleprovider.py | 11 +++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/qiskit/providers/ibmq/api_v2/ibmqversionfinder.py b/qiskit/providers/ibmq/api_v2/ibmqversionfinder.py index ebd894b03..9d4c27359 100644 --- a/qiskit/providers/ibmq/api_v2/ibmqversionfinder.py +++ b/qiskit/providers/ibmq/api_v2/ibmqversionfinder.py @@ -29,7 +29,6 @@ def __init__(self, url, verify=True, proxies=None): verify (bool): if False, ignores SSL certificates errors. proxies (dict): proxies used in the connection. """ - self.url = url self.client_version_finder = VersionFinder( RetrySession(url, verify=verify, proxies=proxies) ) diff --git a/qiskit/providers/ibmq/ibmqsingleprovider.py b/qiskit/providers/ibmq/ibmqsingleprovider.py index 6dab9ff98..67b7101b0 100644 --- a/qiskit/providers/ibmq/ibmqsingleprovider.py +++ b/qiskit/providers/ibmq/ibmqsingleprovider.py @@ -66,12 +66,11 @@ def backends(self, name=None, filters=None, **kwargs): return filter_backends(backends, filters=filters, **kwargs) - def _authenticate(self, credentials, verify=True): + def _authenticate(self, credentials): """Authenticate against the IBMQ API. Args: credentials (Credentials): Quantum Experience or IBMQ credentials. - verify (bool): if False, ignores SSL certificates errors. Returns: IBMQConnector: instance of the IBMQConnector. @@ -81,7 +80,8 @@ def _authenticate(self, credentials, verify=True): # Use an IBMQVersionFinder for finding out the API version. proxies = credentials.proxies.get('urls') version_finder = IBMQVersionFinder(url=credentials.base_url, - verify=verify, proxies=proxies) + verify=credentials.verify, + proxies=proxies) version_info = version_finder.version() # Check if the URL belongs to auth services of the new API. @@ -91,14 +91,13 @@ def _authenticate(self, credentials, verify=True): if version_info['new_api'] and 'api-auth' in version_info: return IBMQClient(api_token=credentials.token, auth_url=credentials.url, - verify=verify, proxies=proxies) + verify=credentials.verify, + proxies=proxies) else: # Prepare the config_dict for IBMQConnector. config_dict = { 'url': credentials.url, } - if credentials.websocket_url: - config_dict['websocket_url'] = credentials.websocket_url if credentials.proxies: config_dict['proxies'] = credentials.proxies From b3cf4ae4cfdb244f1965209fab3825455f3f9ddf Mon Sep 17 00:00:00 2001 From: Max Reuter Date: Thu, 13 Jun 2019 11:45:57 -0400 Subject: [PATCH 5/7] Remove small redundancy in _authenticate --- qiskit/providers/ibmq/ibmqsingleprovider.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/qiskit/providers/ibmq/ibmqsingleprovider.py b/qiskit/providers/ibmq/ibmqsingleprovider.py index 67b7101b0..18f8672d1 100644 --- a/qiskit/providers/ibmq/ibmqsingleprovider.py +++ b/qiskit/providers/ibmq/ibmqsingleprovider.py @@ -77,8 +77,9 @@ def _authenticate(self, credentials): Raises: ConnectionError: if the authentication resulted in error. """ - # Use an IBMQVersionFinder for finding out the API version. proxies = credentials.proxies.get('urls') + + # Use an IBMQVersionFinder for finding out the API version. version_finder = IBMQVersionFinder(url=credentials.base_url, verify=credentials.verify, proxies=proxies) @@ -97,9 +98,8 @@ def _authenticate(self, credentials): # Prepare the config_dict for IBMQConnector. config_dict = { 'url': credentials.url, + 'proxies': proxies } - if credentials.proxies: - config_dict['proxies'] = credentials.proxies return IBMQConnector(credentials.token, config_dict, credentials.verify) From 5bdf8fd61d545582c13d682089440639f20d9451 Mon Sep 17 00:00:00 2001 From: Max Reuter Date: Thu, 13 Jun 2019 11:48:26 -0400 Subject: [PATCH 6/7] Correct redundancy adjustment --- qiskit/providers/ibmq/ibmqsingleprovider.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/qiskit/providers/ibmq/ibmqsingleprovider.py b/qiskit/providers/ibmq/ibmqsingleprovider.py index 18f8672d1..e90e737ae 100644 --- a/qiskit/providers/ibmq/ibmqsingleprovider.py +++ b/qiskit/providers/ibmq/ibmqsingleprovider.py @@ -77,9 +77,8 @@ def _authenticate(self, credentials): Raises: ConnectionError: if the authentication resulted in error. """ - proxies = credentials.proxies.get('urls') - # Use an IBMQVersionFinder for finding out the API version. + proxies = credentials.proxies.get('urls') version_finder = IBMQVersionFinder(url=credentials.base_url, verify=credentials.verify, proxies=proxies) @@ -98,7 +97,7 @@ def _authenticate(self, credentials): # Prepare the config_dict for IBMQConnector. config_dict = { 'url': credentials.url, - 'proxies': proxies + 'proxies': credentials.proxies } return IBMQConnector(credentials.token, config_dict, From 7f806118244d501adadce9908e40b8efb4befcca Mon Sep 17 00:00:00 2001 From: Max Reuter Date: Thu, 13 Jun 2019 13:26:35 -0400 Subject: [PATCH 7/7] Revert redundancy adjustment --- qiskit/providers/ibmq/ibmqsingleprovider.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qiskit/providers/ibmq/ibmqsingleprovider.py b/qiskit/providers/ibmq/ibmqsingleprovider.py index e90e737ae..67b7101b0 100644 --- a/qiskit/providers/ibmq/ibmqsingleprovider.py +++ b/qiskit/providers/ibmq/ibmqsingleprovider.py @@ -97,8 +97,9 @@ def _authenticate(self, credentials): # Prepare the config_dict for IBMQConnector. config_dict = { 'url': credentials.url, - 'proxies': credentials.proxies } + if credentials.proxies: + config_dict['proxies'] = credentials.proxies return IBMQConnector(credentials.token, config_dict, credentials.verify)