blob: cf6286bb42f4c5661e087c6a9af259bd5817d83b [file] [log] [blame]
#!/usr/bin/env python3.8
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
import argparse
import os
import string
import sys
# Root dir is 5 levels up from here.
FUCHSIA_DIR = os.path.abspath(
os.path.join(
__file__, os.pardir, os.pardir, os.pardir, os.pardir, os.pardir))
sys.path += [os.path.join(FUCHSIA_DIR, 'third_party')]
from jinja2 import Environment, FileSystemLoader
def to_camel_case(snake_str):
components = snake_str.split('_')
return ''.join(x.title() for x in components[0:])
def wrap_deps(dep):
return {'enum': to_camel_case(dep), 'lib': dep}
def main(args_list=None):
parser = argparse.ArgumentParser(description='Generate FFX Plugin matcher')
parser.add_argument(
'--out', help='The output file to generate', required=True)
parser.add_argument(
'--deps',
help='Comma-seperated libraries to generate code from',
required=False)
parser.add_argument('--args', help='args lib', required=True)
parser.add_argument('--sub_command', help='sub command lib', required=False)
parser.add_argument(
'--includes_execution', help='includes execution code', default=False)
parser.add_argument(
'--includes_subcommands', help='includes subcommands', default=False)
parser.add_argument(
'--execution_lib', help='name of execution lib', required=True)
if args_list:
args = parser.parse_args(args_list)
else:
args = parser.parse_args()
template_path = os.path.join(os.path.dirname(__file__), 'templates')
env = Environment(
loader=FileSystemLoader(template_path),
trim_blocks=True,
lstrip_blocks=True)
template = env.get_template('plugins.md')
if args.deps:
libraries = args.deps.split(',')
plugins = map(wrap_deps, libraries)
else:
libraries = ""
plugins = []
with open(args.out, 'w') as file:
file.write(
template.render(
plugins=plugins,
suite_subcommand_lib=args.sub_command,
suite_args_lib=args.args,
includes_subcommands=args.includes_subcommands,
includes_execution=args.includes_execution,
execution_lib=args.execution_lib))
if __name__ == '__main__':
sys.exit(main())