Source code for datakit_data.commands.init

# -*- coding: utf-8 -*-
import os

from cliff.command import Command
from datakit import CommandHelpers
from datakit.utils import mkdir_p, read_json, write_json

from ..project_mixin import ProjectMixin


[docs]class Init(ProjectMixin, CommandHelpers, Command): """ Initialize a directory for use with an S3 data store. :Creates: * data/ directory (which should be excluded from version control) * config/datakit-data.json """
[docs] def take_action(self, parsed_args): self.log.info("Initializing project for S3 data integration...") dirs_to_create = ['data', 'config'] [mkdir_p(directory) for directory in dirs_to_create] open('data/.gitkeep', 'w').close() self.create_project_config()
[docs] def create_project_config(self): """Create project config if they don't already exist. Plugin-level configs, if configured, will override project defaults. """ if not os.path.exists(self.project_config_path): try: plugin_configs = read_json(self.plugin_config_path) except FileNotFoundError: plugin_configs = {} to_write = self.default_configs.copy() to_write.update(plugin_configs) self.finalize_configs(to_write) write_json(self.project_config_path, to_write)
[docs] def finalize_configs(self, configs): prefix = self.pop_key(configs, 's3_path_prefix') suffix = self.pop_key(configs, 's3_path_suffix') s3_path = configs['s3_path'] bits = [bit for bit in [prefix, s3_path, suffix] if bit.strip()] if bits: configs['s3_path'] = os.path.join(*bits)
[docs] def pop_key(self, config, name): try: return config.pop(name) except KeyError: return ''