def save(self): saved_files = [] for f, settings in self.file_settings: if len(settings) > 2 and settings[2]: saved_files.append(f) settings[1] = Merge.merge(*settings[1:]) while len(settings) > 2: settings.pop() if os.path.exists(f): with open(f, 'r') as fo: data = fo.read().split(Yaml.SEPARATOR)[0] else: data = '' parent = os.path.dirname(f) if not os.path.exists(parent): from echomesh.util import Log Log.logger(__name__).info('Creating directory %s.', parent) os.makedirs(parent) with open(f, 'wb') as fw: if data: fw.write(data) fw.write(Yaml.SEPARATOR) fw.write(Yaml.encode_one(settings[1])) self.arg_settings = Merge.difference_strict(self.arg_settings, self.changed) self.recalculate() return saved_files
def save(self): saved_files = [] for f, settings in self.file_settings: if len(settings) > 2 and settings[2]: saved_files.append(f) settings[1] = Merge.merge(*settings[1:]) while len(settings) > 2: settings.pop() if os.path.exists(f): with open(f, 'r') as fo: data = fo.read().split(Yaml.SEPARATOR)[0] else: data = '' parent = os.path.dirname(f) if not os.path.exists(parent): from echomesh.util import Log Log.logger(__name__).info('Creating directory %s.', parent) os.makedirs(parent) with open(f, 'wb') as fw: if data: fw.write(data) fw.write(Yaml.SEPARATOR) fw.write(Yaml.encode_one(settings[1])) self.arg_settings = Merge.difference_strict( self.arg_settings, self.changed) self.recalculate() return saved_files
def recalculate(self): self.config = None self.changed = {} for _, configs in self.file_configs: self.config = Merge.merge(self.config, *configs) self.changed = Merge.merge(self.changed, *configs[2:]) arg = copy.deepcopy(self.arg_config) clean_arg = Merge.difference_strict(arg, self.changed) self.config = Merge.merge_for_config(self.config, clean_arg) return self.config
def recalculate(self): self.args = None self.changed = {} for _, settings in self.file_settings: self.args = Merge.merge(self.args, *settings) self.changed = Merge.merge(self.changed, *settings[2:]) arg = copy.deepcopy(self.arg_settings) clean_arg = Merge.difference_strict(arg, self.changed) self.args = Merge.merge_for_settings(self.args, clean_arg) return self.args
def merge_config(): config = Merge.merge(*Yaml.read(CommandFile.config_file('default'))) assert config, 'Unable to read default config file' _set_project_path() config = _merge_file_config(config) merge_assignments(config, Args.ARGS) return config
def assign(self, args, index=2): # default is 'master' settings = self.file_settings[index][1] while len(settings) < 3: settings.append({}) assignments = self._args_to_settings(args, _ASSIGNMENT_ERROR) settings[2] = Merge.merge(settings[2], assignments) self.recalculate() return assignments
def assign(self, args, index=2): # default is 'master' configs = self.file_configs[index][1] while len(configs) < 3: configs.append({}) assignments = self._assignment_to_config(args, _ASSIGNMENT_ERROR) configs[2] = Merge.merge(configs[2], assignments) self.recalculate() return assignments
def save(self): saved_files = [] for f, configs in self.file_configs: if len(configs) > 2 and configs[2]: saved_files.append(f) configs[1] = Merge.merge(*configs[1:]) while len(configs) > 2: configs.pop() with open(f, 'r') as fo: data = fo.read().split(Yaml.SEPARATOR)[0] with open(f, 'wb') as fw: fw.write(data) fw.write(Yaml.SEPARATOR) fw.write(Yaml.encode_one(configs[1])) self.arg_config = Merge.difference_strict(self.arg_config, self.changed) self.recalculate() return saved_files
def __init__(self, name, suffix): if suffix.startswith('.'): self.suffix = suffix else: self.suffix = '.' + suffix name_file = DataFile.clean('cache', name) self.cachedir = os.path.abspath(os.path.join(*name_file)) MakeDirs.makedirs(self.cachedir) self.manifest_file = os.path.join(self.cachedir, MANIFEST_NAME) self.manifest = Merge.merge(*Yaml.read(self.manifest_file))
def __init__(self, name, suffix): if suffix.startswith('.'): self.suffix = suffix else: self.suffix = '.' + suffix name_file = CommandFile.clean('cache', name) self.cachedir = os.path.abspath(os.path.join(*name_file)) MakeDirs.makedirs(self.cachedir) self.manifest_file = os.path.join(self.cachedir, MANIFEST_NAME) self.manifest = Merge.merge(*Yaml.read(self.manifest_file))
def test_simple(self): self.assertEqual(Merge.merge({ 1: 2, 3: 5 }, { 1: 4, 2: 7 }), { 1: 4, 2: 7, 3: 5 })
def _read_file_settings(self): self.file_settings = [] base_settings = None for f in reversed(DataFile.expand_settings()): settings = Yaml.read(f, 'settings') for c in settings: if base_settings: base_settings = Merge.merge_for_settings(base_settings, c) else: base_settings = copy.deepcopy(c) while len(settings) < 3: settings.append({}) self.file_settings.append([f, settings])
def _read_file_configs(self): self.file_configs = [] base_config = None for f in reversed(CommandFile.expand('config.yml')): configs = Yaml.read(f, 'config') for c in configs: if base_config: base_config = Merge.merge_for_config(base_config, c) else: base_config = copy.deepcopy(c) while len(configs) < 3: configs.append({}) self.file_configs.append([f, configs])
def _merge_file_config(config): for f in list(reversed(CommandFile.expand('config.yml')))[1:]: try: file_configs = Yaml.read(f) except Exception as e: _add_exception_suffix(e, 'while reading config file', f) raise for cfg in file_configs: try: config = Merge.merge_for_config(config, cfg) except Exception as e: _add_exception_suffix(e, ' while merging config file', f) raise return config
def test_simple2(self): self.assertEqual( Merge.merge({ 1: 2, 3: 5 }, { 1: 4, 2: 7 }, { 1: 23, 5: 1000 }), { 1: 23, 2: 7, 3: 5, 5: 1000 })
def test_simple2(self): self.assertEqual( Merge.merge({1: 2, 3: 5}, {1: 4, 2: 7}, {1: 23, 5: 1000}), {1: 23, 2: 7, 3: 5, 5: 1000})
def config(_, scope, cfg): f = CommandFile.config_file(scope) configs = Yaml.read(f) + [cfg] Yaml.write(f, Merge.merge(*configs)) # TODO: needs to propagate! LOGGER.info('Changing configuration for %s', scope)
def test_simple3(self): self.assertEqual(Merge.merge({1: 2, 3: 5}), {1: 2, 3: 5})
def settings(_, scope, cfg): f = DataFile.settings_file(scope) settings = Yaml.read(f) + [cfg] Yaml.write(f, Merge.merge(*settings)) # TODO: needs to propagate! LOGGER.info('Changing settings for %s', scope)
def info(): return Merge.merge(names(), addresses())
def test_simple(self): self.assertEqual(Merge.merge({1: 2, 3: 5}, {1: 4, 2: 7}), {1: 4, 2: 7, 3: 5})