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