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:
DarkPhoenix
2019-03-06 00:43:19 +03:00
parent 8641c41da6
commit 257df58c3a
8 changed files with 38 additions and 101 deletions

View File

@@ -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,

View File

@@ -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:

View File

@@ -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):