File indexing completed on 2024-12-01 23:40:21
0001
0002
0003
0004 """
0005 File : Skeleton.py
0006 Author : Valentin Kuznetsov <vkuznet@gmail.com>
0007 Description:
0008 """
0009
0010
0011 import os
0012 import sys
0013 import pprint
0014 from optparse import OptionParser
0015
0016
0017 from FWCore.Skeletons.utils import code_generator, test_env, template_directory
0018
0019 if sys.version_info < (2, 6):
0020 raise Exception("This script requires python 2.6 or greater")
0021
0022 class SkeletonOptionParser:
0023 "Skeleton option parser"
0024 def __init__(self):
0025 cname = os.environ.get('MKTMPL_CMD', 'main.py')
0026 usage = "Usage: %s [options]\n" % cname
0027 self.parser = OptionParser(usage=usage)
0028 msg = "debug output"
0029 self.parser.add_option("--debug", action="store_true",
0030 default=False, dest="debug", help=msg)
0031 msg = "specify template, e.g. EDProducer"
0032 self.parser.add_option("--tmpl", action="store", type="string",
0033 default='', dest="tmpl", help=msg)
0034 msg = "specify package name, e.g. MyProducer"
0035 self.parser.add_option("--name", action="store", type="string",
0036 default="TestPkg", dest="pname", help=msg)
0037 msg = "specify author name"
0038 self.parser.add_option("--author", action="store", type="string",
0039 default="", dest="author", help=msg)
0040 msg = "specify file type to generate, "
0041 msg += "e.g. --ftype=header, default is all files"
0042 self.parser.add_option("--ftype", action="store", type="string",
0043 default="all", dest="ftype", help=msg)
0044 msg = "list examples tags which should be kept in "
0045 msg += "generate code, e.g. "
0046 msg += "--keep-etags='@example_trac,@example_hist'"
0047 self.parser.add_option("--keep-etags", action="store", type="string",
0048 default=None, dest="ketags", help=msg)
0049 msg = "list template tags"
0050 self.parser.add_option("--tags", action="store_true",
0051 default=False, dest="tags", help=msg)
0052 msg = "list template example tags"
0053 self.parser.add_option("--etags", action="store_true",
0054 default=False, dest="etags", help=msg)
0055 msg = "list supported templates"
0056 self.parser.add_option("--templates", action="store_true",
0057 default=False, dest="templates", help=msg)
0058 def get_opt(self):
0059 "Returns parse list of options"
0060 return self.parser.parse_args()
0061
0062 def parse_args(args):
0063 "Parse input arguments"
0064 output = {}
0065 for arg in args:
0066 key, val = arg.split('=')
0067 key = key.strip()
0068 val = val.strip()
0069 if val[0] == '[' and val[-1] == ']':
0070 val = eval(val, { "__builtins__": None }, {})
0071 output[key] = val
0072 return output
0073
0074 def generator():
0075 """
0076 Code generator function, parse user arguments and load appropriate
0077 template module. Once loaded, run its data method depending on
0078 user requested input parameter, e.g. print_etags, print_tags or
0079 generate template code.
0080 """
0081 optmgr = SkeletonOptionParser()
0082 opts, args = optmgr.get_opt()
0083 test_env(os.path.join(opts.tdir, opts.tmpl), opts.tmpl)
0084 config = {'pname': opts.pname, 'tmpl': opts.tmpl, 'author': opts.author,
0085 'args': parse_args(args), 'debug': opts.debug,
0086 'ftype': opts.ftype}
0087 if opts.ketags:
0088 etags = opts.ketags.split(',')
0089 config.update({'tmpl_etags': etags})
0090 else:
0091 config.update({'tmpl_etags': []})
0092 obj = code_generator(config)
0093 if opts.etags:
0094 obj.print_etags()
0095 sys.exit(0)
0096 elif opts.tags:
0097 obj.print_tags()
0098 sys.exit(0)
0099 elif opts.templates:
0100 for name in os.listdir(template_directory()):
0101 print(name)
0102 sys.exit(0)
0103 obj.generate()
0104
0105 if __name__ == '__main__':
0106 generator()