Skip to content
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
4 changes: 4 additions & 0 deletions docs/changes/newsfragments/6942.breaking
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
The QCoDeS dataset sqlite connection class `ConnectionPlus` has been deprecated and replace with `AtomicConnection`.
Unlike `ConnectionPlus` `AtomicConnection` is a direct subclass of `sqlite3.Connection` which enables better type checking
and will allow QCoDeS to drop the dependency on `wrapt`. The function `make_connection_plus_from` is also deprecated and
it is no longer supported to convert a connection from a sqlite3 connection to a QCoDeS specific connection.
4 changes: 3 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,9 @@ filterwarnings = [
'ignore:open_binary is deprecated:DeprecationWarning', # pyvisa-sim
'ignore:Jupyter is migrating its paths to use standard platformdirs:DeprecationWarning', # jupyter
'ignore:Parsing dates involving a day of month without a year specified is ambiguious:DeprecationWarning', # ipykernel 3.13+
'ignore:unclosed database in:ResourceWarning' # internal should be fixed
'ignore:unclosed database in:ResourceWarning', # internal should be fixed
'ignore:ConnectionPlus is deprecated:qcodes.utils.deprecate.QCoDeSDeprecationWarning', # remove once deprecated ConnectionPlus has been removed
'ignore:make_connection_plus_from is deprecated:qcodes.utils.deprecate.QCoDeSDeprecationWarning', # remove once deprecated ConnectionPlus has been removed
]

[tool.ruff]
Expand Down
6 changes: 5 additions & 1 deletion src/qcodes/dataset/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,10 @@
)
from .measurements import Measurement
from .plotting import plot_by_id, plot_dataset
from .sqlite.connection import ConnectionPlus
from .sqlite.connection import (
AtomicConnection,
ConnectionPlus, # pyright: ignore[reportDeprecated]
)
from .sqlite.database import (
connect,
initialise_database,
Expand All @@ -61,6 +64,7 @@
__all__ = [
"AbstractSweep",
"ArraySweep",
"AtomicConnection",
"BreakConditionInterrupt",
"ConnectionPlus",
"DataSetDefinition",
Expand Down
32 changes: 19 additions & 13 deletions src/qcodes/dataset/data_set.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,11 @@
)
from qcodes.dataset.guids import filter_guids_by_parts, generate_guid, parse_guid
from qcodes.dataset.linked_datasets.links import Link, links_to_str, str_to_links
from qcodes.dataset.sqlite.connection import ConnectionPlus, atomic, atomic_transaction
from qcodes.dataset.sqlite.connection import (

Check warning on line 38 in src/qcodes/dataset/data_set.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/data_set.py#L38

Added line #L38 was not covered by tests
AtomicConnection,
atomic,
atomic_transaction,
)
from qcodes.dataset.sqlite.database import (
conn_from_dbpath_or_conn,
connect,
Expand Down Expand Up @@ -128,7 +132,7 @@
Write the results from the DataSet's dataqueue in a new thread
"""

def __init__(self, queue: Queue[Any], conn: ConnectionPlus):
def __init__(self, queue: Queue[Any], conn: AtomicConnection):

Check warning on line 135 in src/qcodes/dataset/data_set.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/data_set.py#L135

Added line #L135 was not covered by tests
super().__init__(daemon=True)
self.queue = queue
self.path = conn.path_to_dbfile
Expand Down Expand Up @@ -206,7 +210,7 @@
self,
path_to_db: str | None = None,
run_id: int | None = None,
conn: ConnectionPlus | None = None,
conn: AtomicConnection | None = None,
exp_id: int | None = None,
name: str | None = None,
specs: SpecsOrInterDeps | None = None,
Expand Down Expand Up @@ -1556,7 +1560,7 @@
sample_id: int | None = None,
location: int | None = None,
work_station: int | None = None,
conn: ConnectionPlus | None = None,
conn: AtomicConnection | None = None,
) -> DataSetProtocol:
"""
Load a run from one or more pieces of runs specification. All
Expand Down Expand Up @@ -1635,7 +1639,7 @@
sample_id: int | None = None,
location: int | None = None,
work_station: int | None = None,
conn: ConnectionPlus | None = None,
conn: AtomicConnection | None = None,
) -> list[str]:
"""
Get a list of matching guids from one or more pieces of runs specification. All
Expand Down Expand Up @@ -1677,7 +1681,7 @@
return matched_guids


def load_by_id(run_id: int, conn: ConnectionPlus | None = None) -> DataSetProtocol:
def load_by_id(run_id: int, conn: AtomicConnection | None = None) -> DataSetProtocol:

Check warning on line 1684 in src/qcodes/dataset/data_set.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/data_set.py#L1684

Added line #L1684 was not covered by tests
"""
Load a dataset by run id

Expand Down Expand Up @@ -1723,7 +1727,7 @@
return d


def load_by_guid(guid: str, conn: ConnectionPlus | None = None) -> DataSetProtocol:
def load_by_guid(guid: str, conn: AtomicConnection | None = None) -> DataSetProtocol:

Check warning on line 1730 in src/qcodes/dataset/data_set.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/data_set.py#L1730

Added line #L1730 was not covered by tests
"""
Load a dataset by its GUID

Expand Down Expand Up @@ -1763,7 +1767,7 @@


def load_by_counter(
counter: int, exp_id: int, conn: ConnectionPlus | None = None
counter: int, exp_id: int, conn: AtomicConnection | None = None
) -> DataSetProtocol:
"""
Load a dataset given its counter in a given experiment
Expand Down Expand Up @@ -1807,7 +1811,9 @@
return d


def _get_datasetprotocol_from_guid(guid: str, conn: ConnectionPlus) -> DataSetProtocol:
def _get_datasetprotocol_from_guid(

Check warning on line 1814 in src/qcodes/dataset/data_set.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/data_set.py#L1814

Added line #L1814 was not covered by tests
guid: str, conn: AtomicConnection
) -> DataSetProtocol:
run_id = get_runid_from_guid(conn, guid)
if run_id is None:
raise NameError(
Expand Down Expand Up @@ -1840,7 +1846,7 @@
return d


def _get_datasetprotocol_export_info(run_id: int, conn: ConnectionPlus) -> ExportInfo:
def _get_datasetprotocol_export_info(run_id: int, conn: AtomicConnection) -> ExportInfo:

Check warning on line 1849 in src/qcodes/dataset/data_set.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/data_set.py#L1849

Added line #L1849 was not covered by tests
metadata = get_metadata_from_run_id(conn=conn, run_id=run_id)
export_info_str = metadata.get("export_info", "")
export_info = ExportInfo.from_str(export_info_str)
Expand All @@ -1853,7 +1859,7 @@
specs: SPECS | None = None,
values: VALUES | None = None,
metadata: Any | None = None,
conn: ConnectionPlus | None = None,
conn: AtomicConnection | None = None,
in_memory_cache: bool = True,
) -> DataSet:
"""
Expand Down Expand Up @@ -1894,15 +1900,15 @@


def generate_dataset_table(
guids: Sequence[str], conn: ConnectionPlus | None = None
guids: Sequence[str], conn: AtomicConnection | None = None
) -> str:
"""
Generate an ASCII art table of information about the runs attached to the
supplied guids.

Args:
guids: Sequence of one or more guids
conn: A ConnectionPlus object with a connection to the database.
conn: An AtomicConnection object with a connection to the database.

Returns: ASCII art table of information about the supplied guids.

Expand Down
4 changes: 2 additions & 2 deletions src/qcodes/dataset/data_set_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import xarray as xr

from qcodes.dataset.descriptions.rundescriber import RunDescriber
from qcodes.dataset.sqlite.connection import ConnectionPlus
from qcodes.dataset.sqlite.connection import AtomicConnection

# used in forward refs that cannot be detected
from .data_set import DataSet # noqa F401
Expand Down Expand Up @@ -201,7 +201,7 @@ def to_xarray_dataset(


def load_new_data_from_db_and_append(
conn: ConnectionPlus,
conn: AtomicConnection,
table_name: str,
rundescriber: RunDescriber,
write_status: Mapping[str, int | None],
Expand Down
4 changes: 2 additions & 2 deletions src/qcodes/dataset/data_set_in_memory.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from qcodes.dataset.export_config import DataExportType
from qcodes.dataset.guids import generate_guid
from qcodes.dataset.linked_datasets.links import Link, links_to_str
from qcodes.dataset.sqlite.connection import ConnectionPlus, atomic
from qcodes.dataset.sqlite.connection import AtomicConnection, atomic

Check warning on line 26 in src/qcodes/dataset/data_set_in_memory.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/data_set_in_memory.py#L26

Added line #L26 was not covered by tests
from qcodes.dataset.sqlite.database import conn_from_dbpath_or_conn
from qcodes.dataset.sqlite.queries import (
RUNS_TABLE_COLUMNS,
Expand Down Expand Up @@ -302,7 +302,7 @@
return ds

@classmethod
def _load_from_db(cls, conn: ConnectionPlus, guid: str) -> DataSetInMem:
def _load_from_db(cls, conn: AtomicConnection, guid: str) -> DataSetInMem:

Check warning on line 305 in src/qcodes/dataset/data_set_in_memory.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/data_set_in_memory.py#L305

Added line #L305 was not covered by tests
run_attributes = get_raw_run_attributes(conn, guid)
if run_attributes is None:
raise RuntimeError(
Expand Down
4 changes: 2 additions & 2 deletions src/qcodes/dataset/data_set_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

if TYPE_CHECKING:
from qcodes.dataset.descriptions.rundescriber import RunDescriber
from qcodes.dataset.sqlite.connection import ConnectionPlus
from qcodes.dataset.sqlite.connection import AtomicConnection


class RunAttributesDict(TypedDict):
Expand All @@ -34,7 +34,7 @@ class RunAttributesDict(TypedDict):
snapshot: dict[str, Any] | None


def get_run_attributes(conn: ConnectionPlus, guid: str) -> RunAttributesDict | None:
def get_run_attributes(conn: AtomicConnection, guid: str) -> RunAttributesDict | None:
"""
Look up all information and metadata about a given dataset captured
in the database.
Expand Down
4 changes: 2 additions & 2 deletions src/qcodes/dataset/database_extract_runs.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from qcodes.dataset.data_set import DataSet
from qcodes.dataset.dataset_helpers import _add_run_to_runs_table
from qcodes.dataset.experiment_container import _create_exp_if_needed
from qcodes.dataset.sqlite.connection import ConnectionPlus, atomic
from qcodes.dataset.sqlite.connection import AtomicConnection, atomic

Check warning on line 12 in src/qcodes/dataset/database_extract_runs.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/database_extract_runs.py#L12

Added line #L12 was not covered by tests
from qcodes.dataset.sqlite.database import (
connect,
get_db_version_and_newest_available_version,
Expand Down Expand Up @@ -128,7 +128,7 @@


def _extract_single_dataset_into_db(
dataset: DataSet, target_conn: ConnectionPlus, target_exp_id: int
dataset: DataSet, target_conn: AtomicConnection, target_exp_id: int
) -> None:
"""
NB: This function should only be called from within
Expand Down
10 changes: 7 additions & 3 deletions src/qcodes/dataset/database_fix_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@
from qcodes.dataset.descriptions.rundescriber import RunDescriber
from qcodes.dataset.descriptions.versioning import v0
from qcodes.dataset.descriptions.versioning.converters import old_to_new
from qcodes.dataset.sqlite.connection import ConnectionPlus, atomic, atomic_transaction
from qcodes.dataset.sqlite.connection import (
AtomicConnection,
atomic,
atomic_transaction,
)
from qcodes.dataset.sqlite.db_upgrades.version import get_user_version
from qcodes.dataset.sqlite.queries import (
_get_parameters,
Expand All @@ -35,7 +39,7 @@
log = logging.getLogger(__name__)


def fix_version_4a_run_description_bug(conn: ConnectionPlus) -> dict[str, int]:
def fix_version_4a_run_description_bug(conn: AtomicConnection) -> dict[str, int]:
"""
Fix function to fix a bug where the RunDescriber accidentally wrote itself
to string using the (new) InterDependencies_ object instead of the (old)
Expand Down Expand Up @@ -124,7 +128,7 @@ def _convert_run_describer_v1_like_dict_to_v0_like_dict(
return old_desc_dict


def fix_wrong_run_descriptions(conn: ConnectionPlus, run_ids: Sequence[int]) -> None:
def fix_wrong_run_descriptions(conn: AtomicConnection, run_ids: Sequence[int]) -> None:
"""
NB: This is a FIX function. Do not use it unless your database has been
diagnosed with the problem that this function fixes.
Expand Down
4 changes: 2 additions & 2 deletions src/qcodes/dataset/dataset_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@

if TYPE_CHECKING:
from qcodes.dataset.data_set_protocol import DataSetProtocol
from qcodes.dataset.sqlite.connection import ConnectionPlus
from qcodes.dataset.sqlite.connection import AtomicConnection


def _add_run_to_runs_table(
dataset: DataSetProtocol,
target_conn: ConnectionPlus,
target_conn: AtomicConnection,
target_exp_id: int,
create_run_table: bool = True,
) -> tuple[int, int, str | None]:
Expand Down
16 changes: 8 additions & 8 deletions src/qcodes/dataset/experiment_container.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from qcodes.dataset.data_set import DataSet, load_by_id, new_data_set
from qcodes.dataset.experiment_settings import _set_default_experiment_id
from qcodes.dataset.sqlite.connection import ConnectionPlus, path_to_dbfile
from qcodes.dataset.sqlite.connection import AtomicConnection, path_to_dbfile

Check warning on line 10 in src/qcodes/dataset/experiment_container.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/experiment_container.py#L10

Added line #L10 was not covered by tests
from qcodes.dataset.sqlite.database import (
conn_from_dbpath_or_conn,
connect,
Expand Down Expand Up @@ -42,7 +42,7 @@
name: str | None = None,
sample_name: str | None = None,
format_string: str = "{}-{}-{}",
conn: ConnectionPlus | None = None,
conn: AtomicConnection | None = None,
) -> None:
"""
Create or load an experiment. If exp_id is None, a new experiment is
Expand Down Expand Up @@ -207,7 +207,7 @@
# public api


def experiments(conn: ConnectionPlus | None = None) -> list[Experiment]:
def experiments(conn: AtomicConnection | None = None) -> list[Experiment]:

Check warning on line 210 in src/qcodes/dataset/experiment_container.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/experiment_container.py#L210

Added line #L210 was not covered by tests
"""
List all the experiments in the container (database file from config)

Expand All @@ -228,7 +228,7 @@
name: str,
sample_name: str | None,
format_string: str = "{}-{}-{}",
conn: ConnectionPlus | None = None,
conn: AtomicConnection | None = None,
) -> Experiment:
"""
Create a new experiment (in the database file from config)
Expand Down Expand Up @@ -259,7 +259,7 @@
return experiment


def load_experiment(exp_id: int, conn: ConnectionPlus | None = None) -> Experiment:
def load_experiment(exp_id: int, conn: AtomicConnection | None = None) -> Experiment:

Check warning on line 262 in src/qcodes/dataset/experiment_container.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/experiment_container.py#L262

Added line #L262 was not covered by tests
"""
Load experiment with the specified id (from database file from config)

Expand Down Expand Up @@ -304,7 +304,7 @@
def load_experiment_by_name(
name: str,
sample: str | None = None,
conn: ConnectionPlus | None = None,
conn: AtomicConnection | None = None,
load_last_duplicate: bool = False,
) -> Experiment:
"""
Expand Down Expand Up @@ -365,7 +365,7 @@
def load_or_create_experiment(
experiment_name: str,
sample_name: str | None = None,
conn: ConnectionPlus | None = None,
conn: AtomicConnection | None = None,
load_last_duplicate: bool = False,
) -> Experiment:
"""
Expand Down Expand Up @@ -405,7 +405,7 @@


def _create_exp_if_needed(
target_conn: ConnectionPlus,
target_conn: AtomicConnection,
exp_name: str,
sample_name: str,
fmt_str: str,
Expand Down
6 changes: 3 additions & 3 deletions src/qcodes/dataset/experiment_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from __future__ import annotations

from qcodes.dataset.sqlite.connection import ConnectionPlus, path_to_dbfile
from qcodes.dataset.sqlite.connection import AtomicConnection, path_to_dbfile

Check warning on line 5 in src/qcodes/dataset/experiment_settings.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/experiment_settings.py#L5

Added line #L5 was not covered by tests
from qcodes.dataset.sqlite.queries import get_last_experiment

_default_experiment: dict[str, int | None] = {}
Expand Down Expand Up @@ -38,7 +38,7 @@
return _default_experiment.get(db_path, None)


def reset_default_experiment_id(conn: ConnectionPlus | None = None) -> None:
def reset_default_experiment_id(conn: AtomicConnection | None = None) -> None:

Check warning on line 41 in src/qcodes/dataset/experiment_settings.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/experiment_settings.py#L41

Added line #L41 was not covered by tests
"""
Resets the default experiment id to to the last experiment in the db.
"""
Expand All @@ -50,7 +50,7 @@
_default_experiment[db_path] = None


def get_default_experiment_id(conn: ConnectionPlus) -> int:
def get_default_experiment_id(conn: AtomicConnection) -> int:

Check warning on line 53 in src/qcodes/dataset/experiment_settings.py

View check run for this annotation

Codecov / codecov/patch

src/qcodes/dataset/experiment_settings.py#L53

Added line #L53 was not covered by tests
"""
Returns the latest created/ loaded experiment's exp_id as the default
experiment. If it is not set the maximum exp_id returned as the default.
Expand Down
4 changes: 2 additions & 2 deletions src/qcodes/dataset/measurements.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@

from qcodes.dataset.descriptions.versioning.rundescribertypes import Shapes
from qcodes.dataset.experiment_container import Experiment
from qcodes.dataset.sqlite.connection import ConnectionPlus
from qcodes.dataset.sqlite.connection import AtomicConnection
from qcodes.dataset.sqlite.query_helpers import VALUE

log = logging.getLogger(__name__)
Expand Down Expand Up @@ -631,7 +631,7 @@ def __enter__(self) -> DataSaver:
if self.experiment is not None:
exp_id: int | None = self.experiment.exp_id
path_to_db: str | None = self.experiment.path_to_db
conn: ConnectionPlus | None = self.experiment.conn
conn: AtomicConnection | None = self.experiment.conn
else:
exp_id = None
path_to_db = None
Expand Down
Loading
Loading