Get rid of idea of "better" replacements
It turned out to be maintenance hell and it's just hard to find all the dual-action attributes (like crash vs GD sig attr, AB cycle time modification vs rep cycle time modification etc)
This commit is contained in:
@@ -796,12 +796,10 @@ class Market(object):
|
||||
filtered = set([item for item in items if self.getMetaGroupIdByItem(item) in metas])
|
||||
return filtered
|
||||
|
||||
def getReplacements(self, identity, includeBetter):
|
||||
def getReplacements(self, identity):
|
||||
item = self.getItem(identity)
|
||||
# We already store needed type IDs in database
|
||||
replTypeIDs = {int(i) for i in item.replaceSame.split(",") if i}
|
||||
if includeBetter:
|
||||
replTypeIDs.update({int(i) for i in item.replaceBetter.split(",") if i})
|
||||
replTypeIDs = {int(i) for i in item.replacements.split(",") if i}
|
||||
if not replTypeIDs:
|
||||
return ()
|
||||
# As replacements were generated without keeping track which items were published,
|
||||
|
||||
@@ -70,15 +70,15 @@ def exportMultiBuy(fit, options, callback):
|
||||
|
||||
if options[Options.OPTIMIZE_PRICES.value]:
|
||||
|
||||
def cb(replacements):
|
||||
def processCheaperMapCb(replacementsCheaper):
|
||||
updatedAmounts = {}
|
||||
for item, itemAmount in itemAmounts.items():
|
||||
_addItem(updatedAmounts, replacements.get(item, item), itemAmount)
|
||||
_addItem(updatedAmounts, replacementsCheaper.get(item, item), itemAmount)
|
||||
string = _prepareString(fit.ship.item, updatedAmounts)
|
||||
callback(string)
|
||||
|
||||
priceSvc = sPrc.getInstance()
|
||||
priceSvc.findCheaperReplacements(itemAmounts, cb, includeBetter=True)
|
||||
priceSvc.findCheaperReplacements(itemAmounts, processCheaperMapCb)
|
||||
else:
|
||||
string = _prepareString(fit.ship.item, itemAmounts)
|
||||
if callback:
|
||||
|
||||
@@ -201,14 +201,14 @@ class Price:
|
||||
pyfalog.debug("Clearing Prices")
|
||||
db.clearPrices()
|
||||
|
||||
def findCheaperReplacements(self, items, callback, includeBetter, fetchTimeout=10):
|
||||
def findCheaperReplacements(self, items, callback, fetchTimeout=10):
|
||||
sMkt = Market.getInstance()
|
||||
|
||||
replacementsAll = {} # All possible item replacements
|
||||
for item in items:
|
||||
if item in replacementsAll:
|
||||
continue
|
||||
itemRepls = sMkt.getReplacements(item, includeBetter)
|
||||
itemRepls = sMkt.getReplacements(item)
|
||||
if itemRepls:
|
||||
replacementsAll[item] = itemRepls
|
||||
itemsToFetch = {i for i in chain(replacementsAll.keys(), *replacementsAll.values())}
|
||||
@@ -230,16 +230,19 @@ class Price:
|
||||
validityOverride = 2 * 60 * 60
|
||||
self.getPrices(itemsToFetch, makeCheapMapCb, fetchTimeout=fetchTimeout, validityOverride=validityOverride)
|
||||
|
||||
def optimizeFitPrice(self, fit, callback, includeBetter, fetchTimeout=10):
|
||||
def optimizeFitPrice(self, fit, callback, fetchTimeout=10):
|
||||
|
||||
def updateFitCb(replacementsCheaper):
|
||||
changes = False
|
||||
for container in (fit.modules, fit.drones, fit.fighters, fit.implants, fit.boosters, fit.cargo):
|
||||
for mod in fit.modules:
|
||||
if mod.item in replacementsCheaper:
|
||||
mod.rebase(replacementsCheaper[mod.item])
|
||||
changes = True
|
||||
if mod.charge in replacementsCheaper:
|
||||
mod.charge = replacementsCheaper[mod.charge]
|
||||
changes = True
|
||||
for container in (fit.drones, fit.fighters, fit.implants, fit.boosters, fit.cargo):
|
||||
for obj in container:
|
||||
charge = getattr(obj, 'charge', None)
|
||||
if charge is not None and charge in replacementsCheaper:
|
||||
obj.charge = replacementsCheaper[charge]
|
||||
changes = True
|
||||
if obj.item in replacementsCheaper:
|
||||
obj.rebase(replacementsCheaper[obj.item])
|
||||
changes = True
|
||||
@@ -252,7 +255,7 @@ class Price:
|
||||
pyfalog.critical(e)
|
||||
|
||||
fitItems = {i for i in self.fitItemIter(fit) if i is not fit.ship.item}
|
||||
self.findCheaperReplacements(fitItems, updateFitCb, includeBetter, fetchTimeout=fetchTimeout)
|
||||
self.findCheaperReplacements(fitItems, updateFitCb, fetchTimeout=fetchTimeout)
|
||||
|
||||
|
||||
class PriceWorkerThread(threading.Thread):
|
||||
|
||||
Reference in New Issue
Block a user