示例#1
0
 def decode(self, value):
     from cea.plugin import instantiate_plugin
     plugin_fqnames = unique(parse_string_to_list(value))
     return [
         instantiate_plugin(plugin_fqname)
         for plugin_fqname in plugin_fqnames
     ]
示例#2
0
def main(args=None):
    """
    :param List[str] args: the arguments to use - when not running from the command line, for testing.
    :return:
    """
    if args is None:
        args = sys.argv[1:]  # drop the script name from the arguments

    config = cea.config.Configuration()

    # handle arguments
    if not len(args) or args[0].lower() == '--help':
        print_help()
        sys.exit(1)
    script_name = args.pop(0)
    if script_name == "write":
        for fqname, value in cea.config.parse_command_line_args(args).items():
            parameter = config.get_parameter(fqname)
            parameter.set(parameter.decode(
                parameter.replace_references(value)))
    elif script_name == "read":
        for fqname in args:
            parameter = config.get_parameter(fqname)
            print("- {fqname} = {parameter_value}".format(
                fqname=fqname, parameter_value=parameter.get()))
            print("  (default: {default})".format(default=parameter.default))
    elif script_name == "add-plugins":
        plugins_fqname = "general:plugins"
        parameter = config.get_parameter(plugins_fqname)
        plugins = cea.config.parse_string_to_list(
            parameter.encode(parameter.get()))

        new_plugins = [p for p in args
                       if p not in plugins]  # filter existing plugins
        valid_plugins = [
            p for p in new_plugins if instantiate_plugin(p) is not None
        ]

        if valid_plugins:
            print(f"Adding valid plugins {','.join(valid_plugins)}")
            plugins.extend(valid_plugins)
            parameter.set(plugins)
        else:
            print('No plugins to add')

    else:
        cea_script = cea.scripts.by_name(script_name, plugins=config.plugins)
        config.restrict_to(cea_script.parameters)
        config.apply_command_line_args(args, cea_script.parameters)
        cea_script.print_script_configuration(config, verb='Configuring')

    # save the updates to the configuration file (re-running the same tool will result in the
    # same parameters being set)
    config.save(cea.config.CEA_CONFIG)