goal_definition.py (7645B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\careergoals\client\goal_definition.py 2 import uuid 3 import careergoals.client.const as careerGoalsConst 4 from careergoals.client.const import RewardLabel 5 from careergoals.client.reward_definition import RewardDefinition 6 from eve.common.lib.appConst import MIN 7 from localization import GetByMessageID, GetByLabel 8 from eveProto.generated.eve_public.career.goal_pb2 import Attributes as GoalAttributes 9 from eveProto.generated.eve_public.localization.message_pb2 import Identifier as LocalizationIdentifier 10 from eveProto.generated.eve_public.ui.annotation_pb2 import Annotation 11 12 class GoalDefinition(object): 13 14 def __init__(self, identifier, name_msg_id, description_msg_id, target_value, group_id, sub_type, duration, aura_text_id, agency_link_text_id, agency_screen_id, video_id, order, threat, career, career_points, rewards): 15 self._goal_id = identifier 16 self._name_msg_id = name_msg_id 17 self._desc_msg_id = description_msg_id 18 self._target_value = target_value 19 self._group_id = group_id 20 self._sub_type = sub_type 21 self._duration = duration 22 self._aura_text_id = aura_text_id 23 self._agency_link_text_id = agency_link_text_id 24 self._agency_screen_id = agency_screen_id 25 self._video_id = video_id 26 self._order = order 27 self._threat = threat 28 self._career = career 29 self._career_points = career_points 30 self._rewards = rewards 31 self._name = None 32 self._description = None 33 34 @property 35 def goal_id(self): 36 return self._goal_id 37 38 @property 39 def sub_type(self): 40 return self._sub_type 41 42 @property 43 def name(self): 44 if not self._name: 45 self._name = GetByMessageID(self._name_msg_id) 46 return self._name 47 48 @property 49 def description(self): 50 if not self._description: 51 self._description = GetByMessageID(self._desc_msg_id) 52 return self._description 53 54 @property 55 def target_value(self): 56 return self._target_value 57 58 @property 59 def rewards(self): 60 return self._rewards 61 62 @property 63 def reward_labels(self): 64 reward_labels = set() 65 for r in self.rewards: 66 if r.reward_label not in reward_labels: 67 reward_labels.add(r.reward_label) 68 69 return reward_labels 70 71 @property 72 def omega_rewards(self): 73 return [ r for r in self._rewards if r.reward_label == RewardLabel.OMEGA ] 74 75 @property 76 def alpha_rewards(self): 77 return [ r for r in self._rewards if r.reward_label == RewardLabel.ALPHA ] 78 79 @property 80 def career(self): 81 return self._career 82 83 @property 84 def career_points(self): 85 return self._career_points 86 87 @property 88 def career_points_text(self): 89 return GetByLabel('UI/CareerPortal/NumCareerPoints', numPoints=self.career_points) 90 91 @property 92 def group_id(self): 93 return self._group_id 94 95 @property 96 def threat(self): 97 return self._threat 98 99 @property 100 def duration(self): 101 return self._duration 102 103 @property 104 def duration_text(self): 105 try: 106 value = int(self.duration) 107 from carbon.common.script.util.format import FmtDate 108 return FmtDate(value * MIN, 'ss') 109 except ValueError: 110 return '' 111 112 @property 113 def aura_text_id(self): 114 return self._aura_text_id 115 116 @property 117 def agency_link_text_id(self): 118 return self._agency_link_text_id 119 120 @property 121 def agency_screen_id(self): 122 return self._agency_screen_id 123 124 @property 125 def video_id(self): 126 return self._video_id 127 128 @property 129 def order(self): 130 return self._order 131 132 def has_video_id(self): 133 return self.video_id is not None and self.video_id != u'null' 134 135 @classmethod 136 def from_proto(cls, identifier, payload): 137 ui_annotations = payload.ui_annotations 138 GoalDefinition._sanitize_annotations(ui_annotations) 139 try: 140 order = int(GoalDefinition._find_annotation(ui_annotations, careerGoalsConst.GOAL_ANNOTATION_ORDER)) 141 except (TypeError, ValueError): 142 order = None 143 144 career = careerGoalsConst.get_career_path_id_from_proto_id(payload.career) 145 group_id = careerGoalsConst.get_career_path_group_id(career, GoalDefinition._find_annotation(ui_annotations, careerGoalsConst.GOAL_ANNOTATION_ACTIVITY_GROUP)) 146 return GoalDefinition(identifier=identifier, name_msg_id=payload.name.sequential, description_msg_id=payload.description.sequential, target_value=payload.target, group_id=group_id, sub_type=GoalDefinition._find_annotation(ui_annotations, careerGoalsConst.GOAL_ANNOTATION_GOAL_SUBTYPE), duration=GoalDefinition._find_annotation(ui_annotations, careerGoalsConst.GOAL_ANNOTATION_DURATION), aura_text_id=GoalDefinition._find_annotation(ui_annotations, careerGoalsConst.GOAL_ANNOTATION_AURA_TEXT_ID), agency_link_text_id=GoalDefinition._find_annotation(ui_annotations, careerGoalsConst.GOAL_ANNOTATION_AGENCY_LINK_TEXT_ID), agency_screen_id=GoalDefinition._find_annotation(ui_annotations, careerGoalsConst.GOAL_ANNOTATION_AGENCY_SCREEN_ID), video_id=GoalDefinition._find_annotation(ui_annotations, careerGoalsConst.GOAL_ANNOTATION_VIDEO), order=order, threat=payload.threat, career=career, career_points=payload.career_points, rewards=[ RewardDefinition.from_proto(x) for x in payload.rewards ]) 147 148 @classmethod 149 def to_proto(cls, obj): 150 group_id = careerGoalsConst.get_annotation_for_career_path_group_id(obj.career, obj.group_id) 151 ui_annotations = [] 152 ui_annotations.append(Annotation(key=careerGoalsConst.GOAL_ANNOTATION_ACTIVITY_GROUP, value=str(group_id))) 153 ui_annotations.append(Annotation(key=careerGoalsConst.GOAL_ANNOTATION_GOAL_SUBTYPE, value=str(obj.sub_type))) 154 ui_annotations.append(Annotation(key=careerGoalsConst.GOAL_ANNOTATION_DURATION, value=str(obj.duration))) 155 ui_annotations.append(Annotation(key=careerGoalsConst.GOAL_ANNOTATION_AURA_TEXT_ID, value=str(obj.aura_text_id))) 156 ui_annotations.append(Annotation(key=careerGoalsConst.GOAL_ANNOTATION_AGENCY_LINK_TEXT_ID, value=str(obj.agency_link_text_id))) 157 ui_annotations.append(Annotation(key=careerGoalsConst.GOAL_ANNOTATION_AGENCY_SCREEN_ID, value=str(obj.agency_screen_id))) 158 ui_annotations.append(Annotation(key=careerGoalsConst.GOAL_ANNOTATION_VIDEO, value=str(obj.video_id))) 159 return GoalAttributes(name=LocalizationIdentifier(sequential=obj._name_msg_id), description=LocalizationIdentifier(sequential=obj._desc_msg_id), target=obj.target_value, ui_annotations=ui_annotations, threat=obj.threat, career=careerGoalsConst.get_proto_id_from_career_path_id(obj.career), career_points=obj.career_points, rewards=[ RewardDefinition.to_proto(x) for x in obj.rewards ]) 160 161 def __eq__(self, other): 162 return isinstance(other, self.__class__) and getattr(other, 'goal_id', None) == self.goal_id 163 164 def __hash__(self): 165 return hash(str(self._goal_id)) 166 167 def __cmp__(self, other): 168 if self.order is None or other.order is None: 169 return 0 170 return cmp(self.order, other.order) 171 172 @staticmethod 173 def _sanitize_annotations(ui_annotations): 174 for annotation in ui_annotations: 175 annotation.value = ''.join(annotation.value.split()) 176 177 return ui_annotations 178 179 @staticmethod 180 def _find_annotation(annotations, key): 181 for each in annotations: 182 if each.key == key: 183 return each.value