1212principle, the upgrade functions should not have dependecies from
1313:mod:`.queries` module.
1414"""
15+ from __future__ import annotations
16+
1517import logging
1618import sys
1719from functools import wraps
18- from typing import Any , Callable , Dict
20+ from typing import Callable
1921
2022import numpy as np
2123from tqdm import tqdm
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
4850def _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+
5362def 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