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 load(self, config_filename="config.yaml"): """Get configuration.""" full_config_filename = self._path_to([config_filename]) if full_config_filename in self._cache: return self._cache[full_config_filename] if not os.path.exists(full_config_filename): return None with open(full_config_filename) as f: config = yaml_round_trip_load(f.read()) self._cache[full_config_filename] = config return config
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 _get_root_config_field(config_filename, field_name): with open(config_filename) as f: config = yaml_round_trip_load(f.read()) return config.get("ROOT", {}).get(field_name, "")
def meta_data(): if os.path.exists(meta_data_filename()): with open(meta_data_filename()) as f: return yaml_round_trip_load(f.read()) return None
def _load_config(cls, config_filename): with open(config_filename) as f: return yaml_round_trip_load(f.read())