diff --git a/bliss/config/static.py b/bliss/config/static.py index 2b87d01b9227aba4bc2aeaef5ba839cc4dde3079..23093cdae0bb5b2263506791041c798f28da9112 100644 --- a/bliss/config/static.py +++ b/bliss/config/static.py @@ -832,7 +832,7 @@ class Config(metaclass=Singleton): def parsing_report(self): if self.invalid_yaml_files: - report = "YAML parsing error(s):\n" + report = f"Ignored {len(self.invalid_yaml_files)} YAML file(s) due to parsing error(s):\n" for path, msg in self.invalid_yaml_files.items(): report += f" - {path}:\n" report += f"{indent(msg, ' |')}\n" diff --git a/bliss/shell/cli/repl.py b/bliss/shell/cli/repl.py index 26ddac12dea22574e8c1c1e747b3b1f730abbf0c..ddeb75b95989cb2ebb90baf94bb04053aed65656 100644 --- a/bliss/shell/cli/repl.py +++ b/bliss/shell/cli/repl.py @@ -555,7 +555,7 @@ def initialize( if config.invalid_yaml_files: print() print( - f"Found {len(config.invalid_yaml_files)} YAML parsing error(s), use config.parsing_report() for details.\n" + f"Ignored {len(config.invalid_yaml_files)} YAML file(s) due to parsing error(s), use config.parsing_report() for details.\n" ) # Setup(s) diff --git a/bliss/shell/main.py b/bliss/shell/main.py index ab8e9f49188e508c76b42685089da35be426d565..b81c407ccd2d46cd630bc97a62ba5f6131a2dc3b 100755 --- a/bliss/shell/main.py +++ b/bliss/shell/main.py @@ -165,13 +165,18 @@ def main(): sys.exit(0) # check beacon connection - static.get_config() + config = static.get_config() # Start a specific session if arguments["--session"]: session_name = arguments["--session"] if session_name not in get_sessions_list(): - print(("'%s' does not seem to be a valid session, exiting." % session_name)) + print(f"\n'{session_name}' does not seem to be a valid session, ", end="") + if config.invalid_yaml_files: + print("it may relate to the following yaml error(s):") + config.parsing_report() + else: + print("exiting.") print_sessions_list(get_sessions_list()) sys.exit(0) else: diff --git a/tests/config/test_config.py b/tests/config/test_config.py index 03aa55c7ad4c58977757cda0198c48bea396fc16..59879882b5802c5be07ec09eab6328516848c227 100644 --- a/tests/config/test_config.py +++ b/tests/config/test_config.py @@ -10,6 +10,7 @@ import os from unittest.mock import patch import pytest import ruamel +import subprocess from bliss.config.conductor import client from bliss.config.static import ConfigNode @@ -162,6 +163,26 @@ def test_ruamel_load_error(beacon, beacon_directory): assert error_msg.startswith("YAML parser failure:") +def test_broken_session_yml(beacon, beacon_directory): + broken_session = f"{beacon_directory}/broken_session.yml" + + with open(broken_session, "w") as f: + f.write("foo") + + bliss_shell = subprocess.Popen( + [sys.executable, "-m", "bliss.shell.main", "-s", "broken_session"], + stdout=subprocess.PIPE, + ) + output, err = bliss_shell.communicate() + + expected = "'broken_session' does not seem to be a valid session, " + expected += "it may relate to the following yaml error(s):\n" + expected += "Ignored 1 YAML file(s) due to parsing error(s):\n" + expected += " - broken_session.yml:\n" + expected += " |'str' object has no attribute 'items'\n" + assert expected in output.decode() + + @pytest.mark.parametrize( "object_name, get_func_name, copy", [["refs_test", "get", False], ["refs_test_cpy", "get_config", True]],