예제 #1
0
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"))
예제 #2
0
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]
            )
예제 #3
0
 def _write_config(cls, config, config_filename):
     with open(config_filename, "w") as f:
         f.write(yaml_round_trip_dump(config))
예제 #4
0
 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))
예제 #5
0
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))
예제 #6
0
 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))