From b3e55b753b9661fe9094a70e5b3bf5aa450a3663 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Tue, 24 May 2016 08:58:34 -0500 Subject: [PATCH] environment,dashboard: generalize multiple defaults, fix HDF5 argument load --- artiq/dashboard/experiments.py | 7 ++++++- artiq/gui/entries.py | 4 +++- artiq/language/environment.py | 4 ++++ artiq/language/scan.py | 2 +- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/artiq/dashboard/experiments.py b/artiq/dashboard/experiments.py index c5401f213..61d27bce2 100644 --- a/artiq/dashboard/experiments.py +++ b/artiq/dashboard/experiments.py @@ -331,7 +331,12 @@ class _ExperimentDock(QtWidgets.QMdiSubWindow): self.expurl, exc_info=True) return for k, v in overrides.items(): - arginfo[k][0]["default"] = v + # Some values (e.g. scans) may have multiple defaults in a list + if ("default" in arginfo[k][0] + and isinstance(arginfo[k][0]["default"], list)): + arginfo[k][0]["default"].insert(0, v) + else: + arginfo[k][0]["default"] = v self.manager.initialize_submission_arguments(self.expurl, arginfo) self.argeditor.deleteLater() diff --git a/artiq/gui/entries.py b/artiq/gui/entries.py index 900023ee4..8dc0a9ea3 100644 --- a/artiq/gui/entries.py +++ b/artiq/gui/entries.py @@ -274,8 +274,10 @@ class _ScanEntry(LayoutWidget): } if "default" in procdesc: defaults = procdesc["default"] + if not isinstance(defaults, list): + defaults = [defaults] state["selected"] = defaults[0]["ty"] - for default in defaults: + for default in reversed(defaults): ty = default["ty"] if ty == "NoScan": state[ty]["value"] = default["value"] diff --git a/artiq/language/environment.py b/artiq/language/environment.py index 53b3fa38f..62dae4803 100644 --- a/artiq/language/environment.py +++ b/artiq/language/environment.py @@ -23,6 +23,10 @@ class DefaultMissing(Exception): class _SimpleArgProcessor: def __init__(self, default=NoDefault): + # If default is a list, it means multiple defaults are specified, with + # decreasing priority. + if isinstance(default, list): + raise NotImplementedError if default is not NoDefault: self.default_value = default diff --git a/artiq/language/scan.py b/artiq/language/scan.py index c7f6c6a9b..f674d0433 100644 --- a/artiq/language/scan.py +++ b/artiq/language/scan.py @@ -166,7 +166,7 @@ class Scannable: if global_step is None: global_step = scale/10.0 if default is not NoDefault: - if not isinstance(default, (tuple, list)): + if not isinstance(default, list): default = [default] self.default_values = default self.unit = unit