def make_root(score_names, table): result = {} for score_file, name in score_names: resolved_file = DataFile.resolve('score', score_file) if not resolved_file: LOGGER.error('No such score file: "%s".', DataFile.base_file('score', score_file)) continue elements = Yaml.read(resolved_file) description = {'elements': elements, 'type': 'score'} parts = resolved_file.split('/') final_file = '/'.join([parts[1]] + parts[3:]) try: element = Root(description, final_file) except Exception: LOGGER.error("\nError when reading score file %s", score_file) continue name = os.path.splitext(name or score_file)[0] name = UniqueName.unique_name(name, table) result[name] = element element.name = name return result
def _make(name, tags, project, show_error): Name.set_name(name) Name.set_tags(tags) Path.set_project_path(project_path=project, show_error=show_error) DataFile.compute_command_path(force=True) return MergeSettings(args)
def resolve_extensions(data): extensions = set() datas = [data] while True: extension = data.get('inherit') if not extension: break try: extension, data = DataFile.load_resolve('score', extension) except Exception as e: raise Exception("Couldn't find extension for %s: %s" % (extension, str(e))) if extension in extensions: raise Exception('Infinite circular extension for %s' % extension) if len(data) > 1: LOGGER.error("More than one element in extension %s", extension) data = data[0] datas.append(data) extensions.add(extension) result = {} for data in reversed(datas): result.update(data) if extensions: del result['inherit'] return result
def _get_api(): global API if not API: try: auth = DataFile.load('auth.yml')[0] except: raise Exception('Couldn\'t get twitter authorization') else: API = twitter.Api(**auth['twitter']) return API
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 make_pattern(element, description, name=None, patterns=None): if not isinstance(description, dict): name = description pattern = (patterns or {}).get(name) if pattern: return pattern description = DataFile.load('pattern', name)[0] entry = REGISTRY.get_from_description(description) name = name + entry.name if name else entry.name return entry.function(description, element, name)
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 make_root(score_names, table): result = {} for score_file, name in score_names: resolved_file = DataFile.resolve("score", score_file) if not resolved_file: LOGGER.error('No such score file: "%s".', DataFile.base_file("score", score_file)) continue elements = Yaml.read(resolved_file) description = {"elements": elements, "type": "score"} parts = resolved_file.split("/") final_file = "/".join([parts[1]] + parts[3:]) try: element = Root(description, final_file) except Exception: LOGGER.error("\nError when reading score file %s", score_file) continue name = os.path.splitext(name or score_file)[0] name = UniqueName.unique_name(name, table) result[name] = element element.name = name return result
def get_output(self, name): with self.lock: output = self.outputs.setdefault(name, [None, 1]) if output[0]: output[1] += 1 else: if name: try: data = DataFile.load('output', name) except: try: from echomesh.output.Registry import REGISTRY entry = REGISTRY.entry(name) data = {'type': entry.name} except: del self.outputs[name] raise Exception('No output named "%s".' % name) else: data = None output[0] = _SingleOutput(name, data, self) self.outputs[name] = output return output[0]
def contexts(_): parts = DataFile.named_paths() con = (' %s:\n %s' % (x, os.path.abspath(y)) for x, y in parts) LOGGER.info('%s\n', '\n'.join(con))
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)