Example #1
0
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...")
Example #2
0
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")