Ejemplo n.º 1
0
Archivo: macro.py Proyecto: csimag/rose
def parse_macro_mode_args(mode="macro", argv=None):
    """Parse options/arguments for rose macro and upgrade."""
    opt_parser = RoseOptionParser()
    options = ["conf_dir", "meta_path", "non_interactive", "output_dir"]
    if mode == "macro":
        options.extend(["fix", "validate_all"])
    elif mode == "upgrade":
        options.extend(["downgrade", "all_versions"])
    else:
        raise KeyError("Wrong mode: {0}".format(mode))
    opt_parser.add_my_options(*options)
    if argv is None:
        opts, args = opt_parser.parse_args()
    else:
        opts, args = opt_parser.parse_args(argv)
    opts, args = opt_parser.parse_args(argv)
    if mode == "upgrade" and len(args) > 1:
        sys.stderr.write(opt_parser.get_usage())
        return None
    if opts.conf_dir is None:
        opts.conf_dir = os.getcwd()
    opts.conf_dir = os.path.abspath(opts.conf_dir)
    if opts.output_dir is not None:
        opts.output_dir = os.path.abspath(opts.output_dir)
    sys.path.append(os.getenv("ROSE_HOME"))
    add_opt_meta_paths(opts.meta_path)
    config_name = os.path.basename(opts.conf_dir)
    config_file_path = os.path.join(opts.conf_dir,
                                    rose.SUB_CONFIG_NAME)
    if (not os.path.exists(config_file_path) or
        not os.path.isfile(config_file_path)):
        rose.reporter.Reporter()(ERROR_LOAD_CONFIG_DIR.format(opts.conf_dir),
                                 kind=rose.reporter.Reporter.KIND_ERR,
                                 level=rose.reporter.Reporter.FAIL)
        return None
    # Load the configuration and the metadata macros.
    config_loader = rose.config.ConfigLoader()
    app_config = config_loader(config_file_path)
    standard_format_config(app_config)

    # Load meta config if it exists.
    meta_config = rose.config.ConfigNode()
    meta_path, warning = load_meta_path(app_config, opts.conf_dir)
    if meta_path is None:
        if mode == "macro":
            text = ERROR_LOAD_METADATA.format("")
            if warning:
                text = warning
            rose.reporter.Reporter()(text,
                                     kind=rose.reporter.Reporter.KIND_ERR,
                                     level=rose.reporter.Reporter.FAIL)
            return None
    else:
        meta_config = load_meta_config(app_config,
                                       directory=opts.conf_dir,
                                       config_type=rose.SUB_CONFIG_NAME,
                                       ignore_meta_error=True)
    return app_config, meta_config, config_name, args, opts
Ejemplo n.º 2
0
def parse_macro_mode_args(mode="macro", argv=None):
    """Parse options/arguments for rose macro and upgrade."""
    opt_parser = RoseOptionParser()
    options = ["conf_dir", "meta_path", "non_interactive", "output_dir"]
    if mode == "macro":
        options.extend(["fix", "validate_all"])
    elif mode == "upgrade":
        options.extend(["downgrade", "all_versions"])
    else:
        raise KeyError("Wrong mode: {0}".format(mode))
    opt_parser.add_my_options(*options)
    if argv is None:
        opts, args = opt_parser.parse_args()
    else:
        opts, args = opt_parser.parse_args(argv)
    opts, args = opt_parser.parse_args(argv)
    if mode == "upgrade" and len(args) > 1:
        sys.stderr.write(opt_parser.get_usage())
        return None
    if opts.conf_dir is None:
        opts.conf_dir = os.getcwd()
    opts.conf_dir = os.path.abspath(opts.conf_dir)
    if opts.output_dir is not None:
        opts.output_dir = os.path.abspath(opts.output_dir)
    sys.path.append(os.getenv("ROSE_HOME"))
    add_opt_meta_paths(opts.meta_path)
    config_name = os.path.basename(opts.conf_dir)
    config_file_path = os.path.join(opts.conf_dir, rose.SUB_CONFIG_NAME)
    if (not os.path.exists(config_file_path)
            or not os.path.isfile(config_file_path)):
        rose.reporter.Reporter()(ERROR_LOAD_CONFIG_DIR.format(opts.conf_dir),
                                 kind=rose.reporter.Reporter.KIND_ERR,
                                 level=rose.reporter.Reporter.FAIL)
        return None
    # Load the configuration and the metadata macros.
    config_loader = rose.config.ConfigLoader()
    app_config = config_loader(config_file_path)
    standard_format_config(app_config)

    # Load meta config if it exists.
    meta_config = rose.config.ConfigNode()
    meta_path, warning = load_meta_path(app_config, opts.conf_dir)
    if meta_path is None:
        if mode == "macro":
            text = ERROR_LOAD_METADATA.format("")
            if warning:
                text = warning
            rose.reporter.Reporter()(text,
                                     kind=rose.reporter.Reporter.KIND_ERR,
                                     level=rose.reporter.Reporter.FAIL)
            return None
    else:
        meta_config = load_meta_config(app_config,
                                       directory=opts.conf_dir,
                                       config_type=rose.SUB_CONFIG_NAME,
                                       ignore_meta_error=True)
    return app_config, meta_config, config_name, args, opts
Ejemplo n.º 3
0
def main():
    opt_parser = RoseOptionParser()
    opt_parser.add_my_options("auto_type", "conf_dir", "output_dir")
    opts, args = opt_parser.parse_args()

    if opts.conf_dir is None:
        opts.conf_dir = os.getcwd()
    opts.conf_dir = os.path.abspath(opts.conf_dir)
    prop_val_map = {}
    for arg in args:
        if "=" in arg:
            key, val = arg.split("=", 1)
            prop_val_map.update({key: val})
        else:
            prop_val_map.update({arg: ""})
    for filename in [rose.SUB_CONFIG_NAME, rose.TOP_CONFIG_NAME]:
        path = os.path.join(opts.conf_dir, filename)
        if os.path.isfile(path):
            break
    else:
        sys.exit(opt_parser.get_usage())
    source_config = rose.config.load(path)
    meta_path = os.path.join(opts.conf_dir, rose.CONFIG_META_DIR, rose.META_CONFIG_NAME)
    if os.path.isfile(meta_path):
        metadata_config = rose.config.load(meta_path)
    else:
        metadata_config = rose.config.ConfigNode()
    metadata_config = metadata_gen(source_config, metadata_config, auto_type=opts.type, prop_map=prop_val_map)
    if opts.output_dir is None:
        dest = os.path.dirname(meta_path)
    else:
        dest = opts.output_dir
    if not os.path.isdir(dest):
        os.mkdir(dest)
    dest_file = os.path.join(dest, rose.META_CONFIG_NAME)
    rose.config.dump(metadata_config, dest_file)
Ejemplo n.º 4
0
Archivo: macro.py Proyecto: kaday/rose
def parse_macro_mode_args(mode="macro", argv=None):
    """Parse options/arguments for rose macro and upgrade."""
    opt_parser = RoseOptionParser()
    options = ["conf_dir", "meta_path", "non_interactive", "output_dir"]
    if mode == "macro":
        options.extend(["fix", "validate_all"])
    elif mode == "upgrade":
        options.extend(["downgrade", "all_versions"])
    else:
        raise KeyError("Wrong mode: {0}".format(mode))
    opt_parser.add_my_options(*options)
    if argv is None:
        opts, args = opt_parser.parse_args()
    else:
        opts, args = opt_parser.parse_args(argv)
    if mode == "upgrade" and len(args) > 1:
        sys.stderr.write(opt_parser.get_usage())
        return None
    if mode == "macro" and opts.validate_all and opts.output_dir:
        sys.stderr.write(opt_parser.get_usage())
        return None
    if opts.conf_dir is None:
        opts.conf_dir = os.getcwd()
    opts.conf_dir = os.path.abspath(opts.conf_dir)
    if opts.output_dir is not None:
        opts.output_dir = os.path.abspath(opts.output_dir)
    sys.path.append(os.getenv("ROSE_HOME"))
    add_opt_meta_paths(opts.meta_path)
    config_name = os.path.basename(opts.conf_dir)
    config_file_path = os.path.join(opts.conf_dir,
                                    rose.SUB_CONFIG_NAME)
    if (not os.path.exists(config_file_path) or
            not os.path.isfile(config_file_path)):
        rose.reporter.Reporter()(ERROR_LOAD_CONFIG_DIR.format(opts.conf_dir),
                                 kind=rose.reporter.Reporter.KIND_ERR,
                                 level=rose.reporter.Reporter.FAIL)
        return None

    optional_keys = []
    optional_dir = os.path.join(opts.conf_dir, rose.config.OPT_CONFIG_DIR)
    optional_glob = os.path.join(optional_dir, rose.GLOB_OPT_CONFIG_FILE)
    for path in glob.glob(optional_glob):
        filename = os.path.basename(path)
        # filename is a null string if path is to a directory.
        result = re.match(rose.RE_OPT_CONFIG_FILE, filename)
        if not result:
            continue
        optional_keys.append(result.group(1))

    # Load the configuration and the metadata macros.
    config_loader = rose.config.ConfigLoader()
    app_config, config_map = config_loader.load_with_opts(
        config_file_path, more_keys=optional_keys,
        return_config_map=True)
    standard_format_config(app_config)
    for conf_key, config in config_map.items():
        standard_format_config(config)

    # Load meta config if it exists.
    meta_config = rose.config.ConfigNode()
    meta_path, warning = load_meta_path(app_config, opts.conf_dir)
    if meta_path is None:
        if mode == "macro":
            text = ERROR_LOAD_METADATA.format("")
            if warning:
                text = warning
            rose.reporter.Reporter()(text,
                                     kind=rose.reporter.Reporter.KIND_ERR,
                                     level=rose.reporter.Reporter.FAIL)
            return None
    else:
        meta_config = load_meta_config(app_config,
                                       directory=opts.conf_dir,
                                       config_type=rose.SUB_CONFIG_NAME,
                                       ignore_meta_error=True)
    return app_config, config_map, meta_config, config_name, args, opts