''' Created on 2 nov 2019 @author: Emanuele Trabattoni ''' import json,os,glob,copy from PyQt5.QtCore import QObject class bananaCONF(QObject): ''' Carica e Salva file di configurazione per bananaSPLITTER ''' def __init__(self, workdir=None, logger=None): try: QObject.__init__(self) self.log = logger self.fileList = None self.workdir = None self.inUse = None self.settingsList = dict() if workdir is not None: self.workdir = workdir os.chdir(workdir) self.log.debug(self.tr("Cerco le configurazioni in: [{}]").format(os.getcwd())) else: self.log.error(self.tr("Non mi e' stata fornita una directory per i file di configurazione")) pass except Exception as e: print(f"libConfload Exception: {e}") def open(self): self.log.info(self.tr("Carico i file di configurazione")) self.fileList = glob.glob(r"*.json") if len(self.fileList) > 0: for f in self.fileList: try: fp = open(f) tf = json.load(fp) fName = f.split("\\")[-1] self.settingsList[fName] = copy.deepcopy(tf) self.log.info(self.tr("Caricato correttamente: {}").format(fName)) fp.close() except json.JSONDecodeError as e: self.log.error(self.tr("Impossibile leggere la configurazione:{}\n \ Controlla il file a riga: {} e colonna:{}").format(e.doc, e.lineno, e.colno)) except IOError as ee: self.log.error(self.tr("Impossibile aprire il file: {}").format(ee)) except Exception as eee: self.log.critical(self.tr("Eccezione inaspettata: {}").format(eee)) else: self.log.error(self.tr("Non ho trovato alcun file di configurazione!")) pass def reload(self): self.settingsList = None self.fileList = None self.inUse = None self.open() pass def use(self, toUse): self.inUse = toUse return self def save(self, fName=None): if fName is None: fName=self.inUse self.log.info(self.tr("Salvo la configurazione: {}").format(fName)) try: f=open(fName, 'w') json.dump(self.settingsList[self.inUse], f, indent='\t') f.close() except IOError as e: self.log.error(self.tr("Impossibile salvare il file: {} - [{}]").format(fName,e)) except Exception as ei: self.log.error(self.tr("Errore imprevisto nella scrittura del file: {}").format(ei)) pass def getFiles(self): return self.fileList def getParam(self, *keys): rv = self.settingsList[self.inUse] try: for k in keys: rv = rv[k] return rv except ValueError as ve: self.log.error(self.tr("Parametro di configurazione non valido! [{}]").format(ve)) return False pass def setParam(self, keys=(), val=None): sv = self.settingsList[self.inUse] try: for k in keys[:-1]: sv = sv[k] sv[keys[-1]] = val return True except ValueError as ve: self.log.error(self.tr("Parametro di configurazione non valido! [{}]").format(ve)) return False pass def dump(self): return self.settingsList[self.inUse] def loads(self, conf): jconf = json.loads(conf) self.settingsList[self.inUse]=jconf