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
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")
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
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
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()
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;
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
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
def databaseCallMethode(): return SpoolModel.get_or_none(databaseId)
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
def databaseCallMethode(): return SpoolModel.get_by_id(databaseId)
def databaseCallMethode(): myQuery = SpoolModel.select() return myQuery.count()
def databaseCallMethode(): return SpoolModel.select().where(SpoolModel.isTemplate == True)