def update_run_description(conn: ConnectionPlus, run_id: int, description: str) -> None: """ Update the run_description field for the given run_id. The description string must be a valid JSON string representation of a RunDescriber object """ try: serial.from_json_to_current(description) except Exception as e: raise ValueError("Invalid description string. Must be a JSON string " "representaion of a RunDescriber object.") from e _update_run_description(conn, run_id, description)
def test_perform_actual_upgrade_5_to_6(): fixpath = os.path.join(fixturepath, 'db_files', 'version5') db_file = 'empty.db' dbname_old = os.path.join(fixpath, db_file) if not os.path.exists(dbname_old): pytest.skip("No db-file fixtures found. You can generate test db-files" " using the scripts in the " "https://github.com/QCoDeS/qcodes_generate_test_db/ repo") with temporarily_copied_DB(dbname_old, debug=False, version=5) as conn: perform_db_upgrade_5_to_6(conn) assert get_user_version(conn) == 6 db_file = 'some_runs.db' dbname_old = os.path.join(fixpath, db_file) with temporarily_copied_DB(dbname_old, debug=False, version=5) as conn: perform_db_upgrade_5_to_6(conn) assert get_user_version(conn) == 6 no_of_runs_query = "SELECT max(run_id) FROM runs" no_of_runs = one( atomic_transaction(conn, no_of_runs_query), 'max(run_id)') assert no_of_runs == 10 for run_id in range(1, no_of_runs + 1): json_str = get_run_description(conn, run_id) deser = json.loads(json_str) assert deser['version'] == 0 desc = serial.from_json_to_current(json_str) assert desc._version == 1
def test_fix_wrong_run_descriptions(): v3fixpath = os.path.join(fixturepath, 'db_files', 'version3') dbname_old = os.path.join(v3fixpath, 'some_runs_without_run_description.db') if not os.path.exists(dbname_old): pytest.skip("No db-file fixtures found. You can generate test db-files" " using the scripts in the legacy_DB_generation folder") def make_ps(n): ps = ParamSpec(f'p{n}', label=f'Parameter {n}', unit=f'unit {n}', paramtype='numeric') return ps paramspecs = [make_ps(n) for n in range(6)] paramspecs[2]._inferred_from = ['p0'] paramspecs[3]._inferred_from = ['p1', 'p0'] paramspecs[4]._depends_on = ['p2', 'p3'] paramspecs[5]._inferred_from = ['p0'] with temporarily_copied_DB(dbname_old, debug=False, version=3) as conn: assert get_user_version(conn) == 3 expected_description = RunDescriber( old_to_new(v0.InterDependencies(*paramspecs))) empty_description = RunDescriber(old_to_new(v0.InterDependencies())) fix_wrong_run_descriptions(conn, [1, 2, 3, 4]) for run_id in [1, 2, 3]: desc_str = get_run_description(conn, run_id) desc = serial.from_json_to_current(desc_str) assert desc == expected_description desc_str = get_run_description(conn, run_id=4) desc = serial.from_json_to_current(desc_str) assert desc == empty_description
def _get_run_description_from_db(self) -> RunDescriber: """ Look up the run_description from the database """ desc_str = get_run_description(self.conn, self.run_id) return serial.from_json_to_current(desc_str)