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 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 get(self): config = cea.config.Configuration() name = os.path.basename(config.project) return { 'name': name, 'path': config.project, 'scenario': config.scenario_name, 'scenarios': config.get_parameter('general:scenario-name')._choices }
def get_parameters_from_plot_class(plot_class, scenario_name=None): config = cea.config.Configuration() parameters = [] # Make sure to set scenario name to config first if 'scenario-name' in plot_class.expected_parameters and scenario_name is not None: config.scenario_name = scenario_name for pname, fqname in sorted(plot_class.expected_parameters.items(), key=lambda x: x[1]): parameter = config.get_parameter(fqname) parameters.append(deconstruct_parameters(parameter)) return parameters
def get(self, dashboard_index, plot_index): config = cea.config.Configuration() plot_cache = cea.plots.cache.PlotCache(config) dashboards = cea.plots.read_dashboards(config, plot_cache) dashboard = dashboards[dashboard_index] plot = dashboard.plots[plot_index] parameters = [] for pname, fqname in plot.expected_parameters.items(): parameter = config.get_parameter(fqname) if pname in plot.parameters: parameter.set(plot.parameters[pname]) parameters.append(deconstruct_parameters(parameter)) return parameters
def do_config_step(config, step): """update the :py:class:cea.config.Configuration object, returning the new value for the config""" base_config = step["config"] if base_config == "default": config = cea.config.Configuration(cea.config.DEFAULT_CONFIG) elif base_config == "user": config = cea.config.Configuration() elif base_config == ".": # keep the current config, we're just going to update some parameters config = config else: # load the config from a file config = cea.config.Configuration(base_config) for fqn in step.keys(): if fqn == "config": continue parameter = config.get_parameter(fqname=fqn) value = step[fqn] set_parameter(config, parameter, value) return config
def get_parameters_from_plot(plot, scenario_name=None): config = cea.config.Configuration() parameters = [] # Make sure to set scenario name to config first if 'scenario-name' in plot.expected_parameters: if scenario_name is not None: config.scenario_name = scenario_name elif 'scenario-name' in plot.parameters: config.scenario_name = plot.parameters['scenario-name'] for pname, fqname in sorted(plot.expected_parameters.items(), key=lambda x: x[1]): parameter = config.get_parameter(fqname) if pname in plot.parameters and pname != 'scenario-name': try: parameter.set(plot.parameters[pname]) # FIXME: Use a custom exception instead except AssertionError as e: if isinstance(parameter, cea.config.MultiChoiceParameter): parameter.set([]) print(e) parameters.append(deconstruct_parameters(parameter)) return parameters
def post(self, dashboard_index, plot_index): form = api.payload config = cea.config.Configuration() plot_cache = cea.plots.cache.PlotCache(config) dashboards = cea.plots.read_dashboards(config, plot_cache) dashboard = dashboards[dashboard_index] plot = dashboard.plots[plot_index] print('route_post_plot_parameters: expected_parameters: {}'.format( plot.expected_parameters.items())) for pname, fqname in plot.expected_parameters.items(): parameter = config.get_parameter(fqname) print('route_post_plot_parameters: fqname={fqname}, pname={pname}'. format(fqname=fqname, pname=pname)) if isinstance(parameter, cea.config.MultiChoiceParameter): plot.parameters[pname] = parameter.decode(','.join( form[pname])) else: plot.parameters[pname] = parameter.decode(form[pname]) cea.plots.write_dashboards(config, dashboards) return plot.parameters
def post(self): config = cea.config.Configuration() payload = api.payload if 'path' in payload: path = payload['path'] if os.path.exists(path): config.project = path if 'scenario' not in payload: config.scenario_name = '' config.save() return {'message': 'Project path changed'} else: abort(400, 'Path given does not exist') if 'scenario' in payload: scenario = payload['scenario'] choices = config.get_parameter('general:scenario-name')._choices if scenario in choices: config.scenario_name = scenario config.save() return {'message': 'Scenario changed'} else: abort(400, 'Scenario does not exist', choices=choices)
def list_scenario_names_for_project(config): return config.get_parameter('general:scenario-name')._choices