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