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