Skip to content

Commit

Permalink
Add cirq specific environment variables to ionq (#6216)
Browse files Browse the repository at this point in the history
* add cirq specific environment variables

* use mock.patch.dict to set env var

* add tests for env vars

* add tests for remote_host + use decorators

---------

Co-authored-by: Tanuj Khattar <tanujkhattar@google.com>
  • Loading branch information
splch and tanujkhattar committed Jul 26, 2023
1 parent d81d07c commit 91f690d
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 7 deletions.
7 changes: 5 additions & 2 deletions cirq-ionq/cirq_ionq/service.py
Expand Up @@ -62,9 +62,12 @@ def __init__(
This is actually an EnvironmentError which is equal to an OSError.
"""
self.remote_host = (
remote_host or os.getenv('IONQ_REMOTE_HOST') or f'https://api.ionq.co/{api_version}'
remote_host
or os.getenv('CIRQ_IONQ_REMOTE_HOST')
or os.getenv('IONQ_REMOTE_HOST')
or f'https://api.ionq.co/{api_version}'
)
self.api_key = api_key or os.getenv('IONQ_API_KEY')
self.api_key = api_key or os.getenv('CIRQ_IONQ_API_KEY') or os.getenv('IONQ_API_KEY')
if not self.api_key:
raise EnvironmentError(
'Parameter api_key was not specified and the environment variable '
Expand Down
66 changes: 61 additions & 5 deletions cirq-ionq/cirq_ionq/service_test.py
Expand Up @@ -158,25 +158,81 @@ def test_service_list_calibrations():
mock_client.list_calibrations.assert_called_with(start=start, end=end, limit=10, batch_size=2)


@mock.patch.dict(os.environ, {'IONQ_API_KEY': 'tomyheart'})
def test_service_api_key_via_env():
os.environ['IONQ_API_KEY'] = 'tomyheart'
service = ionq.Service(remote_host='http://example.com')
assert service.api_key == 'tomyheart'
del os.environ['IONQ_API_KEY']


@mock.patch.dict(os.environ, {'IONQ_REMOTE_HOST': 'http://example.com'})
def test_service_remote_host_via_env():
os.environ['IONQ_REMOTE_HOST'] = 'http://example.com'
service = ionq.Service(api_key='tomyheart')
assert service.remote_host == 'http://example.com'
del os.environ['IONQ_REMOTE_HOST']


@mock.patch.dict(os.environ, {}, clear=True)
def test_service_no_param_or_env_variable():
with pytest.raises(EnvironmentError):
_ = ionq.Service(remote_host='http://example.com')


def test_service_no_url_default():
@mock.patch.dict(os.environ, {'IONQ_API_KEY': 'not_this_key'})
def test_service_api_key_passed_directly():
service = ionq.Service(remote_host='http://example.com', api_key='tomyheart')
assert service.api_key == 'tomyheart'


@mock.patch.dict(os.environ, {'CIRQ_IONQ_API_KEY': 'tomyheart'})
def test_service_api_key_from_env_var_cirq_ionq():
service = ionq.Service(remote_host='http://example.com')
assert service.api_key == 'tomyheart'


@mock.patch.dict(os.environ, {'IONQ_API_KEY': 'tomyheart'})
def test_service_api_key_from_env_var_ionq():
service = ionq.Service(remote_host='http://example.com')
assert service.api_key == 'tomyheart'


@mock.patch.dict(os.environ, {}, clear=True)
def test_service_api_key_not_found_raises_error():
with pytest.raises(EnvironmentError):
_ = ionq.Service(remote_host='http://example.com')


@mock.patch.dict(os.environ, {'CIRQ_IONQ_API_KEY': 'tomyheart', 'IONQ_API_KEY': 'not_this_key'})
def test_service_api_key_from_env_var_cirq_ionq_precedence():
service = ionq.Service(remote_host='http://example.com')
assert service.api_key == 'tomyheart'


@mock.patch.dict(os.environ, {'CIRQ_IONQ_REMOTE_HOST': 'not_this_host'})
def test_service_remote_host_passed_directly():
service = ionq.Service(remote_host='http://example.com', api_key='tomyheart')
assert service.remote_host == 'http://example.com'


@mock.patch.dict(os.environ, {'CIRQ_IONQ_REMOTE_HOST': 'http://example.com'})
def test_service_remote_host_from_env_var_cirq_ionq():
service = ionq.Service(api_key='tomyheart')
assert service.remote_host == 'http://example.com'


@mock.patch.dict(os.environ, {'IONQ_REMOTE_HOST': 'http://example.com'})
def test_service_remote_host_from_env_var_ionq():
service = ionq.Service(api_key='tomyheart')
assert service.remote_host == 'http://example.com'


@mock.patch.dict(os.environ, {}, clear=True)
def test_service_remote_host_default():
service = ionq.Service(api_key='tomyheart', api_version='v0.1')
assert service.remote_host == 'https://api.ionq.co/v0.1'


@mock.patch.dict(
os.environ, {'CIRQ_IONQ_REMOTE_HOST': 'http://example.com', 'IONQ_REMOTE_HOST': 'not_this_host'}
)
def test_service_remote_host_from_env_var_cirq_ionq_precedence():
service = ionq.Service(api_key='tomyheart')
assert service.remote_host == 'http://example.com'

0 comments on commit 91f690d

Please sign in to comment.