def main(argv): got_input = False module_directory = None preprocessed_output = None dictionary = {} json_dict = {} got_output = False plugins = [] output_name = None got_preprocessed_input = False output_merged = None try: opts, args = getopt.getopt(argv, 'hM:m:d:o:p:t:P:w:') except getopt.GetoptError: out('Unknown option') showhelp() sys.exit(2) for opt, arg in opts: if opt == '-h': out('Displaying showhelp') showhelp() sys.exit() elif opt == '-o': if got_output: out('Got more than one output') showhelp() sys.exit(3) got_output = True output_name = arg elif opt == '-m': if module_directory is not None: out('Got more than one cache directory') showhelp() sys.exit(4) module_directory = arg elif opt == '-M': if output_merged is not None: out('Got more than one output merged path') showhelp() sys.exit(5) output_merged = arg elif opt == '-P': assert not got_preprocessed_input assert json_dict == {} sys.path.insert( 0, os.path.abspath( os.path.join(os.path.dirname(sys.argv[0]), 'plugins'))) with open(arg, 'r') as dict_file: dictionary = pickle.load(dict_file) got_preprocessed_input = True elif opt == '-d': assert not got_preprocessed_input with open(arg, 'r') as dict_file: bunch.merge_json(json_dict, yaml.load(dict_file.read())) elif opt == '-p': plugins.append(import_plugin(arg)) elif opt == '-w': preprocessed_output = arg if not got_preprocessed_input: for plugin in plugins: plugin.mako_plugin(json_dict) if output_merged: with open(output_merged, 'w') as yaml_file: yaml_file.write(yaml.dump(json_dict)) for k, v in json_dict.items(): dictionary[k] = bunch.to_bunch(v) if preprocessed_output: with open(preprocessed_output, 'w') as dict_file: pickle.dump(dictionary, dict_file) cleared_dir = False for arg in args: got_input = True with open(arg) as f: srcs = list(yaml.load_all(f.read())) for src in srcs: if isinstance(src, basestring): assert len(srcs) == 1 template = Template(src, filename=arg, module_directory=module_directory, lookup=TemplateLookup(directories=['.'])) with open(output_name, 'w') as output_file: template.render_context(Context(output_file, **dictionary)) else: # we have optional control data: this template represents # a directory if not cleared_dir: if not os.path.exists(output_name): pass elif os.path.isfile(output_name): os.unlink(output_name) else: shutil.rmtree(output_name, ignore_errors=True) cleared_dir = True items = [] if 'foreach' in src: for el in dictionary[src['foreach']]: if 'cond' in src: args = dict(dictionary) args['selected'] = el if not eval(src['cond'], {}, args): continue items.append(el) assert items else: items = [None] for item in items: args = dict(dictionary) args['selected'] = item item_output_name = os.path.join( output_name, Template(src['output_name']).render(**args)) if not os.path.exists(os.path.dirname(item_output_name)): os.makedirs(os.path.dirname(item_output_name)) template = Template( src['template'], filename=arg, module_directory=module_directory, lookup=TemplateLookup(directories=['.'])) with open(item_output_name, 'w') as output_file: template.render_context(Context(output_file, **args)) if not got_input and not preprocessed_output: out('Got nothing to do') showhelp()
def main(argv): got_input = False module_directory = None dictionary = {} json_dict = {} got_output = False output_file = sys.stdout plugins = [] try: opts, args = getopt.getopt(argv, 'hm:d:o:p:') except getopt.GetoptError: out('Unknown option') showhelp() sys.exit(2) for opt, arg in opts: if opt == '-h': out('Displaying showhelp') showhelp() sys.exit() elif opt == '-o': if got_output: out('Got more than one output') showhelp() sys.exit(3) got_output = True output_file = open(arg, 'w') elif opt == '-m': if module_directory is not None: out('Got more than one cache directory') showhelp() sys.exit(4) module_directory = arg elif opt == '-d': dict_file = open(arg, 'r') bunch.merge_json(json_dict, simplejson.loads(dict_file.read())) dict_file.close() elif opt == '-p': plugins.append(import_plugin(arg)) for plugin in plugins: plugin.mako_plugin(json_dict) for k, v in json_dict.items(): dictionary[k] = bunch.to_bunch(v) ctx = Context(output_file, **dictionary) for arg in args: got_input = True template = Template(filename=arg, module_directory=module_directory, lookup=TemplateLookup(directories=['.'])) template.render_context(ctx) if not got_input: out('Got nothing to do') showhelp() output_file.close()
def main(argv): got_input = False module_directory = None preprocessed_output = None dictionary = {} json_dict = {} got_output = False plugins = [] output_name = None got_preprocessed_input = False try: opts, args = getopt.getopt(argv, 'hm:d:o:p:t:P:w:') except getopt.GetoptError: out('Unknown option') showhelp() sys.exit(2) for opt, arg in opts: if opt == '-h': out('Displaying showhelp') showhelp() sys.exit() elif opt == '-o': if got_output: out('Got more than one output') showhelp() sys.exit(3) got_output = True output_name = arg elif opt == '-m': if module_directory is not None: out('Got more than one cache directory') showhelp() sys.exit(4) module_directory = arg elif opt == '-P': assert not got_preprocessed_input assert json_dict == {} sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), 'plugins'))) with open(arg, 'r') as dict_file: dictionary = pickle.load(dict_file) got_preprocessed_input = True elif opt == '-d': assert not got_preprocessed_input with open(arg, 'r') as dict_file: bunch.merge_json(json_dict, yaml.load(dict_file.read())) elif opt == '-p': plugins.append(import_plugin(arg)) elif opt == '-w': preprocessed_output = arg if not got_preprocessed_input: for plugin in plugins: plugin.mako_plugin(json_dict) for k, v in json_dict.items(): dictionary[k] = bunch.to_bunch(v) if preprocessed_output: with open(preprocessed_output, 'w') as dict_file: pickle.dump(dictionary, dict_file) cleared_dir = False for arg in args: got_input = True with open(arg) as f: srcs = list(yaml.load_all(f.read())) for src in srcs: if isinstance(src, basestring): assert len(srcs) == 1 template = Template(src, filename=arg, module_directory=module_directory, lookup=TemplateLookup(directories=['.'])) with open(output_name, 'w') as output_file: template.render_context(Context(output_file, **dictionary)) else: # we have optional control data: this template represents # a directory if not cleared_dir: if not os.path.exists(output_name): pass elif os.path.isfile(output_name): os.unlink(output_name) else: shutil.rmtree(output_name, ignore_errors=True) cleared_dir = True items = [] if 'foreach' in src: for el in dictionary[src['foreach']]: if 'cond' in src: args = dict(dictionary) args['selected'] = el if not eval(src['cond'], {}, args): continue items.append(el) assert items else: items = [None] for item in items: args = dict(dictionary) args['selected'] = item item_output_name = os.path.join( output_name, Template(src['output_name']).render(**args)) if not os.path.exists(os.path.dirname(item_output_name)): os.makedirs(os.path.dirname(item_output_name)) template = Template(src['template'], filename=arg, module_directory=module_directory, lookup=TemplateLookup(directories=['.'])) with open(item_output_name, 'w') as output_file: template.render_context(Context(output_file, **args)) if not got_input and not preprocessed_output: out('Got nothing to do') showhelp()