From 19426ec18a90e6b39d995c411ce915dd7b0cba05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Sun, 15 Jan 2023 06:19:01 +0200 Subject: [PATCH] Startup error message improvements (#85860) * Output config and lib dir create failure reasons * Output to stderr * Fix error message when specified config directory is not a directory --- homeassistant/__main__.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/homeassistant/__main__.py b/homeassistant/__main__.py index 9dfe4f4f9ed..e7f38db5e37 100644 --- a/homeassistant/__main__.py +++ b/homeassistant/__main__.py @@ -15,7 +15,10 @@ FAULT_LOG_FILENAME = "home-assistant.log.fault" def validate_os() -> None: """Validate that Home Assistant is running in a supported operating system.""" if not sys.platform.startswith(("darwin", "linux")): - print("Home Assistant only supports Linux, OSX and Windows using WSL") + print( + "Home Assistant only supports Linux, OSX and Windows using WSL", + file=sys.stderr, + ) sys.exit(1) @@ -24,7 +27,8 @@ def validate_python() -> None: if sys.version_info[:3] < REQUIRED_PYTHON_VER: print( "Home Assistant requires at least Python " - f"{REQUIRED_PYTHON_VER[0]}.{REQUIRED_PYTHON_VER[1]}.{REQUIRED_PYTHON_VER[2]}" + f"{REQUIRED_PYTHON_VER[0]}.{REQUIRED_PYTHON_VER[1]}.{REQUIRED_PYTHON_VER[2]}", + file=sys.stderr, ) sys.exit(1) @@ -39,18 +43,23 @@ def ensure_config_path(config_dir: str) -> None: # Test if configuration directory exists if not os.path.isdir(config_dir): if config_dir != config_util.get_default_config_dir(): + if os.path.exists(config_dir): + reason = "is not a directory" + else: + reason = "does not exist" print( - f"Fatal Error: Specified configuration directory {config_dir} " - "does not exist" + f"Fatal Error: Specified configuration directory {config_dir} {reason}", + file=sys.stderr, ) sys.exit(1) try: os.mkdir(config_dir) - except OSError: + except OSError as ex: print( "Fatal Error: Unable to create default configuration " - f"directory {config_dir}" + f"directory {config_dir}: {ex}", + file=sys.stderr, ) sys.exit(1) @@ -58,8 +67,11 @@ def ensure_config_path(config_dir: str) -> None: if not os.path.isdir(lib_dir): try: os.mkdir(lib_dir) - except OSError: - print(f"Fatal Error: Unable to create library directory {lib_dir}") + except OSError as ex: + print( + f"Fatal Error: Unable to create library directory {lib_dir}: {ex}", + file=sys.stderr, + ) sys.exit(1)