|
22 | 22 |
|
23 | 23 | FORCE_CREATE_TABLES = False
|
24 | 24 |
|
25 |
| -CURRENT_DATABASE_SCHEME_VERSION = 6 |
| 25 | +CURRENT_DATABASE_SCHEME_VERSION = 7 |
26 | 26 |
|
27 | 27 | # List all Models
|
28 | 28 | MODELS = [PluginMetaDataModel, SpoolModel]
|
@@ -166,14 +166,88 @@ def _createOrUpgradeSchemeIfNecessary(self):
|
166 | 166 |
|
167 | 167 | def _upgradeDatabase(self,currentDatabaseSchemeVersion, targetDatabaseSchemeVersion):
|
168 | 168 |
|
169 |
| - migrationFunctions = [self._upgradeFrom1To2, self._upgradeFrom2To3, self._upgradeFrom3To4, self._upgradeFrom4To5, self._upgradeFrom5To6] |
| 169 | + migrationFunctions = [self._upgradeFrom1To2, |
| 170 | + self._upgradeFrom2To3, |
| 171 | + self._upgradeFrom3To4, |
| 172 | + self._upgradeFrom4To5, |
| 173 | + self._upgradeFrom5To6, |
| 174 | + self._upgradeFrom6To7, |
| 175 | + self._upgradeFrom7To8, |
| 176 | + self._upgradeFrom8To9, |
| 177 | + self._upgradeFrom9To10 |
| 178 | + ] |
170 | 179 |
|
171 | 180 | for migrationMethodIndex in range(currentDatabaseSchemeVersion -1, targetDatabaseSchemeVersion -1):
|
172 | 181 | self._logger.info("Database migration from '" + str(migrationMethodIndex + 1) + "' to '" + str(migrationMethodIndex + 2) + "'")
|
173 | 182 | migrationFunctions[migrationMethodIndex]()
|
174 | 183 | pass
|
175 | 184 | pass
|
176 | 185 |
|
| 186 | + def _upgradeFrom9To10(self): |
| 187 | + self._logger.info(" Starting 9 -> 10") |
| 188 | + # What is changed: |
| 189 | + # - |
| 190 | + self._passMessageToClient("error", "DatabaseManager", |
| 191 | + "Could not upgrade database scheme V1 to V2. See OctoPrint.log for details!") |
| 192 | + self._logger.info(" Successfully 9 -> 10") |
| 193 | + |
| 194 | + def _upgradeFrom8To9(self): |
| 195 | + self._logger.info(" Starting 8 -> 9") |
| 196 | + # What is changed: |
| 197 | + # - |
| 198 | + self._passMessageToClient("error", "DatabaseManager", |
| 199 | + "Could not upgrade database scheme V1 to V2. See OctoPrint.log for details!") |
| 200 | + self._logger.info(" Successfully 8 -> 9") |
| 201 | + |
| 202 | + def _upgradeFrom7To8(self): |
| 203 | + self._logger.info(" Starting 7 -> 8") |
| 204 | + # What is changed: |
| 205 | + # - |
| 206 | + self._passMessageToClient("error", "DatabaseManager", |
| 207 | + "Could not upgrade database scheme V1 to V2. See OctoPrint.log for details!") |
| 208 | + self._logger.info(" Successfully 7 -> 8") |
| 209 | + |
| 210 | + def _upgradeFrom6To7(self): |
| 211 | + self._logger.info(" Starting 6 -> 7") |
| 212 | + # What is changed: |
| 213 | + # - Recalculate remaining weight |
| 214 | + |
| 215 | + self._logger.info(" try to calculate remaining weight.") |
| 216 | + |
| 217 | + # Calculate the remaining weight for all current spools |
| 218 | + with self._database.atomic() as transaction: # Opens new transaction. |
| 219 | + |
| 220 | + try: |
| 221 | + allSpoolModels = self.loadAllSpoolsByQuery(None) |
| 222 | + if (allSpoolModels != None): |
| 223 | + for spoolModel in allSpoolModels: |
| 224 | + totalWeight = spoolModel.totalWeight |
| 225 | + usedWeight = spoolModel.usedWeight |
| 226 | + remainingWeight = Transformer.calculateRemainingWeight(usedWeight, totalWeight) |
| 227 | + if (remainingWeight != None): |
| 228 | + spoolModel.remainingWeight = remainingWeight |
| 229 | + spoolModel.save() |
| 230 | + |
| 231 | + localSchemeVersionFromDatabaseModel = PluginMetaDataModel.get( |
| 232 | + PluginMetaDataModel.key == PluginMetaDataModel.KEY_DATABASE_SCHEME_VERSION) |
| 233 | + localSchemeVersionFromDatabaseModel.value = "7" |
| 234 | + localSchemeVersionFromDatabaseModel.save() |
| 235 | + |
| 236 | + # do expicit commit |
| 237 | + transaction.commit() |
| 238 | + except: |
| 239 | + # Because this block of code is wrapped with "atomic", a |
| 240 | + # new transaction will begin automatically after the call |
| 241 | + # to rollback(). |
| 242 | + transaction.rollback() |
| 243 | + self._logger.exception("Could not calculate remainingWeight during scheme update from 6 To 7:" ) |
| 244 | + |
| 245 | + return |
| 246 | + pass |
| 247 | + self._logger.info(" Successfully 6 -> 7") |
| 248 | + |
| 249 | + |
| 250 | + |
177 | 251 | def _upgradeFrom5To6(self):
|
178 | 252 | self._logger.info(" Starting 5 -> 6")
|
179 | 253 | # What is changed:
|
@@ -588,16 +662,18 @@ def connectoToDatabase(self, withMetaCheck=False, sendErrorPopUp=True) :
|
588 | 662 |
|
589 | 663 | # build connection
|
590 | 664 | try:
|
591 |
| - self._logger.info("Databaseconnection with...") |
592 |
| - self._logger.info(self._databaseSettings) |
| 665 | + if (self.sqlLoggingEnabled): |
| 666 | + self._logger.info("Databaseconnection with...") |
| 667 | + self._logger.info(self._databaseSettings) |
593 | 668 | self._database = self._buildDatabaseConnection()
|
594 | 669 |
|
595 | 670 | # connect to Database
|
596 | 671 | DatabaseManager.db = self._database
|
597 | 672 | self._database.bind(MODELS)
|
598 | 673 |
|
599 | 674 | self._database.connect()
|
600 |
| - self._logger.info("Database connection succesful. Checking Scheme versions") |
| 675 | + if (self.sqlLoggingEnabled): |
| 676 | + self._logger.info("Database connection succesful. Checking Scheme versions") |
601 | 677 | # TODO do I realy need to check the meta-infos in the connect function
|
602 | 678 | # schemeVersionFromPlugin = str(CURRENT_DATABASE_SCHEME_VERSION)
|
603 | 679 | # schemeVersionFromDatabaseModel = str(PluginMetaDataModel.get(PluginMetaDataModel.key == PluginMetaDataModel.KEY_DATABASE_SCHEME_VERSION).value)
|
@@ -889,9 +965,9 @@ def databaseCallMethode():
|
889 | 965 |
|
890 | 966 | if ("displayName" == sortColumn):
|
891 | 967 | if ("desc" == sortOrder):
|
892 |
| - myQuery = myQuery.order_by(SpoolModel.displayName.desc()) |
| 968 | + myQuery = myQuery.order_by(fn.Lower(SpoolModel.displayName).desc()) |
893 | 969 | else:
|
894 |
| - myQuery = myQuery.order_by(SpoolModel.displayName.asc()) |
| 970 | + myQuery = myQuery.order_by(fn.Lower(SpoolModel.displayName).asc()) |
895 | 971 | if ("lastUse" == sortColumn):
|
896 | 972 | if ("desc" == sortOrder):
|
897 | 973 | myQuery = myQuery.order_by(SpoolModel.lastUse.desc())
|
@@ -977,6 +1053,15 @@ def databaseCallMethode():
|
977 | 1053 |
|
978 | 1054 | return databaseId
|
979 | 1055 |
|
| 1056 | + # always recalculate the remaing weight (total - used) |
| 1057 | + totalWeight = spoolModel.totalWeight |
| 1058 | + usedWeight = spoolModel.usedWeight |
| 1059 | + if (totalWeight != None): |
| 1060 | + if (usedWeight == None): |
| 1061 | + usedWeight = 0.0 |
| 1062 | + remainingWeight = Transformer.calculateRemainingWeight(usedWeight, totalWeight) |
| 1063 | + spoolModel.remainingWeight = remainingWeight |
| 1064 | + |
980 | 1065 | return self._handleReusableConnection(databaseCallMethode, withReusedConnection, "saveSpool")
|
981 | 1066 |
|
982 | 1067 | def countSpoolsByQuery(self, withReusedConnection=False):
|
@@ -1030,15 +1115,14 @@ def databaseCallMethode():
|
1030 | 1115 | result = []
|
1031 | 1116 | myQuery = SpoolModel.select(SpoolModel.color, SpoolModel.colorName).distinct()
|
1032 | 1117 | for spool in myQuery:
|
1033 |
| - value = spool.color |
1034 |
| - if (value != None): |
| 1118 | + if (spool.color != None and spool.colorName): |
1035 | 1119 | colorInfo = {
|
1036 | 1120 | "colorId": spool.color + ";" + spool.colorName,
|
1037 | 1121 | "color": spool.color,
|
1038 | 1122 | "colorName": spool.colorName
|
1039 | 1123 | }
|
1040 | 1124 | result.append(colorInfo)
|
1041 |
| - return result; |
| 1125 | + return result |
1042 | 1126 |
|
1043 | 1127 | return self._handleReusableConnection(databaseCallMethode, withReusedConnection, "loadCatalogColors", set())
|
1044 | 1128 |
|
|
0 commit comments