Files
cariflex/tools/EVerest-main/cmake/trailbook-ext-everest/process_api_template.py
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

113 lines
3.2 KiB
Python
Executable File

import argparse
import jinja2
from pathlib import Path
def rst_indent(input):
lines = input.splitlines()
lines = [f"| {line}\r\n" for line in lines]
return "".join(lines)
def make_rst_ref(input):
output = input.replace("/", "")
output = output.replace("#", "-")
return output
def main():
parser = argparse.ArgumentParser(description="Generate RST index from file list")
parser.add_argument(
'--template-dir',
type=Path,
dest='template_dir',
action='store',
required=True,
help='Directory containing the Jinja2 template files'
)
parser.add_argument(
'--template-file',
type=Path,
dest='template_file',
action='store',
required=True,
help='Jinja2 template file to process'
)
parser.add_argument(
'--apis',
type=str,
dest='apis',
action='store',
required=True,
help='Comma separated list of api names'
)
parser.add_argument(
'--target-file',
type=Path,
dest='target_file',
action='store',
required=True,
help='Output file for the processed template'
)
args = parser.parse_args()
if not args.template_dir.is_absolute():
raise ValueError("Template directory path must be absolute")
if not args.template_dir.exists():
raise ValueError("Template directory does not exist")
if not args.template_dir.is_dir():
raise ValueError("Template directory path is not a directory")
if not args.template_file.is_absolute():
raise ValueError("Template file path must be absolute")
if not args.template_file.exists():
raise ValueError("Template file does not exist")
if not args.template_file.is_file():
raise ValueError("Template file path is not a file")
if not args.template_file.is_relative_to(args.template_dir):
raise ValueError("Template file path is not relative to template directory")
if not args.target_file.is_absolute():
raise ValueError("Target file path must be absolute")
if args.target_file.suffix != '.rst':
raise ValueError("Target file must have a .rst extension")
if not args.target_file.parent.exists():
args.target_file.parent.mkdir(parents=True, exist_ok=True)
# Split comma-separated string back into a list
api_list = args.apis.split(',')
# turn list into dict
apis = []
for api_name in api_list:
if not api_name:
continue # Skip empty strings
apis.append({"name": api_name, "path": api_name})
env = jinja2.Environment(
loader=jinja2.FileSystemLoader(args.template_dir),
trim_blocks=True,
lstrip_blocks=True
)
env.filters['rst_indent'] = rst_indent
env.filters['make_rst_ref'] = make_rst_ref
template_file_name = args.template_file.relative_to(args.template_dir)
template = env.get_template(str(template_file_name))
output = template.render(
apis=apis
)
args.target_file.write_text(output)
if __name__ == "__main__":
try:
main()
except Exception as e:
print(f"Error: {e}")
exit(1)