Esempio n. 1
0
		def databaseCallMethode():
			# databaseId = model.get_id()
			# if (databaseId != None):
			# 	# we need to update and we need to make
			# 	spoolModel = self.loadSpool(databaseId)
			# 	if (spoolModel == None):
			# 		self._passMessageToClient("error", "DatabaseManager",
			# 								  "Could not update the Spool, because it is already deleted!")
			# 		return
			# 	else:
			# 		versionFromUI = model.version if model.version != None else 1
			# 		versionFromDatabase = spoolModel.version if spoolModel.version != None else 1
			# 		if (versionFromUI != versionFromDatabase):
			# 			self._passMessageToClient("error", "DatabaseManager",
			# 									  "Could not update the Spool, because someone already modified the spool. Do a reload!")
			# 			return

			with self._database.atomic() as transaction:  # Opens new transaction.
				try:
					databaseId = spoolModel.databaseId
					if (databaseId != None):
						versionFromUI = None
						# we need to update and we need to make sure nobody else modify the data
						currentSpoolModel = self.loadSpool(databaseId, withReusedConnection)
						if (currentSpoolModel == None):
							self._passMessageToClient("error", "DatabaseManager",
													  "Could not update the Spool, because it is already deleted!")
							return
						else:
							versionFromUI = spoolModel.version if spoolModel.version != None else 1
							versionFromDatabase = currentSpoolModel.version if currentSpoolModel.version != None else 1
							if (versionFromUI != versionFromDatabase):
								self._passMessageToClient("error", "DatabaseManager",
														  "Could not update the Spool, because someone already modified the spool. Do a manuel reload!")
								return
							# okay fits, increate version
						newVersion = versionFromUI + 1
						spoolModel.version = newVersion

					if (spoolModel.isTemplate == True):
						#  remove template flag from last templateSpool
						SpoolModel.update({SpoolModel.isTemplate: False}).where(SpoolModel.isTemplate == True).execute()

					spoolModel.save()
					databaseId = spoolModel.get_id()
					# do expicit commit
					transaction.commit()
				except Exception as e:
					# Because this block of code is wrapped with "atomic", a
					# new transaction will begin automatically after the call
					# to rollback().
					transaction.rollback()
					self._logger.exception("Could not insert Spool into database")

					self._passMessageToClient("error", "DatabaseManager", "Could not insert the spool into the database. See OctoPrint.log for details!")
				pass

			return databaseId
Esempio n. 2
0
    def _test_saveSpool(self):
        spoolModel = SpoolModel()
        spoolModel.displayName = "TESTSPOOL - Number1"

        self.databaseManager.initDatabase(self.postgresDatabaseSettings,
                                          self._clientOutput)
        databaseId = self.databaseManager.saveSpool(spoolModel)
        print(databaseId)
        self.assertTrue(databaseId != None, "Spool not saved")

        spoolModel = self.databaseManager.loadSpool(databaseId)
        self.assertTrue(spoolModel != None, "Spool not loaded")
        self.assertEqual("TESTSPOOL - Number1", spoolModel.displayName,
                         "Spool not saved")
Esempio n. 3
0
        def databaseCallMethode():
            if (tableQuery == None):
                return SpoolModel.select().order_by(SpoolModel.created.desc())

            offset = int(tableQuery["from"])
            limit = int(tableQuery["to"])
            sortColumn = tableQuery["sortColumn"]
            sortOrder = tableQuery["sortOrder"]
            filterName = tableQuery["filterName"]

            myQuery = SpoolModel.select().offset(offset).limit(limit)
            if (filterName == "hideEmptySpools"):
                myQuery = myQuery.where((SpoolModel.remainingWeight > 0)
                                        | (SpoolModel.remainingWeight == None))
            if (filterName == "hideInactiveSpools"):
                myQuery = myQuery.where((SpoolModel.isActive == True))
            if (filterName == "hideEmptySpools,hideInactiveSpools"):
                myQuery = myQuery.where(((SpoolModel.remainingWeight > 0) |
                                         (SpoolModel.remainingWeight == None))
                                        & (SpoolModel.isActive == True))

            if ("displayName" == sortColumn):
                if ("desc" == sortOrder):
                    myQuery = myQuery.order_by(SpoolModel.displayName.desc())
                else:
                    myQuery = myQuery.order_by(SpoolModel.displayName.asc())
            if ("lastUse" == sortColumn):
                if ("desc" == sortOrder):
                    myQuery = myQuery.order_by(SpoolModel.lastUse.desc())
                else:
                    myQuery = myQuery.order_by(SpoolModel.lastUse.asc())
            if ("firstUse" == sortColumn):
                if ("desc" == sortOrder):
                    myQuery = myQuery.order_by(SpoolModel.firstUse.desc())
                else:
                    myQuery = myQuery.order_by(SpoolModel.firstUse.asc())
            if ("remaining" == sortColumn):
                if ("desc" == sortOrder):
                    myQuery = myQuery.order_by(
                        SpoolModel.remainingWeight.desc())
                else:
                    myQuery = myQuery.order_by(
                        SpoolModel.remainingWeight.asc())
            if ("material" == sortColumn):
                if ("desc" == sortOrder):
                    myQuery = myQuery.order_by(SpoolModel.material.desc())
                else:
                    myQuery = myQuery.order_by(SpoolModel.material.asc())
            return myQuery
Esempio n. 4
0
        def databaseCallMethode():
            with self._database.atomic(
            ) as transaction:  # Opens new transaction.
                try:
                    # first delete relations
                    # n = FilamentModel.delete().where(FilamentModel.printJob == databaseId).execute()
                    # n = TemperatureModel.delete().where(TemperatureModel.printJob == databaseId).execute()

                    deleteResult = SpoolModel.delete_by_id(databaseId)
                    if (deleteResult == 0):
                        return None
                    return databaseId
                    pass
                except Exception as e:
                    # Because this block of code is wrapped with "atomic", a
                    # new transaction will begin automatically after the call
                    # to rollback().
                    transaction.rollback()
                    self._logger.exception(
                        "Could not delete spool from database:" + str(e))

                    self._passMessageToClient(
                        "Spool-DatabaseManager",
                        "Could not delete the spool ('" + str(databaseId) +
                        "') from the database. See OctoPrint.log for details!")
                    return None
                pass
Esempio n. 5
0
    def saveSpool(self):
        self._logger.info("API Save spool")
        jsonData = request.json

        databaseId = self._getValueFromJSONOrNone("databaseId", jsonData)
        self._databaseManager.connectoToDatabase()
        if (databaseId != None):
            self._logger.info("Update spool with database id '" +
                              str(databaseId) + "'")
            spoolModel = self._databaseManager.loadSpool(
                databaseId, withReusedConnection=True)
            if (spoolModel == None):
                self._logger.warning("Save spool failed. Something is wrong")
            else:
                self._updateSpoolModelFromJSONData(spoolModel, jsonData)
        else:
            self._logger.info("Create new spool")
            spoolModel = SpoolModel()
            self._updateSpoolModelFromJSONData(spoolModel, jsonData)

        databaseId = self._databaseManager.saveSpool(spoolModel,
                                                     withReusedConnection=True)
        self._databaseManager.closeDatabase()

        return flask.jsonify()
Esempio n. 6
0
		def databaseCallMethode():
			result = set()
			result.add("")
			myQuery = SpoolModel.select(SpoolModel.material).distinct()
			for spool in myQuery:
				value = spool.material
				if (value != None):
					result.add(value)
			return result;
Esempio n. 7
0
    def _createSampleSpoolModel(self):
        #DisplayName, Vendor, Material, Color[# code], Diameter [mm], Density [g/cm³], Temperature [°C], TotalWeight [g], UsedWeight [g], UsedLength [mm], FirstUse [dd.mm.yyyy hh:mm], LastUse [dd.mm.yyyy hh:mm], PurchasedFrom, PurchasedOn [dd.mm.yyyy hh:mm], Cost, CostUnit, Labels, NoteText

        s1 = SpoolModel()
        s1.displayName = "Number #1"
        s1.vendor = "The Spool Company"
        s1.material = "PETG"
        s1.color = "#FF0000"
        s1.diameter = 1.75
        s1.density = 1.27
        return s1
Esempio n. 8
0
		def databaseCallMethode():
			result = set()
			result.add("")
			myQuery = SpoolModel.select(SpoolModel.labels).distinct()
			for spool in myQuery:
				value = spool.labels
				if (value != None):
					spoolLabels = json.loads(value)
					for singleLabel in spoolLabels:
						result.add(singleLabel)
			return result
	def save_spool(self):
		self._logger.info("API Save spool")
		jsonData = request.json

		databaseId = self._getValueFromJSONOrNone("databaseId", jsonData)
		if (databaseId != None):
			self._logger.info("Update spool with database id '"+str(databaseId)+"'")
			spoolModel = self._databaseManager.loadSpool(databaseId)
			self._updateSpoolModelFromJSONData(spoolModel, jsonData)
		else:
			self._logger.info("Create new spool")
			spoolModel = SpoolModel()
			self._updateSpoolModelFromJSONData(spoolModel, jsonData)

		databaseId = self._databaseManager.saveModel(spoolModel)

		return flask.jsonify()
	def _createSampleSpoolModel(self):
		#DisplayName, Vendor, Material, Color[# code], Diameter [mm], Density [g/cm³], Temperature [°C], TotalWeight [g], UsedWeight [g], UsedLength [mm], FirstUse [dd.mm.yyyy hh:mm], LastUse [dd.mm.yyyy hh:mm], PurchasedFrom, PurchasedOn [dd.mm.yyyy hh:mm], Cost, CostUnit, Labels, NoteText

		s1 = SpoolModel()
		s1.displayName = "Number #1"
		s1.colorName = "raw-red"
		s1.color = "#FF0000"
		s1.vendor = "The Spool Company"
		s1.material = "PETG"
		s1.diameter = 1.75
		s1.density = 1.27
		s1.temperature = 182
		s1.totalWeight = 1000.0
		s1.usedWeight = 123.4
		s1.usedLength = 234.5
		s1.lastUse = datetime.datetime.now()

		s1.firstUse = datetime.datetime.strptime("2020-03-02 10:33", '%Y-%m-%d %H:%M')
		s1.purchasedOn = datetime.datetime.strptime("2020-02-01", '%Y-%m-%d')
		s1.purchasedFrom = "Unknown Seller"
		s1.cost = "12.30"
		s1.costUnit = "€"
		s1.noteText = "Very cheap spool!"
		return s1
	def _createSpoolModelFromLegacy(self, allSpoolLegacyList):
		allSpoolModels = list()
		for spoolDict in allSpoolLegacyList:
			spoolModel = SpoolModel()

			spoolIdInt = spoolDict["id"]
			nameUnicode = spoolDict["name"]
			usedFloat = spoolDict["used"]
			weightFloat = spoolDict["weight"]
			tempOffsetInt = spoolDict["temp_offset"]
			costFloat = spoolDict["cost"]
			profileDict = spoolDict["profile"]
			profileIdInt = profileDict["id"]
			diameterFloat = profileDict["diameter"]
			materialUnicode = profileDict["material"]
			vendorUnicode = profileDict["vendor"]
			densityFloat = profileDict["density"]

			spoolModel.displayName = nameUnicode
			spoolModel.vendor = vendorUnicode

			spoolModel.material = materialUnicode
			spoolModel.density = densityFloat
			spoolModel.diameter = diameterFloat
			spoolModel.cost = costFloat
			spoolModel.costUnit = "ToDo"
			spoolModel.usedLength = usedFloat
			spoolModel.totalWeight = weightFloat

			allSpoolModels.append(spoolModel)

		return allSpoolModels
def parseCSV(csvFile4Import, updateParsingStatus, errorCollection, logger, deleteAfterParsing=True):

	result = list()	# List with printJobModels
	lineNumber = 0
	try:
		with open(csvFile4Import) as csv_file:
			csv_reader = csv.reader(csv_file, delimiter=',')
			lineNumber = 0
			for row in csv_reader:
				lineNumber += 1

				# import time
				# time.sleep(1)
				updateParsingStatus(str(lineNumber))

				if lineNumber == 1:
					# createColumnOrderFromHeader(row)
					# mandatoryFieldCount = 0
					mandatoryFieldAvaiable = list()
					columnIndex = 0
					for column in row:
						column = column.strip()
						if column in ALL_COLUMNS:
							columnOrderInFile[columnIndex] = ALL_COLUMNS[column]
							if column in mandatoryFieldNames:
								mandatoryFieldAvaiable.append(column)
								# mandatoryFieldCount += 1
						columnIndex += 1
					if len(mandatoryFieldAvaiable) != len(mandatoryFieldNames):
					# if mandatoryFieldCount != len(mandatoryFieldNames):
						# identify missing files
						# mandatoryFieldMissing = mandatoryFieldNames - mandatoryFieldAvaiable
						mandatoryFieldMissing = list( set(mandatoryFieldNames) - set(mandatoryFieldAvaiable) )
						errorCollection.append("Mandatory column is missing! <br/><b>'" + "".join(mandatoryFieldMissing) + "'</b><br/>")
						break
				else:
					spoolModel = SpoolModel()
					# parse line with header defined order
					columnIndex = 0
					for columnValue in row:
						if columnIndex in columnOrderInFile:
							csvColumn = columnOrderInFile[columnIndex]
							if not csvColumn == None:
								columnValue = columnValue.strip()
								# check if mandatory value is missing
								if (len(columnValue) == 0):
									columnName = csvColumn.columnLabel
									if columnName in mandatoryFieldNames:
										errorCollection.append("["+str(lineNumber)+"] Mandatory value for column '" + columnName + "' is missing!")
										pass
								else:
									csvColumn.parseAndAssignFieldValue(columnValue, spoolModel, errorCollection, lineNumber)
								pass
						columnIndex += 1
					if (len(errorCollection) != 0):
						logger.error("Reading error line '" + str(lineNumber) + "' in Column '" + column + "' ")
					else:
						result.append(spoolModel)
			pass
	except Exception as e:
		errorMessage = "CSV Parsing error. Line:'" + str(lineNumber) + "' Error:'" + str(e) + "' File:'" + csvFile4Import + "'"
		errorCollection.append(errorMessage)
		logger.error(errorMessage)
	finally:
		if (deleteAfterParsing):
			logger.info("Removing uploded csv temp-file")
			try:
				os.remove(csvFile4Import)
			except Exception:
				pass
	return result
Esempio n. 13
0
 def databaseCallMethode():
     return SpoolModel.get_or_none(databaseId)
Esempio n. 14
0
    def _createSpoolModelFromLegacy(self, allSpoolLegacyList):
        allSpoolModels = list()
        for spoolDict in allSpoolLegacyList:
            spoolModel = SpoolModel()

            spoolIdInt = spoolDict["id"]
            nameUnicode = spoolDict["name"]
            usedWeightFloat = spoolDict["used"]
            totalWeightFloat = spoolDict["weight"]
            tempOffsetInt = spoolDict["temp_offset"]
            costFloat = spoolDict["cost"]
            profileDict = spoolDict["profile"]
            profileIdInt = profileDict["id"]
            diameterFloat = profileDict["diameter"]
            materialUnicode = profileDict["material"]
            vendorUnicode = profileDict["vendor"]
            densityFloat = profileDict["density"]

            spoolModel.displayName = nameUnicode
            spoolModel.vendor = vendorUnicode

            spoolModel.material = materialUnicode
            spoolModel.density = densityFloat
            spoolModel.diameter = diameterFloat
            spoolModel.cost = costFloat
            spoolModel.costUnit = self._filamentManagerPluginImplementation._settings.get(
                ["currencySymbol"])
            spoolModel.totalWeight = totalWeightFloat
            spoolModel.usedWeight = usedWeightFloat

            spoolModel.usedLength = self._calculateUsedLength(
                spoolModel.usedWeight, spoolModel.density, spoolModel.diameter)

            allSpoolModels.append(spoolModel)

        return allSpoolModels
Esempio n. 15
0
		def databaseCallMethode():
			return SpoolModel.get_by_id(databaseId)
Esempio n. 16
0
		def databaseCallMethode():
			myQuery = SpoolModel.select()
			return myQuery.count()
Esempio n. 17
0
		def databaseCallMethode():
			return SpoolModel.select().where(SpoolModel.isTemplate == True)