Пример #1
0
	def _createDatabaseTables(self):
		self._logger.info("Creating new database tables for spoolmanager-plugin")
		self._database.connect(reuse_if_open=True)
		self._database.drop_tables(MODELS)
		self._database.create_tables(MODELS)

		PluginMetaDataModel.create(key=PluginMetaDataModel.KEY_DATABASE_SCHEME_VERSION, value=CURRENT_DATABASE_SCHEME_VERSION)
		self.closeDatabase()
Пример #2
0
    def _createOrUpgradeSchemeIfNecessary(self):
        schemeVersionFromDatabaseModel = None
        try:
            schemeVersionFromDatabaseModel = PluginMetaDataModel.get(
                PluginMetaDataModel.key ==
                PluginMetaDataModel.KEY_DATABASE_SCHEME_VERSION)
            pass
        except Exception as e:
            errorMessage = str(e)
            if errorMessage.startswith("no such table"):
                self._createDatabaseTables()
            else:
                self._logger.error(str(e))

        if not schemeVersionFromDatabaseModel == None:
            currentDatabaseSchemeVersion = int(
                schemeVersionFromDatabaseModel.value)
            if (currentDatabaseSchemeVersion <
                    CURRENT_DATABASE_SCHEME_VERSION):
                # evautate upgrade steps (from 1-2 , 1...6)
                self._logger.info(
                    "We need to upgrade the database scheme from: '" +
                    str(currentDatabaseSchemeVersion) + "' to: '" +
                    str(CURRENT_DATABASE_SCHEME_VERSION) + "'")

                try:
                    self.backupDatabaseFile(self._databasePath)
                    self._upgradeDatabase(currentDatabaseSchemeVersion,
                                          CURRENT_DATABASE_SCHEME_VERSION)
                except Exception as e:
                    self._logger.error("Error during database upgrade!!!!")
                    self._logger.exception(e)
                    return
                self._logger.info("Database-scheme successfully upgraded.")
        pass
    def _createOrUpgradeSchemeIfNecessary(self):
        schemeVersionFromDatabaseModel = None
        try:
            schemeVersionFromDatabaseModel = PluginMetaDataModel.get(
                PluginMetaDataModel.key ==
                PluginMetaDataModel.KEY_DATABASE_SCHEME_VERSION)
            pass
        except Exception as e:
            errorMessage = e.message
            if errorMessage.startswith("no such table"):
                self._createDatabaseTables()
            else:
                self._logger.error(str(e))

        if not schemeVersionFromDatabaseModel == None:
            currentDatabaseSchemeVersion = int(
                schemeVersionFromDatabaseModel.value)
            if (currentDatabaseSchemeVersion <
                    CURRENT_DATABASE_SCHEME_VERSION):
                # evautate upgrade steps (from 1-2 , 1...6)
                print("We need to upgrade the database scheme from: '" +
                      str(currentDatabaseSchemeVersion) + "' to: '" +
                      str(CURRENT_DATABASE_SCHEME_VERSION) + "'")
                pass
        pass
Пример #4
0
    def backupDatabaseFile(self):

        if (os.path.exists(self._databaseSettings.fileLocation)):
            self._logger.info("Starting database backup")
            now = datetime.datetime.now()
            currentDate = now.strftime("%Y%m%d-%H%M")
            currentSchemeVersion = "unknown"
            try:
                currentSchemeVersion = PluginMetaDataModel.get(
                    PluginMetaDataModel.key ==
                    PluginMetaDataModel.KEY_DATABASE_SCHEME_VERSION)
                if (currentSchemeVersion != None):
                    currentSchemeVersion = str(currentSchemeVersion.value)
            except Exception as e:
                self._logger.exception(
                    "Could not read databasescheme version:" + str(e))

            backupDatabaseFilePath = self._databaseSettings.fileLocation[
                0:
                -3] + "-backup-V" + currentSchemeVersion + "-" + currentDate + ".db"
            # backupDatabaseFileName = "spoolmanager-backup-"+currentDate+".db"
            # backupDatabaseFilePath = os.path.join(backupFolder, backupDatabaseFileName)
            if not os.path.exists(backupDatabaseFilePath):
                shutil.copy(self._databaseSettings.fileLocation,
                            backupDatabaseFilePath)
                self._logger.info("Backup of spoolmanager database created '" +
                                  backupDatabaseFilePath + "'")
            else:
                self._logger.warn("Backup of spoolmanager database ('" +
                                  backupDatabaseFilePath +
                                  "') is already present. No backup created.")
            return backupDatabaseFilePath
        else:
            self._logger.info(
                "No database backup needed, because there is no databasefile '"
                + str(self._databaseSettings.fileLocation) + "'")
Пример #5
0
	def loadDatabaseMetaInformations(self, databaseSettings = None):

		backupCurrentDatabaseSettings = None
		if (databaseSettings != None):
			backupCurrentDatabaseSettings = self._databaseSettings
		else:
			# use default settings
			databaseSettings = self._databaseSettings
			backupCurrentDatabaseSettings = self._databaseSettings
		# filelocation
		# backupname
		# scheme version
		# spoolitem count
		schemeVersionFromPlugin = CURRENT_DATABASE_SCHEME_VERSION
		localSchemeVersionFromDatabaseModel = "-"
		localSpoolItemCount = "-"
		externalSchemeVersionFromDatabaseModel = "-"
		externalSpoolItemCount = "-"
		errorMessage = ""
		loadResult = False
		# - save current DatbaseSettings
		# currentDatabaseSettings = self._databaseSettings
		# currentDatabase = self._database
		# externalConnected = False
		# always read local meta data
		try:
			currentDatabaseType = databaseSettings.type

			# First load meta from local sqlite database
			databaseSettings.type = "sqlite"
			databaseSettings.baseFolder = self._databaseSettings.baseFolder
			databaseSettings.fileLocation = self._databaseSettings.fileLocation
			self._databaseSettings = databaseSettings
			try:
				self.connectoToDatabase( sendErrorPopUp=False)
				localSchemeVersionFromDatabaseModel = PluginMetaDataModel.get(PluginMetaDataModel.key == PluginMetaDataModel.KEY_DATABASE_SCHEME_VERSION).value
				localSpoolItemCount = self.countSpoolsByQuery()
				self.closeDatabase()
			except Exception as e:
				errorMessage = "local database: " + str(e)
				self._logger.error("Connecting to local database not possible")
				self._logger.exception(e)
				try:
					self.closeDatabase()
				except Exception:
					pass  # ignore close exception

			# Use orign Databasetype to collect the other meta dtaa (if neeeded)
			databaseSettings.type = currentDatabaseType
			if (databaseSettings.useExternal == True):
				# External DB
				self._databaseSettings = databaseSettings
				self.connectoToDatabase(sendErrorPopUp=False)
				externalSchemeVersionFromDatabaseModel = PluginMetaDataModel.get(PluginMetaDataModel.key == PluginMetaDataModel.KEY_DATABASE_SCHEME_VERSION).value
				externalSpoolItemCount = self.countSpoolsByQuery()
				self.closeDatabase()
			loadResult = True
		except Exception as e:
			errorMessage = str(e)
			self._logger.exception(e)
			try:
				self.closeDatabase()
			except Exception:
				pass #ignore close exception
		finally:
			# restore orig. databasettings
			if (backupCurrentDatabaseSettings != None):
				self._databaseSettings = backupCurrentDatabaseSettings

		return {
			"success": loadResult,
			"errorMessage": errorMessage,
			"schemeVersionFromPlugin": schemeVersionFromPlugin,
			"localSchemeVersionFromDatabaseModel": localSchemeVersionFromDatabaseModel,
			"localSpoolItemCount": localSpoolItemCount,
			"externalSchemeVersionFromDatabaseModel": externalSchemeVersionFromDatabaseModel,
			"externalSpoolItemCount": externalSpoolItemCount
		}