Skip to content

Commit a53ce6d

Browse files
Merge #4569
4569: Don't show progressbars when upgrading an empty db r=jenshnielsen a=jenshnielsen This should help mitigate the issue in #4566 by not showing the progress bar when creating a new db. Fixes #4566 Co-authored-by: Jens H. Nielsen <Jens.Nielsen@microsoft.com>
2 parents dfb42d2 + 94403d5 commit a53ce6d

6 files changed

Lines changed: 113 additions & 61 deletions

File tree

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
The Dataset no longer prints upgrade progressbars when upgrading an empty database. This means that
2+
the progressbar will no longer be shown when creating a new database.

qcodes/dataset/sqlite/db_upgrades/__init__.py

Lines changed: 61 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@
1212
principle, the upgrade functions should not have dependecies from
1313
:mod:`.queries` module.
1414
"""
15+
from __future__ import annotations
16+
1517
import logging
1618
import sys
1719
from functools import wraps
18-
from typing import Any, Callable, Dict
20+
from typing import Callable
1921

2022
import numpy as np
2123
from tqdm import tqdm
@@ -36,20 +38,27 @@
3638
# INFRASTRUCTURE FOR UPGRADE FUNCTIONS
3739

3840

39-
TUpgraderFunction = Callable[[ConnectionPlus], None]
41+
TUpgraderFunction = Callable[[ConnectionPlus, bool], None]
4042

4143
# Functions decorated as 'upgrader' are inserted into this dict
4244
# The newest database version is thus determined by the number of upgrades
4345
# in this module
4446
# The key is the TARGET VERSION of the upgrade, i.e. the first key is 1
45-
_UPGRADE_ACTIONS: Dict[int, Callable[..., Any]] = {}
47+
_UPGRADE_ACTIONS: dict[int, TUpgraderFunction] = {}
4648

4749

4850
def _latest_available_version() -> int:
4951
"""Return latest available database schema version"""
5052
return len(_UPGRADE_ACTIONS)
5153

5254

55+
def _get_no_of_runs(conn: ConnectionPlus) -> int:
56+
no_of_runs_query = "SELECT max(run_id) FROM runs"
57+
no_of_runs = one(atomic_transaction(conn, no_of_runs_query), "max(run_id)")
58+
no_of_runs = no_of_runs or 0
59+
return no_of_runs
60+
61+
5362
def upgrader(func: TUpgraderFunction) -> TUpgraderFunction:
5463
"""
5564
Decorator for database version upgrade functions. An upgrade function
@@ -81,7 +90,7 @@ def upgrader(func: TUpgraderFunction) -> TUpgraderFunction:
8190
' to version N+1')
8291

8392
@wraps(func)
84-
def do_upgrade(conn: ConnectionPlus) -> None:
93+
def do_upgrade(conn: ConnectionPlus, show_progress_bar: bool = True) -> None:
8594

8695
log.info(f'Starting database upgrade version {from_version} '
8796
f'to {to_version}')
@@ -93,7 +102,7 @@ def do_upgrade(conn: ConnectionPlus) -> None:
93102
return
94103

95104
# This function either raises or returns
96-
func(conn)
105+
func(conn, show_progress_bar)
97106

98107
set_user_version(conn, to_version)
99108
log.info(f'Succesfully performed upgrade {from_version} '
@@ -119,17 +128,22 @@ def perform_db_upgrade(conn: ConnectionPlus, version: int = -1) -> None:
119128
version = _latest_available_version() if version == -1 else version
120129

121130
current_version = get_user_version(conn)
131+
132+
show_progress_bar = not (_get_no_of_runs(conn) == 0)
133+
122134
if current_version < version:
123135
log.info("Commencing database upgrade")
124136
for target_version in sorted(_UPGRADE_ACTIONS)[:version]:
125-
_UPGRADE_ACTIONS[target_version](conn)
137+
_UPGRADE_ACTIONS[target_version](conn, show_progress_bar)
126138

127139

128140
# DATABASE UPGRADE FUNCTIONS
129141

130142

131143
@upgrader
132-
def perform_db_upgrade_0_to_1(conn: ConnectionPlus) -> None:
144+
def perform_db_upgrade_0_to_1(
145+
conn: ConnectionPlus, show_progress_bar: bool = True
146+
) -> None:
133147
"""
134148
Perform the upgrade from version 0 to version 1
135149
@@ -148,7 +162,11 @@ def perform_db_upgrade_0_to_1(conn: ConnectionPlus) -> None:
148162
cur = transaction(conn, 'SELECT run_id FROM runs')
149163
run_ids = [r[0] for r in many_many(cur, 'run_id')]
150164

151-
pbar = tqdm(range(1, len(run_ids) + 1), file=sys.stdout)
165+
pbar = tqdm(
166+
range(1, len(run_ids) + 1),
167+
file=sys.stdout,
168+
disable=not show_progress_bar,
169+
)
152170
pbar.set_description("Upgrading database; v0 -> v1")
153171

154172
for run_id in pbar:
@@ -173,7 +191,9 @@ def perform_db_upgrade_0_to_1(conn: ConnectionPlus) -> None:
173191

174192

175193
@upgrader
176-
def perform_db_upgrade_1_to_2(conn: ConnectionPlus) -> None:
194+
def perform_db_upgrade_1_to_2(
195+
conn: ConnectionPlus, show_progress_bar: bool = True
196+
) -> None:
177197
"""
178198
Perform the upgrade from version 1 to version 2
179199
@@ -184,7 +204,7 @@ def perform_db_upgrade_1_to_2(conn: ConnectionPlus) -> None:
184204
cur = atomic_transaction(conn, sql)
185205
n_run_tables = len(cur.fetchall())
186206

187-
pbar = tqdm(range(1), file=sys.stdout)
207+
pbar = tqdm(range(1), file=sys.stdout, disable=not show_progress_bar)
188208
pbar.set_description("Upgrading database; v1 -> v2")
189209

190210
if n_run_tables == 1:
@@ -209,7 +229,9 @@ def perform_db_upgrade_1_to_2(conn: ConnectionPlus) -> None:
209229

210230

211231
@upgrader
212-
def perform_db_upgrade_2_to_3(conn: ConnectionPlus) -> None:
232+
def perform_db_upgrade_2_to_3(
233+
conn: ConnectionPlus, show_progress_bar: bool = True
234+
) -> None:
213235
"""
214236
Perform the upgrade from version 2 to version 3
215237
@@ -219,11 +241,14 @@ def perform_db_upgrade_2_to_3(conn: ConnectionPlus) -> None:
219241
object
220242
"""
221243
from qcodes.dataset.sqlite.db_upgrades.upgrade_2_to_3 import upgrade_2_to_3
222-
upgrade_2_to_3(conn)
244+
245+
upgrade_2_to_3(conn, show_progress_bar)
223246

224247

225248
@upgrader
226-
def perform_db_upgrade_3_to_4(conn: ConnectionPlus) -> None:
249+
def perform_db_upgrade_3_to_4(
250+
conn: ConnectionPlus, show_progress_bar: bool = True
251+
) -> None:
227252
"""
228253
Perform the upgrade from version 3 to version 4. This really
229254
repeats the version 3 upgrade as it originally had two bugs in
@@ -234,11 +259,14 @@ def perform_db_upgrade_3_to_4(conn: ConnectionPlus) -> None:
234259
other parameters. Both have since been fixed so rerun the upgrade.
235260
"""
236261
from qcodes.dataset.sqlite.db_upgrades.upgrade_3_to_4 import upgrade_3_to_4
237-
upgrade_3_to_4(conn)
262+
263+
upgrade_3_to_4(conn, show_progress_bar)
238264

239265

240266
@upgrader
241-
def perform_db_upgrade_4_to_5(conn: ConnectionPlus) -> None:
267+
def perform_db_upgrade_4_to_5(
268+
conn: ConnectionPlus, show_progress_bar: bool = True
269+
) -> None:
242270
"""
243271
Perform the upgrade from version 4 to version 5.
244272
@@ -248,7 +276,7 @@ def perform_db_upgrade_4_to_5(conn: ConnectionPlus) -> None:
248276
with snapshot information.
249277
"""
250278
with atomic(conn) as conn:
251-
pbar = tqdm(range(1), file=sys.stdout)
279+
pbar = tqdm(range(1), file=sys.stdout, disable=not show_progress_bar)
252280
pbar.set_description("Upgrading database; v4 -> v5")
253281
# iterate through the pbar for the sake of the side effect; it
254282
# prints that the database is being upgraded
@@ -257,7 +285,9 @@ def perform_db_upgrade_4_to_5(conn: ConnectionPlus) -> None:
257285

258286

259287
@upgrader
260-
def perform_db_upgrade_5_to_6(conn: ConnectionPlus) -> None:
288+
def perform_db_upgrade_5_to_6(
289+
conn: ConnectionPlus, show_progress_bar: bool = True
290+
) -> None:
261291
"""
262292
Perform the upgrade from version 5 to version 6.
263293
@@ -266,11 +296,14 @@ def perform_db_upgrade_5_to_6(conn: ConnectionPlus) -> None:
266296
not be tracked as schema upgrades.
267297
"""
268298
from qcodes.dataset.sqlite.db_upgrades.upgrade_5_to_6 import upgrade_5_to_6
269-
upgrade_5_to_6(conn)
299+
300+
upgrade_5_to_6(conn, show_progress_bar)
270301

271302

272303
@upgrader
273-
def perform_db_upgrade_6_to_7(conn: ConnectionPlus) -> None:
304+
def perform_db_upgrade_6_to_7(
305+
conn: ConnectionPlus, show_progress_bar: bool = True
306+
) -> None:
274307
"""
275308
Perform the upgrade from version 6 to version 7
276309
@@ -284,7 +317,7 @@ def perform_db_upgrade_6_to_7(conn: ConnectionPlus) -> None:
284317

285318
if n_run_tables == 1:
286319

287-
pbar = tqdm(range(1), file=sys.stdout)
320+
pbar = tqdm(range(1), file=sys.stdout, disable=not show_progress_bar)
288321
pbar.set_description("Upgrading database; v6 -> v7")
289322
# iterate through the pbar for the sake of the side effect; it
290323
# prints that the database is being upgraded
@@ -306,14 +339,16 @@ def perform_db_upgrade_6_to_7(conn: ConnectionPlus) -> None:
306339

307340

308341
@upgrader
309-
def perform_db_upgrade_7_to_8(conn: ConnectionPlus) -> None:
342+
def perform_db_upgrade_7_to_8(
343+
conn: ConnectionPlus, show_progress_bar: bool = True
344+
) -> None:
310345
"""
311346
Perform the upgrade from version 7 to version 8.
312347
313348
Add a new column to store the dataset's parents to the runs table.
314349
"""
315350
with atomic(conn) as conn:
316-
pbar = tqdm(range(1), file=sys.stdout)
351+
pbar = tqdm(range(1), file=sys.stdout, disable=not show_progress_bar)
317352
pbar.set_description("Upgrading database; v7 -> v8")
318353
# iterate through the pbar for the sake of the side effect; it
319354
# prints that the database is being upgraded
@@ -322,7 +357,9 @@ def perform_db_upgrade_7_to_8(conn: ConnectionPlus) -> None:
322357

323358

324359
@upgrader
325-
def perform_db_upgrade_8_to_9(conn: ConnectionPlus) -> None:
360+
def perform_db_upgrade_8_to_9(
361+
conn: ConnectionPlus, show_progress_bar: bool = True
362+
) -> None:
326363
"""
327364
Perform the upgrade from version 8 to version 9.
328365
@@ -333,7 +370,7 @@ def perform_db_upgrade_8_to_9(conn: ConnectionPlus) -> None:
333370
cur = atomic_transaction(conn, sql)
334371
n_run_tables = len(cur.fetchall())
335372

336-
pbar = tqdm(range(1), file=sys.stdout)
373+
pbar = tqdm(range(1), file=sys.stdout, disable=not show_progress_bar)
337374
pbar.set_description("Upgrading database; v8 -> v9")
338375

339376
if n_run_tables == 1:

0 commit comments

Comments
 (0)