def create_config_dir(config_dir): """Install the dir with dodo_commands resources.""" os.makedirs(config_dir) config_filename = os.path.join(config_dir, "config.yaml") default_config = { "ROOT": { "command_path": [ os.path.join(Paths().default_commands_dir(expanduser=False), "*") ], "version": "1.0.0", } } default_config_mixin_filename = Paths().default_config_mixin_filename() if os.path.exists(default_config_mixin_filename): with open(default_config_mixin_filename) as f: default_config_mixin = yaml_round_trip_load(f.read()) merge_into_config(default_config, default_config_mixin) with open(config_filename, "w") as f: for key in default_config: f.write(yaml_round_trip_dump({key: default_config[key]})) f.write(os.linesep) os.makedirs(os.path.join(config_dir, ".dodo-start-env"))
def _collect_command_dirs( config, config_io, layer_names_by_command_dir, command_aliases, metadata_by_layer_name, layer_by_target_path, ): config_memo = yaml_round_trip_dump(config) for layer_name, layer_metadata in metadata_by_layer_name.items(): def has_command_path(layer): return R.path_or(None, "ROOT", "command_path")(layer) layer_filenames = layer_filename_superset( [layer_metadata.target_path], config_io=config_io ) extra_layers = R.map(config_io.load)(layer_filenames) if R.filter(has_command_path)(extra_layers): base_config = yaml_round_trip_load(config_memo) updated_config, warnings = build_config([base_config] + extra_layers) for command_dir in get_command_dirs_from_config(updated_config): layer_names = layer_names_by_command_dir[command_dir] _add_to_layer_names(layer_names, layer_name) layer = layer_by_target_path[layer_metadata.target_path] for command_alias in get_aliases(layer).items(): alias_prefix = ( "" if command_alias[0] in layer_metadata.inferred_commands else (layer_name + ".") ) cmd_prefix = layer_name + "." command_aliases[alias_prefix + command_alias[0]] = ( cmd_prefix + command_alias[1] )
def _write_config(cls, config, config_filename): with open(config_filename, "w") as f: f.write(yaml_round_trip_dump(config))
def save(self, config, config_filename="config.yaml"): """Write config to config_filename.""" with open(self._path_to([config_filename]), "w") as f: return f.write(yaml_round_trip_dump(config))
from argparse import ArgumentParser from dodo_commands.dependencies import yaml_round_trip_dump from dodo_commands.framework.singleton import Dodo def _args(): parser = ArgumentParser(description="Print the full configuration.") parser.add_argument("key", nargs="?") args = Dodo.parse_args(parser) return args if Dodo.is_main(__name__): args = _args() if args.key: prefix = "" if args.key.startswith("/") else "/" contents = Dodo.get(prefix + args.key) if isinstance(contents, str): print(contents) else: print("%s" % yaml_round_trip_dump(contents)) else: content = re.sub( r"^([0-9_A-Z]+\:)$", r"\n\1", yaml_round_trip_dump(Dodo.get()), flags=re.MULTILINE, ) print(re.sub(r"^\n\n", r"\n", content, flags=re.MULTILINE))
def create_layer(self, tmpdir, layer): """Create a config layer file in the tmpdir.""" layer_filename = os.path.join(str(tmpdir), "mylayer.yml") with open(layer_filename, "w") as f: f.write(yaml_round_trip_dump(layer))