Change the way we work with prices
This commit is contained in:
@@ -32,6 +32,4 @@ prices_table = Table("prices", saveddata_meta,
|
||||
Column("status", Integer, nullable=False))
|
||||
|
||||
|
||||
mapper(Price, prices_table, properties={
|
||||
"_Price__price": prices_table.c.price,
|
||||
})
|
||||
mapper(Price, prices_table)
|
||||
|
||||
@@ -19,41 +19,57 @@
|
||||
# ===============================================================================
|
||||
|
||||
|
||||
import time
|
||||
from enum import IntEnum, unique
|
||||
from time import time
|
||||
|
||||
from logbook import Logger
|
||||
|
||||
|
||||
VALIDITY = 24 * 60 * 60 # Price validity period, 24 hours
|
||||
REREQUEST = 4 * 60 * 60 # Re-request delay for failed fetches, 4 hours
|
||||
TIMEOUT = 15 * 60 # Network timeout delay for connection issues, 15 minutes
|
||||
|
||||
|
||||
pyfalog = Logger(__name__)
|
||||
|
||||
|
||||
@unique
|
||||
class PriceStatus(IntEnum):
|
||||
notFetched = 0
|
||||
success = 1
|
||||
fail = 2
|
||||
notSupported = 3
|
||||
initialized = 0
|
||||
notSupported = 1
|
||||
fetchSuccess = 2
|
||||
fetchFail = 3
|
||||
fetchTimeout = 4
|
||||
|
||||
|
||||
class Price(object):
|
||||
def __init__(self, typeID):
|
||||
self.typeID = typeID
|
||||
self.time = 0
|
||||
self.__price = 0
|
||||
self.status = PriceStatus.notFetched
|
||||
self.price = 0
|
||||
self.status = PriceStatus.initialized
|
||||
|
||||
@property
|
||||
def isValid(self):
|
||||
return self.time >= time.time()
|
||||
|
||||
@property
|
||||
def price(self):
|
||||
if self.status != PriceStatus.success:
|
||||
return 0
|
||||
# Always attempt to update prices which were just initialized, and prices
|
||||
# of unsupported items (maybe we start supporting them at some point)
|
||||
if self.status in (PriceStatus.initialized, PriceStatus.notSupported):
|
||||
return False
|
||||
elif self.status == PriceStatus.fetchSuccess:
|
||||
return time() <= self.time + VALIDITY
|
||||
elif self.status == PriceStatus.fetchFail:
|
||||
return time() <= self.time + REREQUEST
|
||||
elif self.status == PriceStatus.fetchTimeout:
|
||||
return time() <= self.time + TIMEOUT
|
||||
else:
|
||||
return self.__price or 0
|
||||
return False
|
||||
|
||||
@price.setter
|
||||
def price(self, price):
|
||||
self.__price = price
|
||||
def update(self, status, price=0):
|
||||
# Keep old price if we failed to fetch new one
|
||||
if status in (PriceStatus.fetchFail, PriceStatus.fetchTimeout):
|
||||
price = self.price
|
||||
elif status != PriceStatus.fetchSuccess:
|
||||
price = 0
|
||||
self.time = time()
|
||||
self.price = price
|
||||
self.status = status
|
||||
|
||||
Reference in New Issue
Block a user