Add method which supposedly will update fit to optimize its price

This commit is contained in:
DarkPhoenix
2019-02-28 00:12:53 +03:00
parent af3a7553ed
commit d9941945e0
3 changed files with 27 additions and 3 deletions

View File

@@ -36,6 +36,7 @@ from eos.saveddata.ship import Ship as es_Ship
from service.character import Character
from service.damagePattern import DamagePattern
from service.fitDeprecated import FitDeprecated
from service.price import Price
from service.settings import SettingsProvider
from utils.deprecated import deprecated

View File

@@ -796,7 +796,7 @@ class Market(object):
filtered = set([item for item in items if self.getMetaGroupIdByItem(item) in metas])
return filtered
def getReplacements(self, identity, includeBetter=False):
def getReplacements(self, identity, includeBetter):
item = self.getItem(identity)
# We already store needed type IDs in database
replTypeIDs = {int(i) for i in item.replaceSame.split(",") if i}

View File

@@ -201,14 +201,14 @@ class Price:
pyfalog.debug("Clearing Prices")
db.clearPrices()
def findCheaperReplacements(self, items, callback, includeBetter=False, fetchTimeout=10):
def findCheaperReplacements(self, items, callback, includeBetter, fetchTimeout=10):
sMkt = Market.getInstance()
potential = {} # All possible item replacements
for item in items:
if item in potential:
continue
itemRepls = sMkt.getReplacements(item, includeBetter=includeBetter)
itemRepls = sMkt.getReplacements(item, includeBetter)
if itemRepls:
potential[item] = itemRepls
itemsToFetch = {i for i in chain(potential.keys(), *potential.values())}
@@ -230,6 +230,29 @@ class Price:
validityOverride = 2 * 60 * 60
self.getPrices(itemsToFetch, cb, fetchTimeout=fetchTimeout, validityOverride=validityOverride)
def optimizeFitPrice(self, fit, callback, includeBetter, fetchTimeout=10):
def cb(replacementMap):
changes = False
for fitobj in self.fitObjectIter(fit):
if fitobj.item in replacementMap:
fitobj.item = replacementMap[fitobj.item]
changes = True
charge = getattr(fitobj, 'charge', None)
if charge and charge in replacementMap:
fitobj.charge = replacementMap[charge]
changes = True
if changes:
Fit.getInstance().refreshFit(fit.ID)
try:
callback()
except Exception as e:
pyfalog.critical("Execution of callback from optimizeFitPrice failed.")
pyfalog.critical(e)
fitItems = {i for i in self.fitItemIter(fit) if i is not fit.ship.item}
self.findCheaperReplacements(fitItems, cb, includeBetter, fetchTimeout=fetchTimeout)
class PriceWorkerThread(threading.Thread):