#!/usr/bin/env python3 import json class Metafile(): """Representation of a metafile (default name META), containing (as its name implies) metadata.""" def __init__(self, json_path=None, name=None): self.name = name # json_path given => we load it ; otherwise fill with default if json_path is not None: self.load_json(json_path) # raise FileNotFoundError else: self.load_default() def load_default(self): self.json_path = None self.depends = {} self.files = {} # (Note that name is already written in __init__) def load_json(self, json_path): self.json_path = json_path tmp = json.load( open(self.json_path) ) # Can raise a FileNotFoundError try: self.name = tmp["name"] self.depends = tmp["depends"] self.files = tmp["files"] except KeyError: raise MalformedMetafileError("Missing attribute (name, depends or files)") def save(self): if self.json_path is None: raise NoPathDefinedError("json_path is not defined") json.dump( { "name": self.name, "depends": self.depends, "files": self.files }, open(self.json_path, 'w') ) def get_files_dst2src(self): dstdic = {} try: for (fname, finfo) in self.files.items(): dstdic[ finfo["dest"] ] = fname except KeyError: raise MalformedMetafileError("Missing 'dest' attribute in files infos") return dstdic def add_file(self, name, dest): self.files[name] = { "dest": dest } def del_file(self, name): del self.files[name] # Exceptions ######################################## class MalformedMetafileError(Exception): """A custom exception to alert that the metafile is malformed""" def __init__(self, message): Exception.__init__(self, message) class NoPathDefinedError(Exception): """A custom exception to alert that the json_path properties of the Metafile is not defined, therefore we cannot write the data.""" def __init__(self, message): Exception.__init__(self, message)