From b4c5d77e4bd5ed4eab3b23ec8dfe97ae00687ed9 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Sun, 29 Mar 2026 17:07:27 +0200 Subject: [PATCH] refactor: deduplicate yaml import pattern via require_yaml() --- scripts/auto_fetch.py | 8 ++------ scripts/common.py | 11 +++++++++++ scripts/cross_reference.py | 10 +++------- scripts/diff_truth.py | 8 ++------ scripts/generate_pack.py | 8 ++------ scripts/generate_site.py | 10 +++------- scripts/generate_truth.py | 7 ++----- scripts/verify.py | 10 +++------- 8 files changed, 28 insertions(+), 44 deletions(-) diff --git a/scripts/auto_fetch.py b/scripts/auto_fetch.py index 4edd5acf..1c6ee552 100644 --- a/scripts/auto_fetch.py +++ b/scripts/auto_fetch.py @@ -26,13 +26,9 @@ import urllib.error from pathlib import Path sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) -from common import list_registered_platforms, load_database, load_platform_config +from common import list_registered_platforms, load_database, load_platform_config, require_yaml -try: - import yaml -except ImportError: - print("Error: PyYAML required (pip install pyyaml)", file=sys.stderr) - sys.exit(1) +yaml = require_yaml() DEFAULT_DB = "database.json" DEFAULT_PLATFORMS_DIR = "platforms" diff --git a/scripts/common.py b/scripts/common.py index 52d1d6bc..219227ca 100644 --- a/scripts/common.py +++ b/scripts/common.py @@ -21,6 +21,17 @@ except ImportError: yaml = None +def require_yaml(): + """Import and return yaml, exiting if PyYAML is not installed.""" + try: + import yaml as _yaml + return _yaml + except ImportError: + import sys + print("Error: PyYAML required (pip install pyyaml)", file=sys.stderr) + sys.exit(1) + + def compute_hashes(filepath: str | Path) -> dict[str, str]: """Compute SHA1, MD5, SHA256, CRC32, Adler32 for a file.""" sha1 = hashlib.sha1() diff --git a/scripts/cross_reference.py b/scripts/cross_reference.py index 1fe8d871..092ec2c4 100644 --- a/scripts/cross_reference.py +++ b/scripts/cross_reference.py @@ -18,14 +18,10 @@ import os import sys from pathlib import Path -try: - import yaml -except ImportError: - print("Error: PyYAML required (pip install pyyaml)", file=sys.stderr) - sys.exit(1) - sys.path.insert(0, os.path.dirname(__file__)) -from common import list_registered_platforms, load_database, load_emulator_profiles, load_platform_config +from common import list_registered_platforms, load_database, load_emulator_profiles, load_platform_config, require_yaml + +yaml = require_yaml() DEFAULT_EMULATORS_DIR = "emulators" DEFAULT_PLATFORMS_DIR = "platforms" diff --git a/scripts/diff_truth.py b/scripts/diff_truth.py index ab01e05a..482069ed 100644 --- a/scripts/diff_truth.py +++ b/scripts/diff_truth.py @@ -16,14 +16,10 @@ import os import sys sys.path.insert(0, os.path.dirname(__file__)) -from common import list_registered_platforms, load_platform_config +from common import list_registered_platforms, load_platform_config, require_yaml from truth import diff_platform_truth -try: - import yaml -except ImportError: - print("Error: PyYAML required (pip install pyyaml)", file=sys.stderr) - sys.exit(1) +yaml = require_yaml() def _load_truth(truth_dir: str, platform: str) -> dict | None: diff --git a/scripts/generate_pack.py b/scripts/generate_pack.py index 2e77bd3e..b85045b8 100644 --- a/scripts/generate_pack.py +++ b/scripts/generate_pack.py @@ -32,18 +32,14 @@ from common import ( list_platform_system_ids, list_registered_platforms, filter_systems_by_target, list_system_ids, load_database, load_data_dir_registry, load_emulator_profiles, load_platform_config, - md5_composite, resolve_local_file, + md5_composite, require_yaml, resolve_local_file, ) from validation import ( _build_validation_index, check_file_validation, filter_files_by_mode, ) from deterministic_zip import rebuild_zip_deterministic -try: - import yaml -except ImportError: - print("Error: PyYAML required (pip install pyyaml)", file=sys.stderr) - sys.exit(1) +yaml = require_yaml() DEFAULT_PLATFORMS_DIR = "platforms" DEFAULT_DB_FILE = "database.json" diff --git a/scripts/generate_site.py b/scripts/generate_site.py index 2b6d6290..ae1e994a 100644 --- a/scripts/generate_site.py +++ b/scripts/generate_site.py @@ -19,14 +19,10 @@ import sys from datetime import datetime, timezone from pathlib import Path -try: - import yaml -except ImportError: - print("Error: PyYAML required (pip install pyyaml)", file=sys.stderr) - sys.exit(1) - sys.path.insert(0, os.path.dirname(__file__)) -from common import list_registered_platforms, load_database, load_emulator_profiles, load_platform_config +from common import list_registered_platforms, load_database, load_emulator_profiles, load_platform_config, require_yaml + +yaml = require_yaml() from generate_readme import compute_coverage from verify import verify_platform diff --git a/scripts/generate_truth.py b/scripts/generate_truth.py index 0d0fb9cc..3d788b06 100644 --- a/scripts/generate_truth.py +++ b/scripts/generate_truth.py @@ -19,14 +19,11 @@ from common import ( load_emulator_profiles, load_platform_config, load_target_config, + require_yaml, ) from truth import generate_platform_truth -try: - import yaml -except ImportError: - print("Error: PyYAML required (pip install pyyaml)", file=sys.stderr) - sys.exit(1) +yaml = require_yaml() DEFAULT_OUTPUT_DIR = "dist/truth" DEFAULT_PLATFORMS_DIR = "platforms" diff --git a/scripts/verify.py b/scripts/verify.py index ca936a55..f816f40a 100644 --- a/scripts/verify.py +++ b/scripts/verify.py @@ -28,20 +28,16 @@ import sys import zipfile from pathlib import Path -try: - import yaml -except ImportError: - print("Error: PyYAML required (pip install pyyaml)", file=sys.stderr) - sys.exit(1) - sys.path.insert(0, os.path.dirname(__file__)) from common import ( build_zip_contents_index, check_inside_zip, compute_hashes, filter_systems_by_target, group_identical_platforms, list_emulator_profiles, list_system_ids, load_data_dir_registry, load_emulator_profiles, - load_platform_config, md5sum, md5_composite, resolve_local_file, + load_platform_config, md5sum, md5_composite, require_yaml, resolve_local_file, resolve_platform_cores, ) + +yaml = require_yaml() from validation import ( _build_validation_index, _parse_validation, build_ground_truth, check_file_validation, filter_files_by_mode,