class Model: """That needs a table of pairs - eng and its meanings""" def __init__(self): self.phrases = Observable({}) self.db = MongoDbProxy("mongodb://localhost:27017/", "RepeatItDb", "phrases") data = self.db.get_all() self.phrases.setData(data) def addWord(self, key, lang, meanings): newData = self.phrases.getData() newData[key] = meanings self.phrases.setData(newData) def getAllWords(self): return self.phrases.getData() def removeWord(self, key): newData = self.phrases.getData() newData.pop(key) self.phrases.setData(newData) def saveWord(self, wordAndMeaning): word = wordAndMeaning[0] meaning = wordAndMeaning[1] self.addWord(word, "pl", meaning) def saveDb(self): dbData = self.db.get_all() modelData = self.getAllWords() #That's for future optimization: update db instead of adding it all dbKeysSet = set(dbData.keys()) dbValuesSet = set(dbData.values()) modelKeysSet = set(modelData.keys()) modelValuesSet = set(modelData.values()) newRecordsKeys = modelKeysSet - dbKeysSet deletedRecordsKeys = dbKeysSet - modelKeysSet if len(newRecordsKeys): for newKey in newRecordsKeys: self.db.add_phrase(Phrase(newKey, "pl", modelData[newKey])) if len(deletedRecordsKeys): for deletedKey in deletedRecordsKeys: self.db.drop_record(deletedKey) #Handle also value update print("Saving database...")
class EfaLiveSettings(object): def __init__(self, confPath = os.path.join(os.path.expanduser('~'), ".efalive")): self._logger = logging.getLogger('efalive.common.EfaLiveSettings') self._checkPath(confPath) self.confPath = confPath self._logger.info("Using configuration directory '%s'" % confPath) self._settingsFileName = os.path.join(self.confPath, "settings.conf") self._backupFileName = os.path.join(self.confPath, "backup.conf") self.efaShutdownAction = Observable() self.autoUsbBackup = Observable() self.autoUsbBackupDialog = Observable() self.efaLiveBackupPaths = "/home/efa/.efalive" self.efaPort = Observable() self.efaCredentialsFile = "~/.efalive/.efacred" self.auto_backup_use_password = Observable() self.auto_backup_password = "" self.mailer_host = Observable() self.mailer_port = Observable() self.mailer_use_ssl = Observable() self.mailer_use_starttls = Observable() self.mailer_user = Observable() self.mailer_password = Observable() self.mailer_sender = Observable() self.backup_mail_recipient = Observable() self.hourly_tasks = Observable() self.daily_tasks = Observable() self.weekly_tasks = Observable() self.monthly_tasks = Observable() def initSettings(self): self.efaShutdownAction.updateData("shutdown") self.efaPort.updateData(3834) self.mailer_host.updateData("") self.mailer_port.updateData(25) self.mailer_use_ssl.updateData(False) self.mailer_use_starttls.updateData(True) self.mailer_user.updateData("") self.mailer_password.updateData("") self.mailer_sender.updateData("") self.load_settings() def load_settings(self): if os.path.isfile(self._settingsFileName): settingsFile=open(self._settingsFileName, "r") self.parseSettingsFile(settingsFile) settingsFile.close() def _checkPath(self, path): if not os.path.exists(path): self._logger.debug("Creating directory: %s" % path) os.makedirs(path, 0755) def parseSettingsFile(self, file): self._logger.info("Parsing settings file") for line in file: if line.startswith("EFA_SHUTDOWN_ACTION="): actionStr=line[(line.index('=') + 1):].rstrip() self.efaShutdownAction.updateData(actionStr) self._logger.debug("Parsed shutdown action: " + actionStr) elif line.startswith("AUTO_USB_BACKUP="): enableStr=line[(line.index('=') + 1):].rstrip() self.autoUsbBackup.updateData(enableStr == "\"TRUE\"") self._logger.debug("Parsed auto USB backup setting: " + enableStr) elif line.startswith("AUTO_USB_BACKUP_DIALOG="): enableStr=line[(line.index('=') + 1):].rstrip() self.autoUsbBackupDialog.updateData(enableStr == "\"TRUE\"") self._logger.debug("Parsed auto USB backup dialog setting: " + enableStr) elif line.startswith("EFALIVE_BACKUP_PATHS="): backupStr=line[(line.index('=') + 1):].rstrip() self.efaLiveBackupPaths = backupStr.replace("\"", "") self._logger.debug("Parsed efaLive backup paths: " + backupStr) elif line.startswith("EFA_PORT="): portStr=line[(line.index('=') + 1):].rstrip() self.efaPort.updateData(int(portStr)) self._logger.debug("Parsed efa port: " + portStr) elif line.startswith("EFA_CREDENTIALS_FILE="): credStr=line[(line.index('=') + 1):].rstrip() self.efaCredentialsFile = credStr self._logger.debug("Parsed efa credentials file setting: " + credStr) elif line.startswith("AUTO_BACKUP_PASSWORD="******"Parsed efa auto backup password setting: " + pwdStr) elif line.startswith("AUTO_BACKUP_USE_PASSWORD="******"\"TRUE\"") self._logger.debug("Parsed auto backup enable password setting: " + enableStr) elif line.startswith("MAILER_HOST="): hostStr=line[(line.index('=') + 1):].rstrip() self.mailer_host.updateData(hostStr) self._logger.debug("Parsed efa mailer host setting: " + hostStr) elif line.startswith("MAILER_PORT="): portStr=line[(line.index('=') + 1):].rstrip() self.mailer_port.updateData(int(portStr)) self._logger.debug("Parsed efa mailer port setting: " + portStr) elif line.startswith("MAILER_USE_SSL="): enableStr=line[(line.index('=') + 1):].rstrip() self.mailer_use_ssl.updateData(enableStr == "\"TRUE\"") self._logger.debug("Parsed efa mailer use SSL setting: " + enableStr) elif line.startswith("MAILER_USE_STARTTLS="): enableStr=line[(line.index('=') + 1):].rstrip() self.mailer_use_starttls.updateData(enableStr == "\"TRUE\"") self._logger.debug("Parsed efa mailer use StartTLS setting: " + enableStr) elif line.startswith("MAILER_USER="******"Parsed efa mailer user setting: " + userStr) elif line.startswith("MAILER_PASSWORD="******"Parsed efa mailer password setting: " + passStr) elif line.startswith("MAILER_SENDER="): senderStr=line[(line.index('=') + 2):].rstrip()[:-1] self.mailer_sender.updateData(senderStr) self._logger.debug("Parsed efa mailer sender setting: " + userStr) elif line.startswith("HOURLY_TASKS="): valueStr=line[(line.index('=') + 2):].rstrip()[:-1] tasks = json.loads(valueStr) if tasks != None: task_map = {} for task in tasks: task_id = self._create_id(task) task_map[task_id] = task self.hourly_tasks.updateData(task_map) self._logger.debug("Parsed hourly tasks setting: " + valueStr) elif line.startswith("DAILY_TASKS="): valueStr=line[(line.index('=') + 2):].rstrip()[:-1] tasks = json.loads(valueStr) if tasks != None: task_map = {} for task in tasks: task_id = self._create_id(task) task_map[task_id] = task self.daily_tasks.updateData(task_map) self._logger.debug("Parsed daily tasks setting: " + valueStr) elif line.startswith("WEEKLY_TASKS="): valueStr=line[(line.index('=') + 2):].rstrip()[:-1] tasks = json.loads(valueStr) if tasks != None: task_map = {} for task in tasks: task_id = self._create_id(task) task_map[task_id] = task self.weekly_tasks.updateData(task_map) self._logger.debug("Parsed weekly tasks setting: " + valueStr) elif line.startswith("MONTHLY_TASKS="): valueStr=line[(line.index('=') + 2):].rstrip()[:-1] tasks = json.loads(valueStr) if tasks != None: task_map = {} for task in tasks: task_id = self._create_id(task) task_map[task_id] = task self.monthly_tasks.updateData(task_map) self._logger.debug("Parsed monthly tasks setting: " + valueStr) def _create_id(self, task): hasher = md5.new() hasher.update(task[0]) hasher.update(str(task[1])) return hasher.hexdigest() def save(self): self._logger.info("Saving settings to file: %s" % (self._settingsFileName)) try: settingsFile=open(self._settingsFileName, "w") settingsFile.write("EFA_SHUTDOWN_ACTION=%s\n" % self.efaShutdownAction.getData()) if self.autoUsbBackup._data == True: settingsFile.write("AUTO_USB_BACKUP=\"TRUE\"\n") else: settingsFile.write("AUTO_USB_BACKUP=\"FALSE\"\n") if self.autoUsbBackupDialog._data == True: settingsFile.write("AUTO_USB_BACKUP_DIALOG=\"TRUE\"\n") else: settingsFile.write("AUTO_USB_BACKUP_DIALOG=\"FALSE\"\n") settingsFile.write("EFALIVE_BACKUP_PATHS=\"%s\"\n" % self.efaLiveBackupPaths) settingsFile.write("EFA_PORT=%d\n" % self.efaPort.getData()) settingsFile.write("EFA_CREDENTIALS_FILE=%s\n" % self.efaCredentialsFile) settingsFile.write("AUTO_BACKUP_PASSWORD=%s\n" % self.auto_backup_password) if self.auto_backup_use_password._data == True: settingsFile.write("AUTO_BACKUP_USE_PASSWORD=\"TRUE\"\n") else: settingsFile.write("AUTO_BACKUP_USE_PASSWORD=\"FALSE\"\n") settingsFile.write("MAILER_HOST=%s\n" % self.mailer_host.getData()) settingsFile.write("MAILER_PORT=%d\n" % self.mailer_port.getData()) if self.mailer_use_ssl.getData() == True: settingsFile.write("MAILER_USE_SSL=\"TRUE\"\n") else: settingsFile.write("MAILER_USE_SSL=\"FALSE\"\n") if self.mailer_use_starttls.getData() == True: settingsFile.write("MAILER_USE_STARTTLS=\"TRUE\"\n") else: settingsFile.write("MAILER_USE_STARTTLS=\"FALSE\"\n") settingsFile.write("MAILER_USER=%s\n" % self.mailer_user.getData()) password = self.mailer_password.getData() if password != None: password = base64.b64encode(password) settingsFile.write("MAILER_PASSWORD=%s\n" % password) settingsFile.write("MAILER_SENDER='%s'\n" % self.mailer_sender.getData()) settingsFile.write("HOURLY_TASKS='%s'\n" % json.dumps(self._get_tasks(self.hourly_tasks))) settingsFile.write("DAILY_TASKS='%s'\n" % json.dumps(self._get_tasks(self.daily_tasks))) settingsFile.write("WEEKLY_TASKS='%s'\n" % json.dumps(self._get_tasks(self.weekly_tasks))) settingsFile.write("MONTHLY_TASKS='%s'\n" % json.dumps(self._get_tasks(self.monthly_tasks))) settingsFile.close() except IOError, exception: self._logger.error("Could not save files: %s" % exception) raise Exception("Could not save files")