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

campaignDebugger.py (8613B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\devtools\script\campaignDebugger.py
      2 import blue
      3 import uthread2
      4 from carbon.common.script.util.commonutils import StripTags
      5 from carbonui import Align
      6 from carbonui.control.combo import Combo
      7 from carbonui.control.contextMenu.menuData import MenuData
      8 from carbonui.control.scroll import Scroll
      9 from carbonui.control.window import Window
     10 from carbonui.util.sortUtil import SortListOfTuples
     11 from eve.client.script.ui.control.entries.generic import Generic
     12 from eve.client.script.ui.control.entries.util import GetFromClass
     13 from eve.client.script.ui.control.listgroup import ListGroup
     14 from jobboard.client import get_job_board_service, ProviderType
     15 from localization import GetByMessageID, IsValidMessageID
     16 
     17 class CampaignDebugger(Window):
     18     default_windowID = 'campaignDebugger'
     19     default_width = 500
     20     default_height = 500
     21     default_caption = 'Campaign Debugger'
     22 
     23     def ApplyAttributes(self, attributes):
     24         self.campaign_by_campaign_id = {}
     25         super(CampaignDebugger, self).ApplyAttributes(attributes)
     26         self.campaign_combo = Combo(parent=self.content, callback=self.load_campaign_info, align=Align.TOTOP)
     27         self.scroll = Scroll(parent=self.content)
     28         uthread2.StartTasklet(self.load_campaigns)
     29 
     30     def load_campaigns(self):
     31         from campaigns.client.api import get_campaigns_repository_v1
     32         repository = get_campaigns_repository_v1()
     33         current_campaigns_by_id = repository.get_data_for_all_current_campaigns()
     34         options = []
     35         for campaign_id, c in current_campaigns_by_id.iteritems():
     36             self.campaign_by_campaign_id[campaign_id.uuid] = c
     37             options.append((GetByMessageID(c.title), campaign_id.uuid))
     38 
     39         self.campaign_combo.LoadOptions(options)
     40 
     41     def load_campaign_info(self, combo, text, campaign_uuid, *args):
     42         campaign = self.campaign_by_campaign_id.get(campaign_uuid)
     43         scrollList = []
     44         entry = GetFromClass(ListGroup, {'label': 'Properties',
     45          'GetSubContent': self.GetPropertySubcontent,
     46          'id': 'campaignDebugger_Properties',
     47          'campaign': campaign})
     48         scrollList.append(entry)
     49         entry = GetFromClass(ListGroup, {'label': 'Annotations',
     50          'GetSubContent': self.GetAnnotationsSubcontent,
     51          'id': 'campaignDebugger_Annotations',
     52          'campaign': campaign})
     53         scrollList.append(entry)
     54         entry = GetFromClass(ListGroup, {'label': 'Current Objectives',
     55          'GetSubContent': self.GetCurrentObjectivesSubcontent,
     56          'id': 'campaignDebugger_CurrentObjectives',
     57          'campaign': campaign})
     58         scrollList.append(entry)
     59         self.scroll.Load(contentList=scrollList, headers=['name', 'value'], noContentHint='oops nothing here')
     60 
     61     def _get_value_and_msg_text(self, value):
     62         message_text = None
     63         value_text = value
     64         try:
     65             value = int(value)
     66             if IsValidMessageID(value) and value > 1000000:
     67                 message_text = StripTags(GetByMessageID(value))
     68                 message_text = message_text.replace('\r', '').replace('\n', '')
     69                 value_text = '%s <i>(%s)</i>' % (value_text, message_text)
     70             elif cfg.eveowners.GetIfExists(value) and value > 100000:
     71                 message_text = cfg.eveowners.Get(value).name
     72                 value_text = '%s <i>(%s)</i>' % (value_text, message_text)
     73         except Exception:
     74             pass
     75 
     76         return (value_text, message_text)
     77 
     78     def GetPropertySubcontent(self, nodedata, *args):
     79         scrollList = []
     80         all_properties = self.get_all_properties(nodedata.campaign)
     81         for name, value in all_properties.iteritems():
     82             value_text, message_text = self._get_value_and_msg_text(value)
     83             label = '%s<t>%s' % (name, value_text)
     84             entry = GetFromClass(Generic, {'label': label,
     85              'sublevel': 1,
     86              'GetMenu': self.CopyValues,
     87              'name': name,
     88              'value': value,
     89              'message_text': message_text})
     90             scrollList.append((name, entry))
     91 
     92         scrollList = SortListOfTuples(scrollList)
     93         return scrollList
     94 
     95     def GetAnnotationsSubcontent(self, nodedata, *args):
     96         scrollList = []
     97         annotations = nodedata.campaign.annotations
     98         for name, value in annotations.iteritems():
     99             value_text, message_text = self._get_value_and_msg_text(value)
    100             label = '%s<t>%s' % (name, value_text)
    101             entry = GetFromClass(Generic, {'label': label,
    102              'sublevel': 1,
    103              'GetMenu': self.CopyValues,
    104              'name': name,
    105              'value': value,
    106              'message_text': message_text})
    107             scrollList.append((name, entry))
    108 
    109         scrollList = SortListOfTuples(scrollList)
    110         return scrollList
    111 
    112     def GetCurrentObjectivesSubcontent(self, nodedata, *args):
    113         current_objectives = nodedata.campaign.current_objectives
    114         scrollList = []
    115         for obj in current_objectives:
    116             title = '%s (%s - %s)' % (GetByMessageID(obj.title), obj.title, obj.id.uuid)
    117             entry = GetFromClass(ListGroup, {'label': title,
    118              'GetSubContent': self.GetObjectiveSubcontent,
    119              'id': ('campaignDebugger_objective', obj.id),
    120              'objective': obj,
    121              'sublevel': 1,
    122              'MenuFunction': self.GetObjectiveMenu})
    123             scrollList.append((title, entry))
    124 
    125         scrollList = SortListOfTuples(scrollList)
    126         return scrollList
    127 
    128     def GetObjectiveMenu(self, node):
    129         job_id = '%s:%s' % (ProviderType.CAMPAIGNS, node.objective.id.uuid)
    130         svc = get_job_board_service()
    131         m = MenuData()
    132         m.AddEntry('Open Objective in AO', func=lambda : svc.open_job(job_id))
    133         return m
    134 
    135     def GetObjectiveSubcontent(self, nodedata, *args):
    136         scrollList = []
    137         objective = nodedata.objective
    138         all_properties = self.get_all_properties(objective)
    139         for name, value in all_properties.iteritems():
    140             value_text, message_text = self._get_value_and_msg_text(value)
    141             label = '%s<t>%s' % (name, value_text)
    142             entry = GetFromClass(Generic, {'label': label,
    143              'sublevel': 2,
    144              'GetMenu': self.CopyValues,
    145              'name': name,
    146              'value': value,
    147              'message_text': message_text})
    148             scrollList.append((name, entry))
    149 
    150         scrollList = SortListOfTuples(scrollList)
    151         entry = GetFromClass(ListGroup, {'label': 'Contribution method',
    152          'GetSubContent': self.GetContributionMethodSubdata,
    153          'id': ('campaignDebugger_objective_contribution', objective.id),
    154          'objective': objective,
    155          'sublevel': 2})
    156         scrollList.insert(0, entry)
    157         return scrollList
    158 
    159     def GetContributionMethodSubdata(self, nodedata, *args):
    160         scrollList = []
    161         contribution_method_configuration = nodedata.objective.contribution_method_configuration
    162         contribution_method = contribution_method_configuration.contribution_method
    163         parameter_configs = contribution_method_configuration.parameter_configs
    164         name = 'contribution method'
    165         value = contribution_method
    166         label = '%s<t>%s' % (name, value)
    167         entry = GetFromClass(Generic, {'label': label,
    168          'sublevel': 3,
    169          'GetMenu': self.CopyValues,
    170          'name': name,
    171          'value': value})
    172         scrollList.append(entry)
    173         for config in parameter_configs:
    174             key = config.key
    175             for v in config.values:
    176                 name = '%s.%s' % (key, v.value_type)
    177                 value = unicode(v.values)
    178                 label = '%s<t>%s' % (name, value)
    179                 entry = GetFromClass(Generic, {'label': label,
    180                  'sublevel': 3,
    181                  'GetMenu': self.CopyValues,
    182                  'name': name,
    183                  'value': value})
    184                 scrollList.append(entry)
    185 
    186         return scrollList
    187 
    188     def get_all_properties(self, obj):
    189         return {name:getattr(obj, name) for name, attr in vars(type(obj)).iteritems() if isinstance(attr, property)}
    190 
    191     def CopyValues(self, entry):
    192         node = entry.sr.node
    193         m = MenuData()
    194         m.AddEntry('Copy Name', func=lambda : blue.pyos.SetClipboardData(node.name))
    195         m.AddEntry('Copy Value', func=lambda : blue.pyos.SetClipboardData(unicode(node.value)))
    196         if node.message_text:
    197             m.AddEntry('Copy Message Text', func=lambda : blue.pyos.SetClipboardData(unicode(node.message_text)))
    198         return m