#!/usr/bin/env python3 # Copyright (c) 2025 James Roy # SPDX-License-Identifier: Apache-2.0 # This script is used to replace the properties containing # underscores in the binding. import argparse import os import sys from pathlib import Path import yaml # bindings base BINDINGS_PATH = [Path("dts/bindings/")] BINDINGS_PROPERTIES_AL = None with open(Path(__file__).parents[1] / 'bindings_properties_allowlist.yaml') as f: allowlist = yaml.safe_load(f.read()) if allowlist is not None: BINDINGS_PROPERTIES_AL = set(allowlist) else: BINDINGS_PROPERTIES_AL = set() def parse_cmd_args(): parse = argparse.ArgumentParser(allow_abbrev=False) parse.add_argument("--path", nargs="+", help="User binding path directory", type=Path) return parse.parse_args() def get_yaml_binding_paths() -> list: """Returns a list of 'dts/bindings/**/*.yaml'""" from glob import glob bindings = [] for path in BINDINGS_PATH: yamls = glob(f"{os.fspath(path)}/**/*.yaml", recursive=True) bindings.extend(yamls) return bindings def replace_bindings_underscores(binding_paths): """ Replace all property names containing underscores in the bindings. """ for binding_path in binding_paths: with open(binding_path, encoding="utf-8") as f: yaml_binding = yaml.safe_load(f) properties = yaml_binding.get("properties", {}) for prop_name in properties: if '_' in prop_name and prop_name not in BINDINGS_PROPERTIES_AL: _replace_underscores(binding_path, prop_name) def _replace_underscores(binding_path, prop_name): """Replace implementation""" with open(binding_path, "r+", encoding="utf-8") as f: lines = f.readlines() for i, rowline in enumerate(lines): line = rowline.split(":")[0].strip() if prop_name == line and "#" not in rowline: new_key = prop_name.replace("_", "-") if new_key != line: lines[i] = rowline.replace(line, new_key) f.seek(0) f.writelines(lines) if __name__ == '__main__': args = parse_cmd_args() if args.path is not None: BINDINGS_PATH.extend(args.path) bindings = get_yaml_binding_paths() replace_bindings_underscores(bindings) sys.exit(0)