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
This commit is contained in:
112
tools/EVerest-main/cmake/trailbook-ext-everest/process_api_template.py
Executable file
112
tools/EVerest-main/cmake/trailbook-ext-everest/process_api_template.py
Executable file
@@ -0,0 +1,112 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user