diff --git a/eos/gamedata.py b/eos/gamedata.py index 31e6f262e..d32edf6e9 100644 --- a/eos/gamedata.py +++ b/eos/gamedata.py @@ -239,7 +239,7 @@ class Item(EqBase): self.__offensive = None self.__assistive = None self.__overrides = None - self.__price = None + self.__priceObj = None @property def attributes(self): @@ -446,37 +446,47 @@ class Item(EqBase): @property def price(self): + priceObj = self.priceObj + if not priceObj: + return 0 + else: + return priceObj.price + + @property + def priceObj(self): + if not self.marketGroupID: + return None # todo: use `from sqlalchemy import inspect` instead (mac-deprecated doesn't have inspect(), was imp[lemented in 0.8) - if self.__price is not None and getattr(self.__price, '_sa_instance_state', None) and self.__price._sa_instance_state.deleted: + if self.__priceObj is not None and getattr(self.__priceObj, '_sa_instance_state', None) and self.__priceObj._sa_instance_state.deleted: pyfalog.debug("Price data for {} was deleted (probably from a cache reset), resetting object".format(self.ID)) - self.__price = None + self.__priceObj = None - if self.__price is None: + if self.__priceObj is None: db_price = eos.db.getPrice(self.ID) # do not yet have a price in the database for this item, create one if db_price is None: pyfalog.debug("Creating a price for {}".format(self.ID)) - self.__price = types_Price(self.ID) - eos.db.add(self.__price) + self.__priceObj = types_Price(self.ID) + eos.db.add(self.__priceObj) # Commented out by DarkPhoenix: it caused issues when opening stats for item with many # variations, as each commit takes ~50 ms, for items with 30 variations time to open stats # window could reach 2 seconds. Hopefully just adding it is sufficient. # eos.db.commit() else: - self.__price = db_price + self.__priceObj = db_price - return self.__price + return self.__priceObj @property def isAbyssal(self): if Item.ABYSSAL_TYPES is None: - Item.getAbyssalYypes() + Item.getAbyssalTypes() return self.ID in Item.ABYSSAL_TYPES @classmethod - def getAbyssalYypes(cls): + def getAbyssalTypes(cls): cls.ABYSSAL_TYPES = eos.db.getAbyssalTypes() @property diff --git a/gui/builtinItemStatsViews/itemCompare.py b/gui/builtinItemStatsViews/itemCompare.py index c1c16fe06..3981265f1 100644 --- a/gui/builtinItemStatsViews/itemCompare.py +++ b/gui/builtinItemStatsViews/itemCompare.py @@ -133,7 +133,7 @@ class ItemCompare(wx.Panel): except IndexError: # Price if sort == len(self.attrs) + 1: - func = lambda i: i.price.price if i.price.price != 0 else float("Inf") + func = lambda i: i.price if i.price != 0 else float("Inf") # Something else else: self.sortReverse = False @@ -168,7 +168,7 @@ class ItemCompare(wx.Panel): self.paramList.SetItem(i, x + 1, valueUnit) # Add prices - self.paramList.SetItem(i, len(self.attrs) + 1, formatAmount(item.price.price, 3, 3, 9, currency=True)) + self.paramList.SetItem(i, len(self.attrs) + 1, formatAmount(item.price, 3, 3, 9, currency=True) if item.price else "") self.paramList.RefreshRows() self.Layout() diff --git a/gui/builtinStatsViews/priceViewFull.py b/gui/builtinStatsViews/priceViewFull.py index 767ad958f..c2cb05f7d 100644 --- a/gui/builtinStatsViews/priceViewFull.py +++ b/gui/builtinStatsViews/priceViewFull.py @@ -100,32 +100,32 @@ class PriceViewFull(StatsView): implant_price = 0 if fit: - ship_price = fit.ship.item.price.price + ship_price = fit.ship.item.price if fit.modules: for module in fit.modules: if not module.isEmpty: - module_price += module.item.price.price + module_price += module.item.price if fit.drones: for drone in fit.drones: - drone_price += drone.item.price.price * drone.amount + drone_price += drone.item.price * drone.amount if fit.fighters: for fighter in fit.fighters: - fighter_price += fighter.item.price.price * fighter.amountActive + fighter_price += fighter.item.price * fighter.amountActive if fit.cargo: for cargo in fit.cargo: - cargo_price += cargo.item.price.price * cargo.amount + cargo_price += cargo.item.price * cargo.amount if fit.boosters: for booster in fit.boosters: - booster_price += booster.item.price.price + booster_price += booster.item.price if fit.implants: for implant in fit.implants: - implant_price += implant.item.price.price + implant_price += implant.item.price total_price = 0 diff --git a/gui/builtinStatsViews/priceViewMinimal.py b/gui/builtinStatsViews/priceViewMinimal.py index 8d6a5ce83..fb9877690 100644 --- a/gui/builtinStatsViews/priceViewMinimal.py +++ b/gui/builtinStatsViews/priceViewMinimal.py @@ -94,32 +94,32 @@ class PriceViewMinimal(StatsView): implant_price = 0 if fit: - ship_price = fit.ship.item.price.price + ship_price = fit.ship.item.price if fit.modules: for module in fit.modules: if not module.isEmpty: - module_price += module.item.price.price + module_price += module.item.price if fit.drones: for drone in fit.drones: - drone_price += drone.item.price.price * drone.amount + drone_price += drone.item.price * drone.amount if fit.fighters: for fighter in fit.fighters: - fighter_price += fighter.item.price.price * fighter.amountActive + fighter_price += fighter.item.price * fighter.amountActive if fit.cargo: for cargo in fit.cargo: - cargo_price += cargo.item.price.price * cargo.amount + cargo_price += cargo.item.price * cargo.amount if fit.boosters: for booster in fit.boosters: - booster_price += booster.item.price.price + booster_price += booster.item.price if fit.implants: for implant in fit.implants: - implant_price += implant.item.price.price + implant_price += implant.item.price fitting_price = module_price diff --git a/gui/builtinViewColumns/price.py b/gui/builtinViewColumns/price.py index a68614b83..65ebbfb36 100644 --- a/gui/builtinViewColumns/price.py +++ b/gui/builtinViewColumns/price.py @@ -45,13 +45,19 @@ class Price(ViewColumn): if stuff.isEmpty: return "" - price = stuff.item.price + priceObj = stuff.item.priceObj - if not price or not price.isValid: + if not priceObj: + return "" + + if not priceObj.isValid: return False # Fetch actual price as float to not modify its value on Price object - price = price.price + price = priceObj.price + + if price == 0: + return "" if isinstance(stuff, Drone) or isinstance(stuff, Cargo): price *= stuff.amount diff --git a/service/marketSources/evemarketer.py b/service/marketSources/evemarketer.py index a2728ddfb..2418d10c5 100644 --- a/service/marketSources/evemarketer.py +++ b/service/marketSources/evemarketer.py @@ -28,7 +28,7 @@ from service.price import Price, VALIDITY pyfalog = Logger(__name__) -class EveCentral(object): +class EveMarketer(object): name = "evemarketer" @@ -67,4 +67,4 @@ class EveCentral(object): del priceMap[typeID] -Price.register(EveCentral) +Price.register(EveMarketer) diff --git a/service/price.py b/service/price.py index 204db764d..7adb5120a 100644 --- a/service/price.py +++ b/service/price.py @@ -167,15 +167,16 @@ class Price(object): sMkt = Market.getInstance() item = sMkt.getItem(objitem) - return item.price.price + return item.price def getPrices(self, objitems, callback, waitforthread=False): """Get prices for multiple typeIDs""" requests = [] sMkt = Market.getInstance() for objitem in objitems: - item = sMkt.getItem(objitem) - requests.append(item.price) + priceobj = sMkt.getItem(objitem).priceObj + if priceobj: + requests.append(priceobj) def cb(): try: @@ -197,6 +198,7 @@ class Price(object): class PriceWorkerThread(threading.Thread): + def __init__(self): threading.Thread.__init__(self) self.name = "PriceWorker"