Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Removed support for qiskitrc file #1121

Merged
merged 5 commits into from
Dec 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
41 changes: 1 addition & 40 deletions qiskit_ibm_runtime/accounts/management.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,17 @@
"""Account management related classes and functions."""

import os
import ast
from typing import Optional, Dict

from qiskit_ibm_provider.proxies import ProxyConfiguration

from qiskit_ibm_runtime.utils.deprecation import issue_deprecation_msg
from .exceptions import AccountNotFoundError
from .account import Account, ChannelType
from .storage import save_config, read_config, delete_config, read_qiskitrc
from .storage import save_config, read_config, delete_config

_DEFAULT_ACCOUNT_CONFIG_JSON_FILE = os.path.join(
os.path.expanduser("~"), ".qiskit", "qiskit-ibm.json"
)
_QISKITRC_CONFIG_FILE = os.path.join(os.path.expanduser("~"), ".qiskit", "qiskitrc")
_DEFAULT_ACCOUNT_NAME = "default"
_DEFAULT_ACCOUNT_NAME_IBM_QUANTUM = "default-ibm-quantum"
_DEFAULT_ACCOUNT_NAME_IBM_CLOUD = "default-ibm-cloud"
Expand Down Expand Up @@ -196,15 +193,6 @@ def get(
if account_name in all_config:
return Account.from_saved_format(all_config[account_name])

if os.path.isfile(_QISKITRC_CONFIG_FILE):
issue_deprecation_msg(
msg="Use of the ~/.qiskit/qiskitrc.json file is deprecated.",
version="0.15.0",
remedy="Please use the ~/.qiskit/qiskit-ibm.json file instead.",
period="1 month",
)
return cls._from_qiskitrc_file()

raise AccountNotFoundError("Unable to find account.")

@classmethod
Expand Down Expand Up @@ -272,30 +260,3 @@ def _get_default_account_name(cls, channel: ChannelType) -> str:
if channel == "ibm_quantum"
else _DEFAULT_ACCOUNT_NAME_IBM_CLOUD
)

@classmethod
def _from_qiskitrc_file(cls) -> Optional[Account]:
"""Read account from qiskitrc file."""
qiskitrc_data = read_qiskitrc(_QISKITRC_CONFIG_FILE)
proxies = (
ProxyConfiguration(ast.literal_eval(qiskitrc_data["proxies"]))
if "proxies" in qiskitrc_data
else None
)
save_config(
filename=_DEFAULT_ACCOUNT_CONFIG_JSON_FILE,
name=_DEFAULT_ACCOUNT_NAME_IBM_QUANTUM,
overwrite=False,
config=Account.create_account(
token=qiskitrc_data.get("token", None),
url=qiskitrc_data.get("url", None),
instance=qiskitrc_data.get("default_provider", None),
verify=bool(qiskitrc_data.get("verify", None)),
proxies=proxies,
channel="ibm_quantum",
)
.validate()
.to_saved_format(),
)
default_config = read_config(filename=_DEFAULT_ACCOUNT_CONFIG_JSON_FILE)
return Account.from_saved_format(default_config[_DEFAULT_ACCOUNT_NAME_IBM_QUANTUM])
11 changes: 0 additions & 11 deletions qiskit_ibm_runtime/accounts/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import logging
import os
from typing import Optional, Dict
from configparser import ConfigParser
from .exceptions import AccountAlreadyExistsError

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -58,16 +57,6 @@ def save_config(
json.dump(data, json_out, sort_keys=True, indent=4)


def read_qiskitrc(qiskitrc_config_file: str) -> Dict[str, str]:
"""Read credentials from a qiskitrc config and return as a dictionary."""
config_parser = ConfigParser()
config_parser.read(qiskitrc_config_file)
account_data = {}
for name in config_parser.sections():
account_data = dict(config_parser.items(name))
return account_data


def read_config(
filename: str,
name: Optional[str] = None,
Expand Down
25 changes: 1 addition & 24 deletions test/account.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,29 +121,6 @@ def __exit__(self, *exc):
management._DEFAULT_ACCOUNT_CONFIG_JSON_FILE = self.account_config_json_backup


class custom_qiskitrc(ContextDecorator):
"""Context manager that uses a temporary qiskitrc."""

# pylint: disable=invalid-name

def __init__(self, contents=b""):
# Create a temporary file with the contents.
self.tmp_file = NamedTemporaryFile()
self.tmp_file.write(contents)
self.tmp_file.flush()
self.default_qiskitrc_file_original = management._QISKITRC_CONFIG_FILE

def __enter__(self):
# Temporarily modify the default location of the qiskitrc file.
management._QISKITRC_CONFIG_FILE = self.tmp_file.name
return self

def __exit__(self, *exc):
# Delete the temporary file and restore the default location.
self.tmp_file.close()
management._QISKITRC_CONFIG_FILE = self.default_qiskitrc_file_original


def get_account_config_contents(
name=None,
channel="ibm_cloud",
Expand All @@ -154,7 +131,7 @@ def get_account_config_contents(
proxies=None,
set_default=None,
):
"""Generate qiskitrc content"""
"""Generate account config file content"""
if instance is None:
instance = "some_instance" if channel == "ibm_cloud" else "hub/group/project"
token = token or uuid.uuid4().hex
Expand Down
23 changes: 0 additions & 23 deletions test/unit/test_account.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import uuid
from typing import Any
from unittest import skipIf
import warnings

from qiskit_ibm_provider.proxies import ProxyConfiguration
from qiskit_ibm_runtime.accounts import (
Expand All @@ -38,7 +37,6 @@
from ..account import (
get_account_config_contents,
temporary_account_config_file,
custom_qiskitrc,
no_envs,
custom_envs,
)
Expand Down Expand Up @@ -845,27 +843,6 @@ def test_enable_account_by_name_input_instance(self):
self.assertTrue(service._account)
self.assertEqual(service._account.instance, instance)

@no_envs(["QISKIT_IBM_TOKEN"])
def test_enable_account_by_qiskitrc(self):
"""Test initializing account by a qiskitrc file."""
token = "token-x"
proxies = {"urls": {"https": "localhost:8080"}}
str_contents = f"""
[ibmq]
token = {token}
url = https://auth.quantum-computing.ibm.com/api
verify = True
default_provider = ibm-q/open/main
proxies = {proxies}
"""
with custom_qiskitrc(contents=str.encode(str_contents)):
with temporary_account_config_file(contents={}):
with warnings.catch_warnings(record=True) as warn:
service = FakeRuntimeService()
self.assertIn("Use of the ~/.qiskit/qiskitrc.json file is deprecated", str(warn[0].message))
self.assertTrue(service._account)
self.assertEqual(service._account.token, token)

def test_enable_account_by_channel_input_instance(self):
"""Test initializing account by channel and input instance."""
instance = uuid.uuid4().hex
Expand Down
Loading