# coding=utf-8 import os from string import Template import xml.etree.ElementTree as ET import argparse parser = argparse.ArgumentParser(description='Reads an *.inx file and generates initialization code for argparse') parser.add_argument('input') args = parser.parse_args() if os.path.isabs(args.input): inpath = args.input else: folder = os.path.dirname(os.path.realpath(__file__)) inpath = os.path.normpath(os.path.join(folder, args.input)) templateWithType = Template('self.arg_parser.add_argument("--$param", type=$type, dest="$param", default=$default)') templateWithoutType = Template('self.arg_parser.add_argument("--$param", dest="$param", default=$default)') def handle_param_node(node): if node.attrib["type"] == 'float': cmd = templateWithType.substitute( param=node.attrib["name"], type='float', default=node.text) print(cmd) elif node.attrib["type"] == 'int': cmd = templateWithType.substitute( param=node.attrib["name"], type='int', default=node.text) print(cmd) elif node.attrib["type"] == 'boolean': cmd = templateWithType.substitute( param=node.attrib["name"], type='inkex.inkbool', default='"' + node.text + '"') print(cmd) elif node.attrib["type"] == 'enum': cmd = templateWithoutType.substitute( param=node.attrib["name"], default='"' + node[0].text + '"') print(cmd) elif node.attrib["type"] == 'notebook': cmd = templateWithoutType.substitute( param=node.attrib["name"], default='"' + node[0].attrib["name"] + '"') print(cmd) else: # TODO: Implement other types of args raise NotImplementedError def process_node(node): for child in node: if child.tag.endswith('param'): handle_param_node(child) process_node(child) tree = ET.parse(inpath) root = tree.getroot() process_node(root)