Improve object initialization and add support for logging the errors.
This commit is contained in:
@@ -21,11 +21,17 @@ from eos.modifiedAttributeDict import ModifiedAttributeDict, ItemAttrShortcut
|
||||
from eos.effectHandlerHelpers import HandledItem
|
||||
from sqlalchemy.orm import reconstructor, validates
|
||||
import eos.db
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class Booster(HandledItem, ItemAttrShortcut):
|
||||
def __init__(self, item):
|
||||
self.__item = item
|
||||
self.__invalid = False
|
||||
|
||||
if self.isInvalid:
|
||||
raise ValueError("Passed item is not a Booster")
|
||||
|
||||
self.itemID = item.ID if item is not None else None
|
||||
self.active = True
|
||||
self.build()
|
||||
@@ -34,34 +40,32 @@ class Booster(HandledItem, ItemAttrShortcut):
|
||||
def init(self):
|
||||
"""Initialize a booster from the database and validate"""
|
||||
self.__item = None
|
||||
self.__invalid = False
|
||||
|
||||
if self.itemID:
|
||||
# if item does not exist, set invalid
|
||||
item = eos.db.getItem(self.itemID)
|
||||
if item is None:
|
||||
self.__invalid = True
|
||||
self.__item = item
|
||||
self.__item = eos.db.getItem(self.itemID)
|
||||
if self.__item is None:
|
||||
logger.error("Item (id: %d) does not exist", self.itemID)
|
||||
return
|
||||
|
||||
if self.isInvalid:
|
||||
logger.error("Item (id: %d) is not a Booser", self.itemID)
|
||||
return
|
||||
|
||||
self.build()
|
||||
|
||||
def build(self):
|
||||
if self.__item and self.__item.group.name != "Booster":
|
||||
self.__invalid = True
|
||||
|
||||
self.__itemModifiedAttributes = ModifiedAttributeDict()
|
||||
""" Build object. Assumes proper and valid item already set """
|
||||
self.__sideEffects = []
|
||||
self.__itemModifiedAttributes = ModifiedAttributeDict()
|
||||
self.__itemModifiedAttributes.original = self.__item.attributes
|
||||
self.__slot = self.__calculateSlot(self.__item)
|
||||
|
||||
if self.__item:
|
||||
self.__itemModifiedAttributes.original = self.__item.attributes
|
||||
self.__slot = self.__calculateSlot(self.__item)
|
||||
|
||||
for effect in self.__item.effects.itervalues():
|
||||
if effect.isType("boosterSideEffect"):
|
||||
s = SideEffect(self)
|
||||
s.effect = effect
|
||||
s.active = effect.ID in self.__activeSideEffectIDs
|
||||
self.__sideEffects.append(s)
|
||||
for effect in self.__item.effects.itervalues():
|
||||
if effect.isType("boosterSideEffect"):
|
||||
s = SideEffect(self)
|
||||
s.effect = effect
|
||||
s.active = effect.ID in self.__activeSideEffectIDs
|
||||
self.__sideEffects.append(s)
|
||||
|
||||
def iterSideEffects(self):
|
||||
return self.__sideEffects.__iter__()
|
||||
@@ -79,7 +83,7 @@ class Booster(HandledItem, ItemAttrShortcut):
|
||||
|
||||
@property
|
||||
def isInvalid(self):
|
||||
return self.__invalid
|
||||
return self.__item is None or self.__item.group.name != "Booster"
|
||||
|
||||
@property
|
||||
def slot(self):
|
||||
|
||||
@@ -21,14 +21,15 @@ from eos.modifiedAttributeDict import ModifiedAttributeDict, ItemAttrShortcut, C
|
||||
from eos.effectHandlerHelpers import HandledItem, HandledCharge
|
||||
from sqlalchemy.orm import validates, reconstructor
|
||||
import eos.db
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class Cargo(HandledItem, ItemAttrShortcut):
|
||||
|
||||
def __init__(self, item):
|
||||
"""Initialize cargo from the program"""
|
||||
self.__item = item
|
||||
self.__invalid = False
|
||||
self.itemID = item.ID if item is not None else None
|
||||
self.amount = 0
|
||||
self.__itemModifiedAttributes = ModifiedAttributeDict()
|
||||
@@ -38,18 +39,15 @@ class Cargo(HandledItem, ItemAttrShortcut):
|
||||
def init(self):
|
||||
"""Initialize cargo from the database and validate"""
|
||||
self.__item = None
|
||||
self.__invalid = False
|
||||
self.__itemModifiedAttributes = ModifiedAttributeDict()
|
||||
|
||||
if self.itemID:
|
||||
# if item does not exist, set invalid
|
||||
item = eos.db.getItem(self.itemID)
|
||||
if item is None:
|
||||
self.__invalid = True
|
||||
self.__item = item
|
||||
self.__item = eos.db.getItem(self.itemID)
|
||||
if self.__item is None:
|
||||
logger.error("Item (id: %d) does not exist", self.itemID)
|
||||
return
|
||||
|
||||
if self.__item:
|
||||
self.__itemModifiedAttributes.original = self.__item.attributes
|
||||
self.__itemModifiedAttributes = ModifiedAttributeDict()
|
||||
self.__itemModifiedAttributes.original = self.__item.attributes
|
||||
|
||||
@property
|
||||
def itemModifiedAttributes(self):
|
||||
@@ -57,7 +55,7 @@ class Cargo(HandledItem, ItemAttrShortcut):
|
||||
|
||||
@property
|
||||
def isInvalid(self):
|
||||
return self.__invalid
|
||||
return self.__item is None
|
||||
|
||||
@property
|
||||
def item(self):
|
||||
|
||||
@@ -21,6 +21,9 @@ from eos.modifiedAttributeDict import ModifiedAttributeDict, ItemAttrShortcut, C
|
||||
from eos.effectHandlerHelpers import HandledItem, HandledCharge
|
||||
from sqlalchemy.orm import validates, reconstructor
|
||||
import eos.db
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
DAMAGE_TYPES = ("em", "kinetic", "explosive", "thermal")
|
||||
@@ -29,47 +32,48 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
def __init__(self, item):
|
||||
"""Initialize a drone from the program"""
|
||||
self.__item = item
|
||||
self.__invalid = False
|
||||
|
||||
if self.isInvalid:
|
||||
raise ValueError("Passed item is not a Drone")
|
||||
|
||||
self.itemID = item.ID if item is not None else None
|
||||
self.amount = 0
|
||||
self.amountActive = 0
|
||||
self.projected = False
|
||||
self.build()
|
||||
|
||||
|
||||
@reconstructor
|
||||
def init(self):
|
||||
"""Initialize a drone from the database and validate"""
|
||||
self.__item = None
|
||||
self.__invalid = False
|
||||
|
||||
if self.itemID:
|
||||
# if item does not exist, set invalid
|
||||
item = eos.db.getItem(self.itemID)
|
||||
if item is None:
|
||||
self.__invalid = True
|
||||
self.__item = item
|
||||
self.__item = eos.db.getItem(self.itemID)
|
||||
if self.__item is None:
|
||||
logger.error("Item (id: %d) does not exist", self.itemID)
|
||||
return
|
||||
|
||||
if self.isInvalid:
|
||||
logger.error("Item (id: %d) is not a Drone", self.itemID)
|
||||
return
|
||||
|
||||
self.build()
|
||||
|
||||
def build(self):
|
||||
if self.__item and self.__item.category.name != "Drone":
|
||||
self.__invalid = True
|
||||
|
||||
""" Build object. Assumes proper and valid item already set """
|
||||
self.__charge = None
|
||||
self.__dps = None
|
||||
self.__volley = None
|
||||
self.__miningyield = None
|
||||
self.__itemModifiedAttributes = ModifiedAttributeDict()
|
||||
self.__chargeModifiedAttributes = ModifiedAttributeDict()
|
||||
self.__itemModifiedAttributes.original = self.__item.attributes
|
||||
|
||||
if self.__item:
|
||||
self.__itemModifiedAttributes.original = self.__item.attributes
|
||||
chargeID = self.getModifiedItemAttr("entityMissileTypeID")
|
||||
if chargeID is not None:
|
||||
charge = eos.db.getItem(int(chargeID))
|
||||
self.__charge = charge
|
||||
self.__chargeModifiedAttributes.original = charge.attributes
|
||||
self.__chargeModifiedAttributes = ModifiedAttributeDict()
|
||||
chargeID = self.getModifiedItemAttr("entityMissileTypeID")
|
||||
if chargeID is not None:
|
||||
charge = eos.db.getItem(int(chargeID))
|
||||
self.__charge = charge
|
||||
self.__chargeModifiedAttributes.original = charge.attributes
|
||||
|
||||
@property
|
||||
def itemModifiedAttributes(self):
|
||||
@@ -81,7 +85,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
|
||||
@property
|
||||
def isInvalid(self):
|
||||
return self.__invalid
|
||||
return self.__item is None or self.__item.category.name != "Drone"
|
||||
|
||||
@property
|
||||
def item(self):
|
||||
|
||||
@@ -74,7 +74,7 @@ class Fit(object):
|
||||
|
||||
@reconstructor
|
||||
def init(self):
|
||||
"""Initialize a drone from the database and validate"""
|
||||
"""Initialize a fit from the database and validate"""
|
||||
self.__ship = None
|
||||
self.__mode = None
|
||||
self.__invalid = False
|
||||
|
||||
@@ -21,11 +21,17 @@ from eos.modifiedAttributeDict import ModifiedAttributeDict, ItemAttrShortcut
|
||||
from eos.effectHandlerHelpers import HandledItem
|
||||
from sqlalchemy.orm import validates, reconstructor
|
||||
import eos.db
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class Implant(HandledItem, ItemAttrShortcut):
|
||||
def __init__(self, item):
|
||||
self.__item = item
|
||||
self.__invalid = False
|
||||
|
||||
if self.isInvalid:
|
||||
raise ValueError("Passed item is not an Implant")
|
||||
|
||||
self.itemID = item.ID if item is not None else None
|
||||
self.active = True
|
||||
self.build()
|
||||
@@ -33,26 +39,24 @@ class Implant(HandledItem, ItemAttrShortcut):
|
||||
@reconstructor
|
||||
def init(self):
|
||||
self.__item = None
|
||||
self.__invalid = False
|
||||
|
||||
if self.itemID:
|
||||
# if item does not exist, set invalid
|
||||
item = eos.db.getItem(self.itemID)
|
||||
if item is None:
|
||||
self.__invalid = True
|
||||
self.__item = item
|
||||
self.__item = eos.db.getItem(self.itemID)
|
||||
if self.__item is None:
|
||||
logger.error("Item (id: %d) does not exist", self.itemID)
|
||||
return
|
||||
|
||||
if self.isInvalid:
|
||||
logger.error("Item (id: %d) is not an Implant", self.itemID)
|
||||
return
|
||||
|
||||
self.build()
|
||||
|
||||
def build(self):
|
||||
if self.__item and self.__item.category.name != "Implant":
|
||||
self.__invalid = True
|
||||
|
||||
""" Build object. Assumes proper and valid item already set """
|
||||
self.__itemModifiedAttributes = ModifiedAttributeDict()
|
||||
|
||||
if self.__item:
|
||||
self.__itemModifiedAttributes.original = self.__item.attributes
|
||||
self.__slot = self.__calculateSlot(self.__item)
|
||||
self.__itemModifiedAttributes.original = self.__item.attributes
|
||||
self.__slot = self.__calculateSlot(self.__item)
|
||||
|
||||
@property
|
||||
def itemModifiedAttributes(self):
|
||||
@@ -60,7 +64,7 @@ class Implant(HandledItem, ItemAttrShortcut):
|
||||
|
||||
@property
|
||||
def isInvalid(self):
|
||||
return self.__invalid
|
||||
return self.__item is None or self.__item.category.name != "Implant"
|
||||
|
||||
@property
|
||||
def slot(self):
|
||||
|
||||
@@ -24,6 +24,9 @@ from eos.effectHandlerHelpers import HandledItem, HandledCharge
|
||||
from eos.enum import Enum
|
||||
from eos.mathUtils import floorFloat
|
||||
import eos.db
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class State(Enum):
|
||||
OFFLINE = -1
|
||||
@@ -52,8 +55,11 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
def __init__(self, item):
|
||||
"""Initialize a module from the program"""
|
||||
self.__item = item
|
||||
|
||||
if item is not None and self.isInvalid:
|
||||
raise ValueError("Passed item is not a Module")
|
||||
|
||||
self.__charge = None
|
||||
self.__invalid = False
|
||||
self.itemID = item.ID if item is not None else None
|
||||
self.projected = False
|
||||
self.state = State.ONLINE
|
||||
@@ -64,28 +70,28 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
"""Initialize a module from the database and validate"""
|
||||
self.__item = None
|
||||
self.__charge = None
|
||||
self.__invalid = False
|
||||
|
||||
# we need this early if module is invalid and returns early
|
||||
self.__slot = self.dummySlot
|
||||
|
||||
if self.itemID:
|
||||
# if item does not exist, set invalid
|
||||
item = eos.db.getItem(self.itemID)
|
||||
if item is None:
|
||||
self.__invalid = True
|
||||
self.__item = item
|
||||
self.__item = eos.db.getItem(self.itemID)
|
||||
if self.__item is None:
|
||||
logger.error("Item (id: %d) does not exist", self.itemID)
|
||||
return
|
||||
|
||||
if self.isInvalid:
|
||||
logger.error("Item (id: %d) is not a Module", self.itemID)
|
||||
return
|
||||
|
||||
if self.chargeID:
|
||||
# if charge does not exist, just ignore it. This doesn't remove it
|
||||
# from the database, but it will allow the fit to load and the user
|
||||
# to add another charge
|
||||
charge = eos.db.getItem(self.chargeID)
|
||||
if charge:
|
||||
self.__charge = charge
|
||||
self.__charge = eos.db.getItem(self.chargeID)
|
||||
|
||||
self.build()
|
||||
|
||||
def build(self):
|
||||
"""Builds internal module variables from both init's"""
|
||||
if self.__item and self.__item.category.name not in ("Module", "Subsystem") and self.__item.group.name != "Effect Beacon":
|
||||
self.__invalid = True
|
||||
""" Builds internal module variables from both init's """
|
||||
|
||||
if self.__charge and self.__charge.category.name != "Charge":
|
||||
self.__charge = None
|
||||
|
||||
@@ -131,7 +137,9 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
|
||||
|
||||
@property
|
||||
def isInvalid(self):
|
||||
return self.__invalid
|
||||
if self.isEmpty:
|
||||
return False
|
||||
return self.__item is None or (self.__item.category.name not in ("Module", "Subsystem") and self.__item.group.name != "Effect Beacon")
|
||||
|
||||
@property
|
||||
def numCharges(self):
|
||||
|
||||
Reference in New Issue
Block a user