From 6a5bf18abdb348025722a0d05a7ed2c3fcb8078a Mon Sep 17 00:00:00 2001 From: Douglas Jacobsen Date: Wed, 6 Nov 2024 15:26:13 -0700 Subject: [PATCH 1/2] Ensure workspace manage doesn't create empty dicts This commit fixes an issue where `ramble workspace manage experiments` would create an empty workloads dict for an application, when a workload filter was provided that would add no workloads. --- lib/ramble/ramble/workspace/workspace.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/ramble/ramble/workspace/workspace.py b/lib/ramble/ramble/workspace/workspace.py index 2a2758ab2..fbacf9fd6 100644 --- a/lib/ramble/ramble/workspace/workspace.py +++ b/lib/ramble/ramble/workspace/workspace.py @@ -1141,6 +1141,8 @@ def yaml_add_comment_before_key( import ruamel.yaml as yaml + edited = False + workspace_vars = self.get_workspace_vars() apps_dict = self.get_applications().copy() @@ -1219,6 +1221,7 @@ def yaml_add_comment_before_key( workload_names = [ramble.expander.Expander.expansion_str(workload_name_variable)] for workload_name in workload_names: + edited = True if workload_name not in workloads_dict: workloads_dict[workload_name] = syaml.syaml_dict() workloads_dict[workload_name][namespace.experiment] = syaml.syaml_dict() @@ -1301,11 +1304,11 @@ def yaml_add_comment_before_key( if namespace.matrix not in exp_dict: exp_dict[namespace.matrix] = exp_matrix.copy() - if not self.dry_run: + if edited and not self.dry_run: ramble.config.config.update_config( namespace.application, apps_dict, scope=self.ws_file_config_scope_name() ) - else: + elif edited: workspace_dict = self._get_workspace_dict() workspace_dict[namespace.ramble][namespace.application] = apps_dict From 2bcbe221a00575c897faf098d10a98a3dc70a07e Mon Sep 17 00:00:00 2001 From: Douglas Jacobsen Date: Thu, 7 Nov 2024 08:30:28 -0700 Subject: [PATCH 2/2] Add test for adding no workloads with manage commands --- lib/ramble/ramble/test/cmd/workspace.py | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib/ramble/ramble/test/cmd/workspace.py b/lib/ramble/ramble/test/cmd/workspace.py index 72497afcb..5f267f47c 100644 --- a/lib/ramble/ramble/test/cmd/workspace.py +++ b/lib/ramble/ramble/test/cmd/workspace.py @@ -2240,3 +2240,29 @@ def test_workspace_info_software(request): assert "spack-pkg" in output assert "pip-test" in output assert "spack-test" not in output + + +def test_workspace_no_empty_workloads(request): + workspace_name = request.node.name + global_args = ["-w", workspace_name] + + with ramble.workspace.create(workspace_name) as ws: + ws.write() + + workspace( + "manage", + "experiments", + "basic", + "--wf", + "nothing*", + "-v", + "n_nodes=1", + "-v", + "n_ranks=1", + global_args=global_args, + ) + + with open(ws.config_file_path) as f: + data = f.read() + assert "basic:" not in data + assert "workloads: {}" not in data