113 lines
3.0 KiB
Python
113 lines
3.0 KiB
Python
'''
|
|
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
|
|
|
|
|
|
|