trigger.py (5837B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\trigger.py 2 from campaigns.client.v2.data_model.campaign_parameters import ParameterConfiguration 3 from campaigns.client.v2.data_model.ui_definition import UIDefinition 4 5 class MaxFires(object): 6 7 def __init__(self, unlimited, count): 8 self._unlimited = unlimited 9 self._count = count 10 11 @property 12 def unlimited(self): 13 return self._unlimited 14 15 @property 16 def count(self): 17 return self._count 18 19 @classmethod 20 def from_proto(cls, max_fires): 21 setting = max_fires.WhichOneof('setting') 22 if setting == 'max_fires': 23 return MaxFires(unlimited=False, count=max_fires.max_fires) 24 return MaxFires(unlimited=setting == 'unlimited', count=None) 25 26 def __eq__(self, other): 27 if not isinstance(other, MaxFires): 28 raise NotImplementedError 29 return self.unlimited == other.unlimited and self.count == other.count 30 31 def __ne__(self, other): 32 return not self.__eq__(other) 33 34 def __repr__(self): 35 return '<%s %r>' % (self.__class__.__name__, self.__dict__) 36 37 38 class TriggerConfiguration(object): 39 40 def __init__(self, key, ui_definition): 41 self._key = key 42 self._ui_definition = ui_definition 43 44 @property 45 def key(self): 46 return self._key 47 48 @property 49 def ui_definition(self): 50 return self._ui_definition 51 52 def __eq__(self, other): 53 if type(other) is not type(self): 54 return NotImplemented 55 return self.__dict__ == other.__dict__ 56 57 def __ne__(self, other): 58 result = self.__eq__(other) 59 if result is NotImplemented: 60 return result 61 return not result 62 63 def __repr__(self): 64 return '<%s %r>' % (self.__class__.__name__, self.__dict__) 65 66 67 class ImmediateTrigger(TriggerConfiguration): 68 69 @classmethod 70 def from_proto(cls, configuration): 71 return ImmediateTrigger(configuration.key, UIDefinition.from_proto(configuration.ui)) 72 73 74 class RelativeScheduleTrigger(TriggerConfiguration): 75 76 def __init__(self, key, ui_definition, trigger_datetime): 77 super(RelativeScheduleTrigger, self).__init__(key, ui_definition) 78 self._trigger_datetime = trigger_datetime 79 80 @property 81 def trigger_datetime(self): 82 return self._trigger_datetime 83 84 @classmethod 85 def from_proto(cls, configuration): 86 trigger_datetime = None 87 if configuration.HasField('trigger_time'): 88 trigger_datetime = configuration.trigger_time.ToDatetime() 89 return RelativeScheduleTrigger(configuration.key, UIDefinition.from_proto(configuration.ui), trigger_datetime) 90 91 92 class EventMatchTrigger(TriggerConfiguration): 93 94 def __init__(self, key, ui_definition, max_fires, event_matcher_name, parameters): 95 super(EventMatchTrigger, self).__init__(key, ui_definition) 96 self._max_fires = max_fires 97 self._event_matcher_name = event_matcher_name 98 self._parameters = parameters 99 100 @property 101 def max_fires(self): 102 return self._max_fires 103 104 @property 105 def event_matcher_name(self): 106 return self._event_matcher_name 107 108 @property 109 def parameters(self): 110 return self._parameters 111 112 @classmethod 113 def from_proto(cls, configuration): 114 return EventMatchTrigger(key=configuration.key, ui_definition=UIDefinition.from_proto(configuration.ui), max_fires=MaxFires.from_proto(configuration.max_fires), event_matcher_name=configuration.event_match_method.name, parameters=[ ParameterConfiguration.from_proto(parameter) for parameter in configuration.parameters ]) 115 116 117 class TrackTargetProgressReachedTrigger(TriggerConfiguration): 118 119 def __init__(self, key, ui_definition, max_fires, track_keys): 120 super(TrackTargetProgressReachedTrigger, self).__init__(key, ui_definition) 121 self._max_fires = max_fires 122 self._track_keys = track_keys 123 124 @property 125 def max_fires(self): 126 return self._max_fires 127 128 @property 129 def track_keys(self): 130 return self._track_keys 131 132 @classmethod 133 def from_proto(cls, configuration): 134 return TrackTargetProgressReachedTrigger(configuration.key, UIDefinition.from_proto(configuration.ui), MaxFires.from_proto(configuration.max_fires), list(configuration.track_keys)) 135 136 137 class ObjectiveOutcomeTrigger(TriggerConfiguration): 138 139 def __init__(self, key, ui_definition, max_fires, objective_keys): 140 super(ObjectiveOutcomeTrigger, self).__init__(key, ui_definition) 141 self._max_fires = max_fires 142 self._objective_keys = objective_keys 143 144 @property 145 def max_fires(self): 146 return self._max_fires 147 148 @property 149 def objective_keys(self): 150 return self._objective_keys 151 152 @classmethod 153 def from_proto(cls, configuration): 154 return cls(configuration.key, UIDefinition.from_proto(configuration.ui), MaxFires.from_proto(configuration.max_fires), list(configuration.objective_keys)) 155 156 157 class ObjectiveCompletedTrigger(ObjectiveOutcomeTrigger): 158 pass 159 160 161 class ObjectiveFailedTrigger(ObjectiveOutcomeTrigger): 162 pass 163 164 165 _TRIGGER_CLASS_BY_TYPE = {'immediate': ImmediateTrigger, 166 'event_match': EventMatchTrigger, 167 'relative_schedule': RelativeScheduleTrigger, 168 'track_target_progress_reached': TrackTargetProgressReachedTrigger, 169 'objective_completed': ObjectiveCompletedTrigger, 170 'objective_failed': ObjectiveFailedTrigger} 171 172 def lifecycle_trigger_from_proto(lifecycle_trigger): 173 trigger_type = lifecycle_trigger.WhichOneof('trigger_type') 174 trigger_class = _TRIGGER_CLASS_BY_TYPE.get(trigger_type) 175 if trigger_class is None: 176 raise NotImplementedError('Unknown lifecycle trigger type: %s' % trigger_type) 177 return trigger_class.from_proto(getattr(lifecycle_trigger, trigger_type))