Ejemplo n.º 1
0
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 = []

    # Save cli options to Context
    gen_opts = [x for x in sys.argv[1:]
                if x not in args]  # cli options without jobs list
    Context.generator_opts = gen_opts  # as list

    # Initialize console
    if options.verbose:
        level = "debug"
    elif options.quiet:
        level = "warning"
    else:
        level = "info"

    console = Log(options.logfile, level)
    Context.console = console

    # Grunt compat: Print list of jobs as json
    if options.listjobs:
        config = initConfig(console, options, args)
        config.resolveIncludes()
        from misc import json
        print(
            json.dumpsPretty(getJobsDesc(config.getExportedJobsList(),
                                         config)))
        sys.exit(0)

    # 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)

    config = initConfig(console, options, args)

    # 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:
            listJobs(console, availableJobs, config)
            sys.exit(1)

    elif '_all_' in options.jobs:
        options.jobs = []
        for job in availableJobs:
            if job not in _ALL_SKIP_JOBS:
                options.jobs.append(job)
    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

    # 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()

    return
Ejemplo n.º 2
0
def main():
    parser = optparse.OptionParser()

    parser.set_usage('''\
%prog --name APPLICATIONNAME [--out DIRECTORY]
                             [--namespace NAMESPACE] [--type TYPE]
                             [-logfile LOGFILE] [--skeleton-path PATH]

Script to create a new qooxdoo application.

Example: For creating a regular GUI application \'myapp\' you could execute:
  %prog --name myapp''')

    parser.add_option(
        "-n",
        "--name",
        dest="name",
        metavar="APPLICATIONNAME",
        help=
        "Name of the application. An application folder with identical name will be created. (Required)"
    )
    parser.add_option(
        "-o",
        "--out",
        dest="out",
        metavar="DIRECTORY",
        default=".",
        help="Output directory for the application folder. (Default: %default)"
    )
    parser.add_option(
        "-s",
        "--namespace",
        dest="namespace",
        metavar="NAMESPACE",
        default=None,
        help="Applications's top-level namespace. (Default: APPLICATIONNAME)")
    parser.add_option(
        "-t",
        "--type",
        dest="type",
        metavar="TYPE",
        default="gui",
        help="Type of the application to create, one of: " + str(APP_TYPES) +
        "." + "'gui' builds a standard qooxdoo GUI application, " +
        "'with-contrib' builds a standard qooxdoo GUI application that " +
        "also uses a qooxdoo-contrib library, " + "'migration' should " +
        "be used to migrate qooxdoo 0.7 applications and " +
        "'bom' can be used " +
        "to build low-level qooxdoo applications. (Default: %default)")

    parser.add_option("-l",
                      "--logfile",
                      dest="logfile",
                      metavar="LOGFILE",
                      default=None,
                      type="string",
                      help="Log file")
    parser.add_option(
        "-p",
        "--skeleton-path",
        dest="skeleton_path",
        metavar="PATH",
        default=SKELETON_DIR,
        help="(Advanced) Path where the script looks for skeletons. " +
        "The directory must contain sub directories named by " +
        "the application types. (Default: %default)")

    (options, args) = parser.parse_args(sys.argv[1:])

    if not options.name:
        parser.print_help()
        sys.exit(1)

    if not options.namespace:
        options.namespace = options.name.lower().replace(" ", "_")

    # Initialize console
    global console
    console = Log(options.logfile, "info")

    createApplication(options.name, options.out, options.namespace,
                      options.type, options.skeleton_path)

    console.log("DONE")