diff --git a/eos/db/__init__.py b/eos/db/__init__.py index 09a092c81..789141435 100755 --- a/eos/db/__init__.py +++ b/eos/db/__init__.py @@ -66,7 +66,7 @@ from eos.db.saveddata.queries import getUser, getCharacter, getFit, getFitsWithS getCharacterList, getPrice, getDamagePatternList, getDamagePattern, \ getFitList, getFleetList, getFleet, save, remove, commit, add, \ getCharactersForUser, getMiscData, getSquadsIDsWithFitID, getWing, \ - getSquad, getBoosterFits + getSquad, getBoosterFits, getProjectedFits #If using in memory saveddata, you'll want to reflect it so the data structure is good. if config.saveddata_connectionstring == "sqlite:///:memory:": diff --git a/eos/db/saveddata/queries.py b/eos/db/saveddata/queries.py index 01c2888ce..ddb8d53ac 100755 --- a/eos/db/saveddata/queries.py +++ b/eos/db/saveddata/queries.py @@ -21,6 +21,7 @@ from eos.db.util import processEager, processWhere from eos.db import saveddata_session, sd_lock from eos.types import User, Character, Fit, Price, DamagePattern, Fleet, MiscData, Wing, Squad from eos.db.saveddata.fleet import squadmembers_table +from eos.db.saveddata.fit import projectedFits_table from sqlalchemy.sql import and_ import eos.config @@ -360,7 +361,15 @@ def getSquadsIDsWithFitID(fitID): return squads else: raise TypeError("Need integer as argument") - + +def getProjectedFits(fitID): + if isinstance(fitID, int): + with sd_lock: + filter = and_(projectedFits_table.c.sourceID == fitID, Fit.ID == projectedFits_table.c.victimID) + fits = saveddata_session.query(Fit).filter(filter).all() + return fits + else: + raise TypeError("Need integer as argument") def add(stuff): with sd_lock: diff --git a/service/fit.py b/service/fit.py index a1dfa4cd0..7f849cb37 100644 --- a/service/fit.py +++ b/service/fit.py @@ -162,6 +162,8 @@ class Fit(object): fit = eos.db.getFit(fitID) sFlt = Fleet.getInstance() sFlt.removeAssociatedFleetData(fit) + self.removeProjectedData(fitID) + eos.db.remove(fit) def copyFit(self, fitID): @@ -177,7 +179,15 @@ class Fit(object): fit = eos.db.getFit(fitID) fit.clear() return fit - + + def removeProjectedData(self, fitID): + '''Removes projection relation from ships that have fitID as projection. See GitHub issue #90''' + fit = eos.db.getFit(fitID) + fits = eos.db.getProjectedFits(fitID) + + for projectee in fits: + projectee.projectedFits.remove(fit) + def toggleFactorReload(self, fitID): if fitID is None: return None