712db9c597
Add B1 directory-type seed mechanism to AGENT_WORKSPACE_SEED_FILES: - Extended agentWorkspaceFilesForRun with collectDirectorySeedFiles helper - arm2d-skill (SKILL.md + references/ + python/) auto-injected to .agents/skills/arm2d-skill/ - Enables Code Agent to follow ARM-2D constraints and call asset scripts in case Skill source: https://github.com/notLabyet/HWLabOA
111 lines
4.1 KiB
Python
111 lines
4.1 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# *************************************************************************************************
|
|
# Arm 2D project
|
|
# @file jinja2c.py
|
|
# @brief Jinja Launcher for arm-2d code templates
|
|
#
|
|
# *************************************************************************************************
|
|
#
|
|
# * Copyright (C) 2010-2024 ARM Limited or its affiliates. All rights reserved.
|
|
# *
|
|
# * SPDX-License-Identifier: Apache-2.0
|
|
# *
|
|
# * Licensed under the Apache License, Version 2.0 (the License); you may
|
|
# * not use this file except in compliance with the License.
|
|
# * You may obtain a copy of the License at
|
|
# *
|
|
# * www.apache.org/licenses/LICENSE-2.0
|
|
# *
|
|
# * Unless required by applicable law or agreed to in writing, software
|
|
# * distributed under the License is distributed on an AS IS BASIS, WITHOUT
|
|
# * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# * See the License for the specific language governing permissions and
|
|
# * limitations under the License.
|
|
# */
|
|
|
|
import sys
|
|
import argparse
|
|
import json
|
|
import os
|
|
from jinja2 import Environment, FileSystemLoader
|
|
|
|
|
|
def main(argv):
|
|
|
|
# Parse the input
|
|
parser = argparse.ArgumentParser(description='Jinja Launcher for arm-2d code templates (v1.1.0)')
|
|
|
|
parser.add_argument("-i", "--input", type = str, help="Path of the input jinja2 template file", required=False)
|
|
parser.add_argument("-var", "--variable", type = str, help="an optional path of the JSON file containing jinja2 template variables", required=False)
|
|
parser.add_argument("-f", "--folder", type = str, help="an optional path for specify the working folder", required=False)
|
|
parser.add_argument("-out", "--output_folder", type = str, help="an optional path for oputput folder", required=False)
|
|
parser.add_argument("-o", "--output", type = str, help="an optional path of the output file, if you ignore this argument and the input template ends with '.jinja', this tool will remove it and use the rest part as the output file name.", required=False)
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.input == None or args.input == "" :
|
|
parser.print_help()
|
|
exit(1)
|
|
|
|
|
|
if args.folder == None or args.folder == "" :
|
|
args.folder = "../Library/jinja"
|
|
|
|
if not os.path.isdir(args.folder):
|
|
print(f"Error: The folder {args.folder} does not exist.")
|
|
sys.exit(1)
|
|
|
|
output_file = args.output
|
|
if output_file is None:
|
|
if args.input.endswith('.jinja'):
|
|
output_file = args.input[:-6] # remove ".jinja" extension
|
|
|
|
if args.output_folder == None or args.output_folder == "" :
|
|
if output_file.endswith('.c') :
|
|
args.output_folder = "../Source"
|
|
if output_file.endswith('.h') :
|
|
args.output_folder = "../Include"
|
|
|
|
output_file = os.path.join(args.folder, args.output_folder, output_file)
|
|
else:
|
|
output_file = None
|
|
|
|
if not os.path.isdir(os.path.join(args.folder, args.output_folder)):
|
|
print(f"Error: The folder {os.path.join(args.folder, args.output_folder)} does not exist.")
|
|
sys.exit(1)
|
|
|
|
|
|
#Template environment
|
|
env = Environment(loader=FileSystemLoader(args.folder))
|
|
|
|
# Load the template file
|
|
if args.input and not os.path.isfile(os.path.join(args.folder, args.input)):
|
|
print(f"Error: The template file {os.path.join(args.folder, args.input)} does not exist.")
|
|
sys.exit(1)
|
|
|
|
template = env.get_template(args.input)
|
|
|
|
# Load variables
|
|
|
|
variables = {}
|
|
if args.variable is not None:
|
|
if not os.path.isfile(os.path.join(args.folder, args.variable)):
|
|
print(f"Error: The jason file {os.path.join(args.folder, args.variable)} does not exist.")
|
|
sys.exit(1)
|
|
with open(os.path.join(args.folder, args.variable), 'r') as f:
|
|
variables = json.load(f)
|
|
|
|
# generate output
|
|
output = template.render(variables)
|
|
|
|
if output_file is not None:
|
|
with open(output_file, 'w') as f:
|
|
f.write(output)
|
|
else:
|
|
print(output)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main(sys.argv[1:]) |