MCPcopy Index your code
hub / github.com/pyfa-org/Pyfa / findCheaperReplacements

Method findCheaperReplacements

service/price.py:200–229  ·  view source on GitHub ↗
(self, items, callback, fetchTimeout=10)

Source from the content-addressed store, hash-verified

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

Callers 2

exportMultiBuyFunction · 0.80
optimizeFitPriceMethod · 0.80

Calls 5

getPricesMethod · 0.95
getReplacementsMethod · 0.80
valuesMethod · 0.80
getInstanceMethod · 0.45
keysMethod · 0.45

Tested by

no test coverage detected