コード例 #1
0
def main(config=None):
    """

    :param cea.config.Configuration config: the configuration file to use (instead of creating a new one)
    :return:
    """
    if not config:
        config = cea.config.Configuration()

    cli_config = get_cli_config()

    # handle arguments
    args = sys.argv[1:]  # drop the script name from the arguments
    if not len(args) or args[0].lower() == '--help':
        print_help()
        sys.exit(1)
    script_name = args.pop(0)
    option_list = cli_config.get('config', script_name).split()
    config.restrict_to(option_list)
    config.apply_command_line_args(args, option_list)

    # 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)
    print_script_configuration(config, script_name, option_list)
コード例 #2
0
        def script_runner(config=None, **kwargs):
            # each cea script is represented by this function - but assigned the name of the script at module
            # level. this is done when the module is read. Note that we use the LazyLoader below to only actually
            # import the module when it's accessed the first time to save startup time (scripts are often run
            # infrequently and most are not run at all during an average cea session)
            if not config:
                config = cea.config.Configuration()

            option_list = cea_script.parameters
            config.restrict_to(option_list)
            for section, parameter in config.matching_parameters(option_list):
                if parameter.py_name in kwargs:
                    parameter.set(kwargs[parameter.py_name])
            cea_script.print_script_configuration(config)
            if list(cea_script.missing_input_files(config)):
                cea_script.print_missing_input_files(config)
                raise cea.MissingInputDataException()
            t0 = datetime.datetime.now()
            # run the script
            script_module.main(config)

            # print success message
            msg = "Script completed. Execution time: %.2fs" % (
                datetime.datetime.now() - t0).total_seconds()
            print("")
            print("-" * len(msg))
            print(msg)
コード例 #3
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))
    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)
コード例 #4
0
 def script_runner(config=config, subprocess=False, **kwargs):
     cea_script.print_script_configuration(config)
     option_list = cea_script.parameters
     module_path = cea_script.module
     script_module = importlib.import_module(module_path)
     config.restrict_to(option_list)
     for section, parameter in config.matching_parameters(option_list):
         if parameter.name in kwargs:
             parameter.set(kwargs[parameter.name])
     if not subprocess:
         script_module.main(config)
コード例 #5
0
 def script_runner(config=config, subprocess=False, **kwargs):
     print('running script {}'.format(script_name))
     option_list = cli_config.get('config', script_name).split()
     module_path = cli_config.get('scripts', script_name)
     script_module = importlib.import_module(module_path)
     config.restrict_to(option_list)
     for section, parameter in config.matching_parameters(option_list):
         if parameter.name in kwargs:
             parameter.set(kwargs[parameter.name])
     if not subprocess:
         script_module.main(config)
コード例 #6
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)
コード例 #7
0
def main(config=None):
    """

    :param cea.config.Configuration config: the configuration file to use (instead of creating a new one)
    :return:
    """
    t0 = datetime.datetime.now()

    if not config:
        config = cea.config.Configuration()

    from cea import suppress_3rd_party_debug_loggers
    suppress_3rd_party_debug_loggers()

    # handle arguments
    args = sys.argv[1:]  # drop the script name from the arguments
    if not len(args):
        print_help(config, args[1:])
        sys.exit(1)
    if args[0].lower() == '--help':
        print_help(config, args[1:])
        sys.exit(0)
    if args[0].lower() == '--version':
        print('City Energy Analyst version %s' % cea.__version__)
        sys.exit(0)
    script_name = args.pop(0)
    cea_script = cea.scripts.by_name(script_name, config.plugins)
    config.restrict_to(cea_script.parameters)
    config.apply_command_line_args(args, cea_script.parameters)

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

    cea_script.print_script_configuration(config)
    if list(cea_script.missing_input_files(config)):
        cea_script.print_missing_input_files(config)
        sys.exit(cea.MissingInputDataException.rc)

    script_module = importlib.import_module(cea_script.module)
    try:
        script_module.main(config)
        print("Execution time: %.2fs" % (datetime.datetime.now() - t0).total_seconds())
    except cea.ConfigError as config_error:
        print('ERROR: %s' % config_error)
        sys.exit(config_error.rc)
    except cea.CustomDatabaseNotFound as error:
        print('ERROR: %s' % error)
        sys.exit(error.rc)
    except:
        raise
コード例 #8
0
ファイル: api.py プロジェクト: nasty-bos/CityEnergyAnalyst
        def script_runner(config=config, **kwargs):
            option_list = cea_script.parameters
            config.restrict_to(option_list)
            for section, parameter in config.matching_parameters(option_list):
                if parameter.py_name in kwargs:
                    parameter.set(kwargs[parameter.py_name])
            cea_script.print_script_configuration(config)
            if list(cea_script.missing_input_files(config)):
                cea_script.print_missing_input_files(config)
                raise cea.MissingInputDataException()
            t0 = datetime.datetime.now()
            # run the script
            script_module.main(config)

            # print success message
            msg = "Script completed. Execution time: %.2fs" % (datetime.datetime.now() - t0).total_seconds()
            print("")
            print("-" * len(msg))
            print(msg)
コード例 #9
0
ファイル: cea_doc.py プロジェクト: verakai/CityEnergyAnalyst
def main(config=None):
    """

    :param cea.config.Configuration config: the configuration file to use (instead of creating a new one)
    :return:
    """
    t0 = datetime.datetime.now()
    if not config:
        config = cea.config.Configuration()

    # handle arguments
    args = sys.argv[1:]  # drop the script name from the arguments
    if not len(args) or args[0].lower() == '--help':
        print_help(config, args[1:])
        sys.exit(1)
    script_name = args.pop(0)
    cea_script = cea.scripts.by_name(script_name, plugins=config.plugins)
    if not 'doc' in cea_script.interfaces:
        print('Invalid script for cea-doc')
        print_valid_script_names(config.plugins)
        sys.exit(ScriptNotFoundException.rc)
    config.restrict_to(cea_script.parameters)
    config.apply_command_line_args(args, cea_script.parameters)

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

    script_module = importlib.import_module(cea_script.module)
    try:
        script_module.main(config)
        print("Execution time: %.2fs" %
              (datetime.datetime.now() - t0).total_seconds())
    except cea.ConfigError as config_error:
        print('ERROR: %s' % config_error)
        sys.exit(config_error.rc)
    except cea.CustomDatabaseNotFound as error:
        print('ERROR: %s' % error)
        sys.exit(error.rc)
    except:
        raise
コード例 #10
0
def main(config=None):
    """

    :param cea.config.Configuration config: the configuration file to use (instead of creating a new one)
    :return:
    """
    if not config:
        config = cea.config.Configuration()

    # handle arguments
    args = sys.argv[1:]  # drop the script name from the arguments
    if not len(args) or args[0].lower() == '--help':
        print_help()
        sys.exit(1)
    script_name = args.pop(0)
    cea_script = cea.scripts.by_name(script_name)
    config.restrict_to(cea_script.parameters)
    config.apply_command_line_args(args, cea_script.parameters)

    # 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)
    cea_script.print_script_configuration(config, verb='Configuring')