import yaml from pathlib import Path class Package: def __init__(self, obj): if isinstance(obj, dict): self.name, props = next(iter(obj.items())) self.source = 'core' for key, value in props.items(): setattr(self, key, value) else: self.name = obj self.source = 'core' self.update_from_files() def __repr__(self): return self.name def update_from_files(self): if self.source == 'none': self.source = None default_config = Path('lain/.config/' + self.name) if hasattr(self, 'config'): self.config = Path('lain/' + self.config) elif default_config.is_dir(): self.config = default_config else: self.config = None default_script = Path('scripts/' + self.name + '.fish') if hasattr(self, 'script'): self.script = Path('scripts/' + self.script) elif default_script.is_file(): self.script = default_script else: self.script = None default_unit = Path('lain/.config/systemd/user/' + self.name + '.service') if hasattr(self, 'userunits'): self.userunits = list(map(lambda unit: Path('lain/.config/systemd/user/' + unit), self.userunits)) elif default_unit.is_file(): self.userunits = [default_unit] else: self.userunits = None class Category: def __init__(self, name, packages): self.name = name self.packages = [Package(pkg) for pkg in packages] def __repr__(self): return self.name + ': ' + str(self.packages) def parse(file): f = open(file, 'r') data = yaml.load(f) return [Category(name, packages) for name, packages in data.items()]