Source code for nabu.app.bootstrap

from os import path, environ
from glob import glob
from ..utils import get_folder_path
from ..pipeline.config import generate_nabu_configfile, parse_nabu_config_file
from ..pipeline.fullfield.nabu_config import nabu_config as default_fullfield_config
from ..pipeline.helical.nabu_config import nabu_config as helical_fullfield_config
from .utils import parse_params_values
from .cli_configs import BootstrapConfig


[docs] def bootstrap(): args = parse_params_values(BootstrapConfig, parser_description="Initialize a nabu configuration file") do_bootstrap = bool(args["bootstrap"]) do_convert = args["convert"] != "" no_comments = bool(args["nocomments"]) if do_bootstrap: print( "The --bootstrap option is now the default behavior of the nabu-config command. This option is therefore not needed anymore." ) if path.isfile(args["output"]): rep = input("File %s already exists. Overwrite ? [y/N]" % args["output"]) if rep.lower() != "y": print("Stopping") exit(0) opts_level = args["level"] prefilled_values = {} template_name = args["template"] if template_name != "": prefilled_values = get_config_template(template_name, if_not_found="print") if prefilled_values is None: exit(0) opts_level = "advanced" if args["dataset"] != "": prefilled_values["dataset"] = {} user_dataset = args["dataset"] if not path.isabs(user_dataset): user_dataset = path.abspath(user_dataset) print("Warning: using absolute dataset path %s" % user_dataset) if not path.exists(user_dataset): print("Error: cannot find the file or directory %s" % user_dataset) exit(1) prefilled_values["dataset"]["location"] = user_dataset if args["helical"]: my_config = helical_fullfield_config else: my_config = default_fullfield_config generate_nabu_configfile( args["output"], my_config, comments=not (no_comments), options_level=opts_level, prefilled_values=prefilled_values, ) return 0
[docs] def get_config_template(template_name, if_not_found="raise"): def handle_not_found(msg): if if_not_found == "raise": raise FileNotFoundError(msg) elif if_not_found == "print": print(msg) templates_path = get_folder_path(path.join("resources", "templates")) custom_templates_path = environ.get("NABU_TEMPLATES_PATH", None) templates = glob(path.join(templates_path, "*.conf")) if custom_templates_path is not None: templates_custom = glob(path.join(custom_templates_path, "*.conf")) templates_custom += glob(path.join(custom_templates_path, "*.cfg")) templates = templates_custom + templates available_templates_names = [path.splitext(path.basename(fname))[0] for fname in templates] if template_name not in available_templates_names: handle_not_found("Unable to find template '%s'. Available are: %s" % (template_name, available_templates_names)) return fname = templates[available_templates_names.index(template_name)] return parse_nabu_config_file(fname)