NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

milestoneService.py (4715B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\skills\skillplan\milestone\milestoneService.py
      2 from __future__ import absolute_import
      3 import logging
      4 from collections import defaultdict
      5 import uthread
      6 from .milestoneController import BuildMilestonesFromRawData
      7 from skills.skillplan import skillPlanSignals
      8 import skills.skillplan.grpc.personalMilestoneRequest as personalMilestoneRequest
      9 import skills.skillplan.grpc.corpMilestoneRequest as corpMilestoneRequest
     10 from skills.skillplan.grpc.message_bus.corpMilestoneNoticeMessenger import CorpMilestoneNoticeMessenger
     11 from skills.skillplan.milestone.milestoneController import GetMilestoneController
     12 logger = logging.getLogger(__name__)
     13 
     14 class BaseSkillPlanMilestoneService(object):
     15     milestoneRequest = None
     16 
     17     def __init__(self):
     18         self.cache = defaultdict(dict)
     19         skillPlanSignals.on_deleted.connect(self.OnSkillPlanDeleted)
     20 
     21     def Get(self, skillPlanID, milestoneID):
     22         if milestoneID in self.GetMilestonesForSkillPlan(skillPlanID):
     23             return self.GetMilestonesForSkillPlan(skillPlanID)[milestoneID]
     24 
     25     def GetMilestonesForSkillPlan(self, skillPlanID):
     26         if skillPlanID not in self.cache:
     27             self._PrimeCacheForSkillPlan(skillPlanID)
     28         return self.cache[skillPlanID].copy()
     29 
     30     def ClearMilestonesForSkillPlan(self, skillPlanID):
     31         if skillPlanID in self.cache:
     32             del self.cache[skillPlanID]
     33 
     34     def _PrimeCacheForSkillPlan(self, skillPlanID):
     35         try:
     36             milestones = self.milestoneRequest.GetAll(skillPlanID)
     37             self.cache[skillPlanID] = {}
     38             for m in BuildMilestonesFromRawData(milestones):
     39                 if not m.IsValid():
     40                     self.milestoneRequest.Delete(m.milestoneID)
     41                 else:
     42                     self.cache[skillPlanID][m.milestoneID] = m
     43 
     44         except Exception as e:
     45             logger.exception(e)
     46 
     47     def _AddToCache(self, skillPlanID, milestoneController):
     48         self.cache[skillPlanID][milestoneController.GetID()] = milestoneController
     49 
     50     def _Create(self, skillPlanID, milestoneController):
     51         try:
     52             milestoneID = self.milestoneRequest.CreateMilestone(skillPlanID, milestoneController)
     53             milestoneController.SetMilestoneID(milestoneID)
     54             self._AddToCache(skillPlanID, milestoneController)
     55         except Exception as e:
     56             logger.exception(e)
     57 
     58     def _Delete(self, skillPlanID, milestoneID):
     59         try:
     60             self.milestoneRequest.Delete(milestoneID)
     61             if skillPlanID in self.cache and milestoneID in self.cache[skillPlanID]:
     62                 self._RemoveFromCache(skillPlanID, milestoneID)
     63         except Exception as e:
     64             logger.exception(e)
     65 
     66     def _RemoveFromCache(self, skillPlanID, milestoneID):
     67         self.cache[skillPlanID].pop(milestoneID, None)
     68 
     69     def _GetSkillPlanID(self, milestoneID):
     70         for skillPlanID, milestoneIDs in self.cache.iteritems():
     71             if milestoneID in milestoneIDs:
     72                 return skillPlanID
     73 
     74     def SaveMilestones(self, skillPlanID, milestoneControllers):
     75         addCalls = []
     76         for milestoneController in milestoneControllers:
     77             addCalls.append((self._Create, (skillPlanID, milestoneController)))
     78 
     79         uthread.parallel(addCalls)
     80 
     81     def DeleteMilestones(self, skillPlanID, milestoneIDs):
     82         deleteCalls = [ (self._Delete, (skillPlanID, milestoneID)) for milestoneID in milestoneIDs ]
     83         uthread.parallel(deleteCalls)
     84 
     85     def OnSkillPlanDeleted(self, skillPlanID):
     86         if skillPlanID in self.cache:
     87             self.ClearMilestonesForSkillPlan(skillPlanID)
     88 
     89 
     90 class PersonalSkillPlanMilestoneService(BaseSkillPlanMilestoneService):
     91     milestoneRequest = personalMilestoneRequest
     92 
     93 
     94 class CorpSkillPlanMilestoneService(BaseSkillPlanMilestoneService):
     95     milestoneRequest = corpMilestoneRequest
     96 
     97     def __init__(self):
     98         super(CorpSkillPlanMilestoneService, self).__init__()
     99         self.corpMilestoneMessenger = CorpMilestoneNoticeMessenger(sm.GetService('publicGatewaySvc'))
    100         self.corpMilestoneMessenger.on_created.connect(self.OnRemoteCorpMilestoneCreated)
    101         self.corpMilestoneMessenger.on_deleted.connect(self.OnRemoteCorpMilestoneDeleted)
    102 
    103     def OnRemoteCorpMilestoneCreated(self, skillPlanID, milestoneID, milestoneType, milestoneInfo):
    104         controller = GetMilestoneController(milestoneID, milestoneType, milestoneInfo)
    105         self._AddToCache(skillPlanID, controller)
    106 
    107     def OnRemoteCorpMilestoneDeleted(self, milestoneID):
    108         skillPlanID = self._GetSkillPlanID(milestoneID)
    109         if skillPlanID:
    110             self._RemoveFromCache(skillPlanID, milestoneID)