From 28e76e26bacef6433edf5831698929b81f04140d Mon Sep 17 00:00:00 2001 From: Ben Fitzpatrick Date: Wed, 17 Jan 2024 12:50:02 +0000 Subject: [PATCH] More descriptive errors for other handlers --- metomi/rose/config_processors/fileinstall.py | 7 ++++--- metomi/rose/loc_handlers/fs.py | 2 +- metomi/rose/loc_handlers/namelist.py | 2 +- metomi/rose/loc_handlers/rsync.py | 2 +- t/rose-app-run/05-file.t | 15 +++++++++++++-- t/rose-app-run/06-namelist.t | 4 ++-- t/rose-app-run/15-file-permission.t | 2 +- 7 files changed, 23 insertions(+), 11 deletions(-) diff --git a/metomi/rose/config_processors/fileinstall.py b/metomi/rose/config_processors/fileinstall.py index 937ed74641..11ec5b4061 100644 --- a/metomi/rose/config_processors/fileinstall.py +++ b/metomi/rose/config_processors/fileinstall.py @@ -204,7 +204,7 @@ def _process(self, conf_tree, nodes, loc_dao, **kwargs): source.scheme = scheme break self.loc_handlers_manager.parse(source, conf_tree) - except ValueError: + except ValueError as exc: if source.is_optional: sources.pop(source.name) for name in source.used_by_names: @@ -216,6 +216,7 @@ def _process(self, conf_tree, nodes, loc_dao, **kwargs): raise ConfigProcessError( ["file:" + source.used_by_names[0], "source"], source.name, + exc ) prev_source = loc_dao.select(source.name) source.is_out_of_date = ( @@ -852,7 +853,7 @@ def parse(self, loc, conf_tree): # Scheme specified in the configuration. handler = self.get_handler(loc.scheme) if handler is None: - raise ValueError(loc.name) + raise ValueError(f"don't support scheme {loc.scheme}") else: # Scheme not specified in the configuration. scheme = urlparse(loc.name).scheme @@ -861,7 +862,7 @@ def parse(self, loc, conf_tree): if handler is None: handler = self.guess_handler(loc) if handler is None: - raise ValueError(loc.name) + raise ValueError(f"don't know how to process {loc.name}") else: handler = self.get_handler(self.DEFAULT_SCHEME) return handler.parse(loc, conf_tree) diff --git a/metomi/rose/loc_handlers/fs.py b/metomi/rose/loc_handlers/fs.py index 0c38c63090..0516144934 100644 --- a/metomi/rose/loc_handlers/fs.py +++ b/metomi/rose/loc_handlers/fs.py @@ -42,7 +42,7 @@ def parse(cls, loc, _): loc.scheme = "fs" name = os.path.expanduser(loc.name) if not os.path.exists(name): - raise ValueError(loc.name) + raise ValueError(f"path does not exist or not accessible: {name}") paths_and_checksums = get_checksum(name) for path, checksum, access_mode in paths_and_checksums: loc.add_path(path, checksum, access_mode) diff --git a/metomi/rose/loc_handlers/namelist.py b/metomi/rose/loc_handlers/namelist.py index 17fca270ef..07166d14b8 100644 --- a/metomi/rose/loc_handlers/namelist.py +++ b/metomi/rose/loc_handlers/namelist.py @@ -61,7 +61,7 @@ def parse(self, loc, conf_tree): if section_value is None: sections.remove(section) if not sections: - raise ValueError(loc.name) + raise ValueError(f"could not locate {loc.name}") return sections async def pull(self, loc, conf_tree): diff --git a/metomi/rose/loc_handlers/rsync.py b/metomi/rose/loc_handlers/rsync.py index 2b7a9abb45..32d17a8add 100644 --- a/metomi/rose/loc_handlers/rsync.py +++ b/metomi/rose/loc_handlers/rsync.py @@ -67,7 +67,7 @@ def parse(self, loc, _): out = self.manager.popen(*cmd, stdin=stdin)[0] lines = out.splitlines() if not lines or lines[0] not in [loc.TYPE_BLOB, loc.TYPE_TREE]: - raise ValueError(loc.name) + raise ValueError(f"could not locate {path} on host {host}") loc.loc_type = lines.pop(0) if loc.loc_type == loc.TYPE_BLOB: line = lines.pop(0) diff --git a/t/rose-app-run/05-file.t b/t/rose-app-run/05-file.t index f1fa0d51af..9ad0e993a1 100755 --- a/t/rose-app-run/05-file.t +++ b/t/rose-app-run/05-file.t @@ -44,7 +44,7 @@ Hello and good bye. __CONTENT__ OUT=$(cd config/file && cat hello1 hello2 hello3/text) #------------------------------------------------------------------------------- -tests 62 +tests 65 #------------------------------------------------------------------------------- # Normal mode with free format files. TEST_KEY=$TEST_KEY_BASE @@ -70,7 +70,18 @@ run_fail "$TEST_KEY" rose app-run --config=../config -q \ --define='[file:hello4]source=stuff:ing' file_cmp "$TEST_KEY.out" "$TEST_KEY.out"