(self, items, callback, fetchTimeout=10)
| 198 | db.clearPrices() |
| 199 | |
| 200 | def findCheaperReplacements(self, items, callback, fetchTimeout=10): |
| 201 | sMkt = Market.getInstance() |
| 202 | |
| 203 | replacementsAll = {} # All possible item replacements |
| 204 | for item in items: |
| 205 | if item in replacementsAll: |
| 206 | continue |
| 207 | itemRepls = sMkt.getReplacements(item) |
| 208 | if itemRepls: |
| 209 | replacementsAll[item] = itemRepls |
| 210 | itemsToFetch = {i for i in chain(replacementsAll.keys(), *replacementsAll.values())} |
| 211 | |
| 212 | def makeCheapMapCb(requests): |
| 213 | # Decide what we are going to replace |
| 214 | replacementsCheaper = {} # Items which should be replaced |
| 215 | for replacee, replacers in replacementsAll.items(): |
| 216 | replacer = min(replacers, key=lambda i: i.price.price or math.inf) |
| 217 | if (replacer.price.price or math.inf) < (replacee.price.price or math.inf): |
| 218 | replacementsCheaper[replacee] = replacer |
| 219 | try: |
| 220 | callback(replacementsCheaper) |
| 221 | except (KeyboardInterrupt, SystemExit): |
| 222 | raise |
| 223 | except Exception as e: |
| 224 | pyfalog.critical("Execution of callback from findCheaperReplacements failed.") |
| 225 | pyfalog.critical(e) |
| 226 | |
| 227 | # Prices older than 2 hours have to be refetched |
| 228 | validityOverride = 2 * 60 * 60 |
| 229 | self.getPrices(itemsToFetch, makeCheapMapCb, fetchTimeout=fetchTimeout, validityOverride=validityOverride) |
| 230 | |
| 231 | |
| 232 |
no test coverage detected