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

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))