scripts: Add bindings style migration script
This script replaces all underscore(_) separation in a binding with hyphens(-). Signed-off-by: James Roy <rruuaanng@outlook.com>
This commit is contained in:
parent
3c2dffa601
commit
9cf9416dec
1 changed files with 81 additions and 0 deletions
81
scripts/utils/migrate_bindings_style.py
Normal file
81
scripts/utils/migrate_bindings_style.py
Normal file
|
@ -0,0 +1,81 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright (c) 2025 James Roy <rruuaanng@outlook.com>
|
||||
# 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__).parent / '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)
|
Loading…
Add table
Add a link
Reference in a new issue