Improve object initialization and add support for logging the errors.

This commit is contained in:
blitzmann
2015-07-05 00:31:52 -04:00
parent aaa60cbc14
commit 7959593c6c
6 changed files with 104 additions and 86 deletions

View File

@@ -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):

View File

@@ -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):

View File

@@ -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):

View File

@@ -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

View File

@@ -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):

View File

@@ -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):