reward_definition.py (4881B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\careergoals\client\reward_definition.py 2 import uuid 3 import logging 4 from careergoals.client.const import RewardType, RewardLabel 5 from careergoals.client.errors import RewardTypeNotFound 6 from eveProto import get_single_value_from_split_precision_message, split_precision 7 from utillib import KeyVal 8 from eveProto.generated.eve_public.career.goal_pb2 import Reward as RewardProto 9 from eveProto.generated.eve_public.career.goal_pb2 import RewardType as RewardTypeProto 10 from eveProto.generated.eve_public.career.goal_pb2 import ItemRewardType 11 from eveProto.generated.eve_public.inventory.generic_item_type_pb2 import Identifier as ItemTypeIdentifier 12 from eveProto.generated.eve_public.isk.isk_pb2 import Currency as IskCurrency 13 logger = logging.getLogger(__name__) 14 15 class RewardDefinition(object): 16 17 def __init__(self, reward_type, reward_label, quantity): 18 self._reward_type = reward_type 19 self._quantity = quantity 20 self._reward_label = reward_label 21 22 @property 23 def reward_type(self): 24 return self._reward_type 25 26 @property 27 def reward_label(self): 28 return self._reward_label 29 30 @property 31 def is_omega(self): 32 return self._reward_label == RewardLabel.OMEGA 33 34 @property 35 def quantity(self): 36 return self._quantity 37 38 @classmethod 39 def from_proto(cls, payload): 40 reward_type = RewardType.from_proto(payload.reward_type) 41 if reward_type == RewardType.TYPE_ID: 42 return RewardDefinitionTypeID.from_proto(payload) 43 if reward_type == RewardType.ISK: 44 return RewardDefinitionISK.from_proto(payload) 45 if reward_type == RewardType.SP: 46 return RewardDefinitionSP.from_proto(payload) 47 raise RewardTypeNotFound 48 49 @classmethod 50 def to_proto(cls, obj): 51 if obj.reward_type == RewardType.TYPE_ID: 52 return RewardDefinitionTypeID.to_proto(obj) 53 if obj.reward_type == RewardType.ISK: 54 return RewardDefinitionISK.to_proto(obj) 55 if obj.reward_type == RewardType.SP: 56 return RewardDefinitionSP.to_proto(obj) 57 raise RewardTypeNotFound 58 59 def __eq__(self, other): 60 return isinstance(other, self.__class__) and self.reward_label == other.reward_label and self.reward_type == other.reward_type and self.quantity == other.quantity 61 62 def __ne__(self, other): 63 return not self.__eq__(other) 64 65 def __str__(self): 66 return 'Type %s, Quantity %s, Label %s' % (self._reward_type, self._quantity, self._reward_label) 67 68 69 class RewardDefinitionISK(RewardDefinition): 70 71 def __init__(self, reward_label, quantity): 72 super(RewardDefinitionISK, self).__init__(RewardType.ISK, reward_label, quantity) 73 74 @classmethod 75 def from_proto(cls, payload): 76 return RewardDefinitionISK(reward_label=RewardLabel.from_proto(payload.reward_label), quantity=get_single_value_from_split_precision_message(payload.reward_type.isk)) 77 78 @classmethod 79 def to_proto(cls, obj): 80 units, nanos = split_precision(obj.quantity) 81 return RewardProto(reward_type=RewardTypeProto(isk=IskCurrency(units=units, nanos=nanos)), reward_label=RewardLabel.to_proto(obj.reward_label)) 82 83 84 class RewardDefinitionSP(RewardDefinition): 85 86 def __init__(self, reward_label, quantity): 87 super(RewardDefinitionSP, self).__init__(RewardType.SP, reward_label, quantity) 88 89 @classmethod 90 def from_proto(cls, payload): 91 return RewardDefinitionSP(reward_label=RewardLabel.from_proto(payload.reward_label), quantity=payload.reward_type.skill_points) 92 93 @classmethod 94 def to_proto(cls, obj): 95 return RewardProto(reward_type=RewardTypeProto(skill_points=obj.quantity), reward_label=RewardLabel.to_proto(obj.reward_label)) 96 97 98 class RewardDefinitionTypeID(RewardDefinition): 99 100 def __init__(self, reward_label, quantity, type_id): 101 super(RewardDefinitionTypeID, self).__init__(RewardType.TYPE_ID, reward_label, quantity) 102 self._type_id = type_id 103 104 @property 105 def type_id(self): 106 return self._type_id 107 108 def __eq__(self, other): 109 return super(RewardDefinitionTypeID, self).__eq__(other) and self.type_id == other.type_id 110 111 def __str__(self): 112 return '%s, Type ID %s' % (super(RewardDefinitionTypeID, self).__str__(), self.type_id) 113 114 @classmethod 115 def from_proto(cls, payload): 116 return RewardDefinitionTypeID(reward_label=RewardLabel.from_proto(payload.reward_label), quantity=payload.reward_type.item.quantity, type_id=payload.reward_type.item.identifier.sequential) 117 118 @classmethod 119 def to_proto(cls, obj): 120 return RewardProto(reward_type=RewardTypeProto(item=ItemRewardType(identifier=ItemTypeIdentifier(sequential=obj.type_id), quantity=obj.quantity)), reward_label=RewardLabel.to_proto(obj.reward_label))