1
0
Files
scripts/bin/check
T
2024-12-06 00:35:34 +01:00

123 lines
3.7 KiB
Python
Executable File

#!/usr/bin/env python3
"""Check if all scripts and their dependencies are properly configured."""
import os
import shutil
import subprocess
import configparser
from pathlib import Path
from typing import Dict, List, Tuple
# Unicode emoji
CHECK = "✅"
CROSS = "❌"
def check_command(cmd: str) -> Tuple[bool, str]:
"""Check if a command is available in PATH."""
return (shutil.which(cmd) is not None, f"Command '{cmd}' not found")
def check_env_var(var: str) -> Tuple[bool, str]:
"""Check if an environment variable is set."""
return (var in os.environ, f"Environment variable '{var}' not set")
def check_stats_commands() -> List[Tuple[bool, str]]:
"""Check if all stat commands in config can run."""
results = []
config_home = os.environ.get("XDG_CONFIG_HOME", os.path.expanduser("~/.config"))
config_path = Path(config_home) / "stats/config.ini"
if not config_path.exists():
return [(False, f"Stats config not found at {config_path}")]
config = configparser.ConfigParser(interpolation=None)
config.read(config_path)
for section in config.sections():
if section.startswith('stat.'):
cmd = config[section]['command']
try:
subprocess.run(cmd, shell=True, capture_output=True, check=True)
results.append((True, f"Command '{cmd}' runs successfully"))
except subprocess.CalledProcessError:
results.append((False, f"Command '{cmd}' failed to run"))
return results
def check_stats_collector_config() -> List[Tuple[bool, str]]:
"""Check if stats collector config exists."""
results = []
config_home = os.environ.get("XDG_CONFIG_HOME", os.path.expanduser("~/.config"))
config_path = Path(config_home) / "stats-collector/config.ini"
if config_path.exists():
results.append((True, "Stats collector config found"))
else:
results.append((False, f"Stats collector config not found at {config_path}"))
return results
def check_scripts() -> Dict[str, List[Tuple[bool, str]]]:
"""Run all checks for each script."""
checks = {
"av1": [
check_command("ffmpeg"),
],
"e-ink": [
check_command("python3"),
],
"indeel": [
check_command("file"),
check_command("magick"),
check_command("dctfilename"),
check_command("webpmux"),
check_command("gifski"),
],
"mover": [], # No specific dependencies
"pushover": [
check_env_var("PUSHOVER_APP_TOKEN"),
check_env_var("PUSHOVER_USER_TOKEN"),
check_command("curl"),
],
"stats": [
*check_stats_commands(),
],
"stats-collector": [
check_command("python3"),
*check_stats_collector_config(),
],
"syncwall": [
check_command("wget"),
check_command("wal"),
],
"vc": [
check_command("ffmpeg"),
check_command("yt-dlp"),
],
"vcmp": [
check_command("ffmpeg"),
check_command("ffprobe"),
],
}
return checks
def main():
results = check_scripts()
print("Script Status Check")
print("==================")
for script, checks in results.items():
all_passed = all(result[0] for result in checks) if checks else True
status = CHECK if all_passed else CROSS
print(f"\n{status} {script}")
if not checks:
print(" No specific requirements")
else:
for passed, message in checks:
status = CHECK if passed else CROSS
if not passed:
print(f" {status} {message}")
if __name__ == "__main__":
main()