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
This commit is contained in:
Ville Skyttä 2023-01-15 06:19:01 +02:00 committed by GitHub
parent 3ae4e98204
commit 19426ec18a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -15,7 +15,10 @@ FAULT_LOG_FILENAME = "home-assistant.log.fault"
def validate_os() -> None: def validate_os() -> None:
"""Validate that Home Assistant is running in a supported operating system.""" """Validate that Home Assistant is running in a supported operating system."""
if not sys.platform.startswith(("darwin", "linux")): 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) sys.exit(1)
@ -24,7 +27,8 @@ def validate_python() -> None:
if sys.version_info[:3] < REQUIRED_PYTHON_VER: if sys.version_info[:3] < REQUIRED_PYTHON_VER:
print( print(
"Home Assistant requires at least Python " "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) sys.exit(1)
@ -39,18 +43,23 @@ def ensure_config_path(config_dir: str) -> None:
# Test if configuration directory exists # Test if configuration directory exists
if not os.path.isdir(config_dir): if not os.path.isdir(config_dir):
if config_dir != config_util.get_default_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( print(
f"Fatal Error: Specified configuration directory {config_dir} " f"Fatal Error: Specified configuration directory {config_dir} {reason}",
"does not exist" file=sys.stderr,
) )
sys.exit(1) sys.exit(1)
try: try:
os.mkdir(config_dir) os.mkdir(config_dir)
except OSError: except OSError as ex:
print( print(
"Fatal Error: Unable to create default configuration " "Fatal Error: Unable to create default configuration "
f"directory {config_dir}" f"directory {config_dir}: {ex}",
file=sys.stderr,
) )
sys.exit(1) sys.exit(1)
@ -58,8 +67,11 @@ def ensure_config_path(config_dir: str) -> None:
if not os.path.isdir(lib_dir): if not os.path.isdir(lib_dir):
try: try:
os.mkdir(lib_dir) os.mkdir(lib_dir)
except OSError: except OSError as ex:
print(f"Fatal Error: Unable to create library directory {lib_dir}") print(
f"Fatal Error: Unable to create library directory {lib_dir}: {ex}",
file=sys.stderr,
)
sys.exit(1) sys.exit(1)