Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

81 lines
2.3 KiB

#!/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__).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)