- 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
113 lines
3.2 KiB
Python
Executable File
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)
|