killRightTracker.py (2398B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\common\lib\killRightTracker.py 2 from collections import defaultdict 3 4 class KillRightTracker(object): 5 6 def __init__(self, fetcher, getTimeFunc, cacheTime): 7 self.killRightsByToID = {} 8 self.FetchKillRights = fetcher 9 self.GetTime = getTimeFunc 10 self.cacheTime = cacheTime 11 12 def GetInvalidKillRights(self, toIDs): 13 return [ toID for toID in toIDs if not self.IsDataValid(toID) ] 14 15 def GetKillRights(self, toIDs, *validIDs): 16 toIDsToFetch = self.GetInvalidKillRights(toIDs) 17 if toIDsToFetch: 18 newKillRights = self.FetchKillRights(toIDsToFetch) 19 self.CacheKillRights(newKillRights, toIDsToFetch) 20 ret = [] 21 for toID in toIDs: 22 try: 23 ret.extend([ killRight for killRight in self.killRightsByToID[toID][1].itervalues() if killRight.restrictedTo is None or killRight.restrictedTo in validIDs ]) 24 except KeyError: 25 pass 26 27 return ret 28 29 def CacheKillRights(self, newKillRights, toIDs): 30 killRightsByToID = defaultdict(dict) 31 for killRight in newKillRights: 32 killRightsByToID[killRight.toID][killRight.killRightID] = killRight 33 34 currentTime = self.GetTime() 35 for toID in toIDs: 36 self.killRightsByToID[toID] = (currentTime, killRightsByToID[toID]) 37 38 def OnKillRightAdded(self, killRight): 39 if killRight.toID not in self.killRightsByToID: 40 self.killRightsByToID[killRight.toID] = (self.GetTime(), {}) 41 self.killRightsByToID[killRight.toID][1][killRight.killRightID] = killRight 42 43 def OnKillRightsAdded(self, killRights): 44 for killRight in killRights: 45 self.OnKillRightAdded(killRight) 46 47 def IsDataValid(self, toID): 48 if toID not in self.killRightsByToID: 49 return False 50 lastUpdateTime = self.killRightsByToID[toID][0] 51 if lastUpdateTime + self.cacheTime < self.GetTime(): 52 return False 53 return True 54 55 def GetKillRightsFromCache(self, toID): 56 try: 57 return self.killRightsByToID[toID][1] 58 except KeyError: 59 return [] 60 61 def OnKillRightRemoved(self, toID, killRightID): 62 try: 63 del self.killRightsByToID[toID][1][killRightID] 64 except KeyError: 65 pass