Skip to content
This repository has been archived by the owner on Jul 24, 2024. It is now read-only.

Removed auth parameter and migrate method #727

Merged
merged 3 commits into from
Sep 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 1 addition & 32 deletions qiskit_ibm_provider/accounts/management.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ def save(
overwrite: Optional[bool] = False,
) -> None:
"""Save account on disk."""
cls.migrate()
name = name or cls._default_account_name_ibm_quantum
return save_config(
filename=cls._default_account_config_json_file,
Expand All @@ -70,7 +69,6 @@ def list(
name: Optional[str] = None,
) -> Dict[str, Account]:
"""List all accounts saved on disk."""
AccountManager.migrate()

def _matching_name(account_name: str) -> bool:
return name is None or name == account_name
Expand Down Expand Up @@ -120,7 +118,7 @@ def get(
"""Read account from disk.

Args:
name: Account name. Takes precedence if `auth` is also specified.
name: Account name. Takes precedence.
channel: Channel type.

Returns:
Expand All @@ -129,7 +127,6 @@ def get(
Raises:
AccountNotFoundError: If the input value cannot be found on disk.
"""
cls.migrate()
if name:
saved_account = read_config(
filename=cls._default_account_config_json_file, name=name
Expand Down Expand Up @@ -167,37 +164,9 @@ def delete(
name: Optional[str] = None,
) -> bool:
"""Delete account from disk."""
cls.migrate()
name = name or cls._default_account_name_ibm_quantum
return delete_config(name=name, filename=cls._default_account_config_json_file)

@classmethod
def migrate(cls) -> None:
"""Migrate accounts on disk by removing `auth` and adding `channel`."""
data = read_config(filename=cls._default_account_config_json_file)
for key, value in data.items():
if key == cls._default_account_name_legacy:
value.pop("auth", None)
value.update(channel="ibm_quantum")
delete_config(filename=cls._default_account_config_json_file, name=key)
save_config(
filename=cls._default_account_config_json_file,
name=cls._default_account_name_ibm_quantum,
config=value,
overwrite=False,
)
else:
if hasattr(value, "auth"):
if value["auth"] == "legacy":
value.update(channel="ibm_quantum")
value.pop("auth", None)
save_config(
filename=cls._default_account_config_json_file,
name=key,
config=value,
overwrite=True,
)

@classmethod
def _from_env_variables(cls, channel: Optional[ChannelType]) -> Optional[Account]:
"""Read account from environment variable."""
Expand Down
2 changes: 1 addition & 1 deletion test/account.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ def get_account_config_contents(
verify=None,
proxies=None,
):
"""Generate qiskitrc content"""
"""Generate content of account config file"""
if instance is None:
instance = "hub/group/project"
token = token or uuid.uuid4().hex
Expand Down
67 changes: 2 additions & 65 deletions test/unit/test_account.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,6 @@
instance="ibm-q/open/main",
)

_TEST_LEGACY_ACCOUNT = {
"auth": "legacy",
"token": "token-x",
"url": "https://auth.quantum-computing.ibm.com/api",
"instance": "ibm-q/open/main",
}


class TestAccount(IBMTestCase):
"""Tests for Account class."""
Expand Down Expand Up @@ -158,44 +151,6 @@ def test_save_without_override(self):
channel="ibm_quantum",
overwrite=False,
)
# TODO remove test when removing auth parameter

@temporary_account_config_file(
contents={_DEFAULT_ACCOUNT_NAME_LEGACY: _TEST_LEGACY_ACCOUNT}
)
@no_envs(["QISKIT_IBM_TOKEN"])
def test_save_channel_ibm_quantum_over_auth_legacy_without_overwrite(self):
"""Test to overwrite an existing auth "legacy" account with channel "ibm_quantum"
and without setting overwrite=True."""
with self.assertRaises(AccountAlreadyExistsError):
AccountManager.save(
token=_TEST_IBM_QUANTUM_ACCOUNT.token,
url=_TEST_IBM_QUANTUM_ACCOUNT.url,
instance=_TEST_IBM_QUANTUM_ACCOUNT.instance,
channel="ibm_quantum",
name=None,
overwrite=False,
)

# TODO remove test when removing auth parameter
@temporary_account_config_file(
contents={_DEFAULT_ACCOUNT_NAME_LEGACY: _TEST_LEGACY_ACCOUNT}
)
@no_envs(["QISKIT_IBM_TOKEN"])
def test_save_channel_ibm_quantum_over_auth_legacy_with_overwrite(self):
"""Test to overwrite an existing auth "elegacy" account with channel "ibm_quantum"
and with setting overwrite=True."""
AccountManager.save(
token=_TEST_IBM_QUANTUM_ACCOUNT.token,
url=_TEST_IBM_QUANTUM_ACCOUNT.url,
instance=_TEST_IBM_QUANTUM_ACCOUNT.instance,
channel="ibm_quantum",
name=None,
overwrite=True,
)
self.assertEqual(
_TEST_IBM_QUANTUM_ACCOUNT, AccountManager.get(channel="ibm_quantum")
)

@temporary_account_config_file(
contents={"conflict": _TEST_IBM_QUANTUM_ACCOUNT.to_saved_format()}
Expand Down Expand Up @@ -298,24 +253,6 @@ def test_delete(self):

self.assertTrue(len(AccountManager.list()) == 0)

@temporary_account_config_file(
contents={
"key1": _TEST_LEGACY_ACCOUNT,
_DEFAULT_ACCOUNT_NAME_LEGACY: _TEST_LEGACY_ACCOUNT,
}
)
def test_delete_auth(self):
"""Test delete accounts already saved using auth."""

with self.subTest("delete named account"):
self.assertTrue(AccountManager.delete(name="key1"))
self.assertFalse(AccountManager.delete(name="key1"))

with self.subTest("delete default auth='legacy' account using channel"):
self.assertTrue(AccountManager.delete())

self.assertTrue(len(AccountManager.list()) == 0)


MOCK_PROXY_CONFIG_DICT = {
"urls": {"https": "127.0.0.1", "username_ntlm": "", "password_ntlm": ""}
Expand Down Expand Up @@ -399,8 +336,8 @@ def test_enable_account_by_only_channel(self):
self.assertEqual(service._account.url, expected)
self.assertEqual(service._account.channel, "ibm_quantum")

def test_enable_account_by_env_auth(self):
"""Test initializing account by environment variable and auth."""
def test_enable_account_by_env(self):
"""Test initializing account by environment variables."""

token = uuid.uuid4().hex
url = uuid.uuid4().hex
Expand Down
Loading