def main(): global options (options, args) = GeneratorArguments(option_class=ExtendAction).parse_args(sys.argv[1:]) if args: options.jobs = args[0].split(',') else: options.jobs = [] # Initialize console if options.verbose: level = "debug" elif options.quiet: level = "warning" else: level = "info" console = Log(options.logfile, level) Context.console = console # Treat verbosity of pre-job processing if options.config_verbose: console.setLevel("debug") console.setFilter(["generator.config.*"]) else: console.setLevel("info") # Show progress indicator? console.progress_indication = options.show_progress_indicator # Initial user feedback appname = ((os.path.dirname(os.path.abspath(options.config)).split(os.sep)))[-1] console.head(u"Initializing: %s" % appname.decode('utf-8'), True) console.info(u"Processing configuration") console.debug(u" file: %s" % options.config) # Load application configuration config = Config(console, options.config, **options.letmacros) # Load user configuration (preferences) config = getUserConfig(config) # Insert remaining command line args config = getAdditonalArgs(config, args[1:]) # Early check for log filter -- doesn't work as there is no job selected yet #console.setFilter(config.get("log/filter/debug", [])) # Resolve "include"-Keys console.debug("Resolving config includes...") console.indent() config.resolveIncludes() console.outdent() # Check jobs availableJobs = config.getExportedJobsList() if len(options.jobs) == 0: default_job = config.get("default-job", "") if default_job: options.jobs.append(default_job) else: if not options.daemon: listJobs(console, availableJobs, config) sys.exit(1) else: for job in options.jobs: if job not in availableJobs: console.warn("No such job: %s" % job) listJobs(console, availableJobs, config) sys.exit(1) console.debug(u"Jobs: %s" % ", ".join(options.jobs)) context = {'config': config, 'console':console, 'jobconf':None, 'interruptRegistry':interruptRegistry} Context.config = config # TODO: clean up overlap between context dict and Context module # CLI mode if not options.daemon: # Resolve "extend"- and "run"-Keys expandedjobs = config.resolveExtendsAndRuns(options.jobs[:]) # Include system defaults config.includeSystemDefaults(expandedjobs) # Resolve "let"-Keys config.resolveMacros(expandedjobs) # Resolve libs/Manifests config.resolveLibs(expandedjobs) # To see fully expanded config: #console.info(pprint.pformat(config.get("."))) # Do some config schema checking config.checkSchema(expandedjobs, checkJobTypes=True) # Clean-up config config.cleanUpJobs(expandedjobs) # Reset console level console.setLevel(level) console.resetFilter() # Processing jobs... for job in expandedjobs: console.head("Executing: %s" % job.name, True) if options.config_verbose: console.setLevel("debug") console.debug("Expanded job config:") console.debug(pprint.pformat(config.getJob(job).getData())) console.setLevel(level) ctx = context.copy() ctx['jobconf'] = config.getJob(job) Context.jobconf = ctx['jobconf'] generatorObj = Generator(ctx) generatorObj.run() # Daemon mode else: from generator.runtime.Generatord import Generatord console.head("Executing: Daemon Mode", True) generatord = Generatord(context) console.info("Opening port %s on %s, serving in background..." % (generatord.servAddr[1], generatord.servAddr[0] if generatord.servAddr[0] else 'localhost') ) generatord.serve()
def main(): global options (options, args) = GeneratorArguments(option_class=ExtendAction).parse_args( sys.argv[1:]) if args: options.jobs = args[0].split(',') else: options.jobs = [] # Initialize console if options.verbose: level = "debug" elif options.quiet: level = "warning" else: level = "info" console = Log(options.logfile, level) Context.console = console # Treat verbosity of pre-job processing if options.config_verbose: console.setLevel("debug") console.setFilter(["generator.config.*"]) else: console.setLevel("info") # Initial user feedback appname = ((os.path.dirname(os.path.abspath(options.config)).split( os.sep)))[-1] console.head(u"Initializing: %s" % appname.decode('utf-8'), True) console.info(u"Processing configuration") console.debug(u" file: %s" % options.config) # Load application configuration config = Config(console, options.config, **options.letmacros) # Load user configuration (preferences) config = getUserConfig(config) # Insert remaining command line args config = getAdditonalArgs(config, args[1:]) # Early check for log filter -- doesn't work as there is no job selected yet #console.setFilter(config.get("log/filter/debug", [])) # Resolve "include"-Keys console.debug("Resolving config includes...") console.indent() config.resolveIncludes() console.outdent() # Check jobs availableJobs = config.getExportedJobsList() if len(options.jobs) == 0: default_job = config.get("default-job", "") if default_job: options.jobs.append(default_job) else: if not options.daemon: listJobs(console, availableJobs, config) sys.exit(1) else: for job in options.jobs: if job not in availableJobs: console.warn("No such job: %s" % job) listJobs(console, availableJobs, config) sys.exit(1) console.debug(u"Jobs: %s" % ", ".join(options.jobs)) context = { 'config': config, 'console': console, 'jobconf': None, 'interruptRegistry': interruptRegistry } Context.config = config # TODO: clean up overlap between context dict and Context module # CLI mode if not options.daemon: # Resolve "extend"- and "run"-Keys expandedjobs = config.resolveExtendsAndRuns(options.jobs[:]) # Include system defaults config.includeSystemDefaults(expandedjobs) # Resolve "let"-Keys config.resolveMacros(expandedjobs) # Resolve libs/Manifests config.resolveLibs(expandedjobs) # To see fully expanded config: #console.info(pprint.pformat(config.get("."))) # Do some config schema checking config.checkSchema(expandedjobs, checkJobTypes=True) # Clean-up config config.cleanUpJobs(expandedjobs) # Reset console level console.setLevel(level) console.resetFilter() # Processing jobs... for job in expandedjobs: console.head("Executing: %s" % job.name, True) if options.config_verbose: console.setLevel("debug") console.debug("Expanded job config:") console.debug(pprint.pformat(config.getJob(job).getData())) console.setLevel(level) ctx = context.copy() ctx['jobconf'] = config.getJob(job) Context.jobconf = ctx['jobconf'] generatorObj = Generator(ctx) generatorObj.run() # Daemon mode else: from generator.runtime.Generatord import Generatord console.head("Executing: Daemon Mode", True) generatord = Generatord(context) console.info("Opening port %s on %s, serving in background..." % (generatord.servAddr[1], generatord.servAddr[0] if generatord.servAddr[0] else 'localhost')) generatord.serve()
def main(): global options parser = optparse.OptionParser(option_class=ExtendAction) usage_str = '''%prog [options] job,... Arguments: job,... a list of jobs (like 'source' or 'copy-files', without the quotes) to run x use 'x' (or some undefined job name) to get a list of all available jobs from the configuration file''' parser.set_usage(usage_str) # Common options parser.add_option("-c", "--config", dest="config", metavar="CFGFILE", default="config.json", help="path to configuration file containing job definitions (default: %default)") parser.add_option("-q", "--quiet", action="store_true", dest="quiet", default=False, help="quiet output mode (extra quiet)") parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="verbose output mode of job processing") parser.add_option("-w", "--config-verbose", action="store_true", dest="config_verbose", default=False, help="verbose output mode of configuration processing") parser.add_option("-l", "--logfile", dest="logfile", metavar="FILENAME", default=None, type="string", help="log file") parser.add_option("-s", "--stacktrace", action="store_true", dest="stacktrace", default=False, help="enable stack traces on fatal exceptions") parser.add_option("-m", "--macro", dest="letmacros", metavar="KEY:VAL", action="map", type="string", default={}, help="define/overwrite a global 'let' macro KEY with value VAL") parser.add_option("-d", "--daemon", dest="daemon", action="store_true", default=False, help="(EXPERIMENTAL - DON'T USE) puts the generator in daemon mode") # Dynamic options (currently not supported) #parser.add_option("--setting", action="extend", dest="settings", metavar="KEY:VALUE", type="string", default=[], help="Used settings") #parser.add_option("--variant", action="extend", dest="variants", metavar="KEY:VALUE", type="string", default=[], help="Selected variants") #parser.add_option("--require", action="extend", dest="require", metavar="CLASS1:CLASS2", type="string", default=[], help="Special loadtime class dependencies") #parser.add_option("--use", action="extend", dest="use", metavar="CLASS1:CLASS2", type="string", default=[], help="Special runtime class dependencies") (options, args) = parser.parse_args(sys.argv[1:]) if args: options.jobs = args[0].split(',') else: options.jobs = [] # Initialize console if options.verbose: level = "debug" elif options.quiet: level = "warning" else: level = "info" console = Log(options.logfile, level) Context.console = console # Treat verbosity of pre-job processing if options.config_verbose: console.setLevel("debug") console.setFilter(["generator.config.*"]) else: console.setLevel("info") # Initial user feedback appname = ((os.path.dirname(os.path.abspath(options.config)).split(os.sep)))[-1] console.head(u"Initializing: %s" % appname.decode('utf-8'), True) console.info(u"Processing configuration") console.debug(u" file: %s" % options.config) # Load application configuration config = Config(console, options.config, **options.letmacros) # Load user configuration (preferences) config = getUserConfig(config) # Insert remaining command line args config = getAdditonalArgs(config, args[1:]) # Early check for log filter -- doesn't work as there is no job selected yet #console.setFilter(config.get("log/filter/debug", [])) # Resolve "include"-Keys console.debug("Resolving config includes...") console.indent() config.resolveIncludes() console.outdent() # Check jobs availableJobs = config.getExportedJobsList() if len(options.jobs) == 0: default_job = config.get("default-job", "") if default_job: options.jobs.append(default_job) else: if not options.daemon: listJobs(console, availableJobs, config) sys.exit(1) else: for job in options.jobs: if job not in availableJobs: console.warn("No such job: %s" % job) listJobs(console, availableJobs, config) sys.exit(1) console.debug(u"Jobs: %s" % ", ".join(options.jobs)) context = {'config': config, 'console':console, 'jobconf':None, 'interruptRegistry':interruptRegistry} # CLI mode if not options.daemon: # Resolve "extend"- and "run"-Keys expandedjobs = config.resolveExtendsAndRuns(options.jobs[:]) # Include system defaults config.includeSystemDefaults(expandedjobs) # Resolve "let"-Keys config.resolveMacros(expandedjobs) # Resolve libs/Manifests config.resolveLibs(expandedjobs) # To see fully expanded config: #console.info(pprint.pformat(config.get("."))) # Do some config schema checking config.checkSchema(expandedjobs, checkJobTypes=True) # Clean-up config config.cleanUpJobs(expandedjobs) # Reset console level console.setLevel(level) console.resetFilter() # Processing jobs... for job in expandedjobs: console.head("Executing: %s" % job.name, True) if options.config_verbose: console.setLevel("debug") console.debug("Expanded job config:") console.debug(pprint.pformat(config.getJob(job).getData())) console.setLevel(level) ctx = context.copy() ctx['jobconf'] = config.getJob(job) generatorObj = Generator(ctx) generatorObj.run() # Daemon mode else: from generator.runtime.Generatord import Generatord console.head("Executing: Daemon Mode", True) generatord = Generatord(context) console.info("Opening port %s on %s, serving in background..." % (generatord.servAddr[1], generatord.servAddr[0] if generatord.servAddr[0] else 'localhost') ) generatord.serve()