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

lifecycle.py (8764B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\lifecycle.py
      2 from campaigns.client.v2.data_model.side_effect import SideEffectGroup
      3 from campaigns.client.v2.data_model.trigger import lifecycle_trigger_from_proto
      4 from campaigns.client.v2.data_model.ui_definition import UIDefinition
      5 from eveProto.generated.eve_public.campaign import campaign_pb2
      6 from eveProto.generated.eve_public.campaign.objective import objective_pb2
      7 from eveProto.generated.eve_public.campaign.track import track_pb2
      8 
      9 class LifecycleStateType(object):
     10     UNSPECIFIED = 'unspecified'
     11     STARTED = 'started'
     12     ACTIVE = 'active'
     13     COMPLETED = 'completed'
     14     FAILED = 'failed'
     15     EXPIRED = 'expired'
     16     CANCELLED = 'cancelled'
     17     TARGET_REACHED = 'target_reached'
     18     STOPPED = 'stopped'
     19 
     20 
     21 CAMPAIGN_STATE_BY_PROTO = {campaign_pb2.STATE_UNSPECIFIED: LifecycleStateType.UNSPECIFIED,
     22  campaign_pb2.STATE_STARTED: LifecycleStateType.STARTED,
     23  campaign_pb2.STATE_ACTIVE: LifecycleStateType.ACTIVE,
     24  campaign_pb2.STATE_COMPLETED: LifecycleStateType.COMPLETED,
     25  campaign_pb2.STATE_FAILED: LifecycleStateType.FAILED,
     26  campaign_pb2.STATE_EXPIRED: LifecycleStateType.EXPIRED,
     27  campaign_pb2.STATE_CANCELLED: LifecycleStateType.CANCELLED}
     28 OBJECTIVE_STATE_BY_PROTO = {objective_pb2.STATE_UNSPECIFIED: LifecycleStateType.UNSPECIFIED,
     29  objective_pb2.STATE_STARTED: LifecycleStateType.STARTED,
     30  objective_pb2.STATE_ACTIVE: LifecycleStateType.ACTIVE,
     31  objective_pb2.STATE_COMPLETED: LifecycleStateType.COMPLETED,
     32  objective_pb2.STATE_FAILED: LifecycleStateType.FAILED,
     33  objective_pb2.STATE_EXPIRED: LifecycleStateType.EXPIRED,
     34  objective_pb2.STATE_CANCELLED: LifecycleStateType.CANCELLED}
     35 TRACK_STATE_BY_PROTO = {track_pb2.STATE_UNSPECIFIED: LifecycleStateType.UNSPECIFIED,
     36  track_pb2.STATE_STARTED: LifecycleStateType.STARTED,
     37  track_pb2.STATE_TARGET_REACHED: LifecycleStateType.TARGET_REACHED,
     38  track_pb2.STATE_STOPPED: LifecycleStateType.STOPPED}
     39 
     40 class TriggeredByCause(object):
     41     UNSPECIFIED = 'unspecified'
     42     SCHEDULED = 'scheduled'
     43     LIFECYCLE_TRIGGER = 'lifecycle_trigger'
     44     ADMINISTRATIVE_ACTION = 'administrative_action'
     45     PARENT_STATE = 'parent_state'
     46     TARGET_PROGRESS_REACHED = 'target_progress_reached'
     47 
     48 
     49 _CAUSE_BY_ONEOF = {'unspecified': TriggeredByCause.UNSPECIFIED,
     50  'scheduled': TriggeredByCause.SCHEDULED,
     51  'lifecycle_trigger': TriggeredByCause.LIFECYCLE_TRIGGER,
     52  'administrative_action': TriggeredByCause.ADMINISTRATIVE_ACTION,
     53  'parent_state': TriggeredByCause.PARENT_STATE,
     54  'target_progress_reached': TriggeredByCause.TARGET_PROGRESS_REACHED}
     55 TRIGGER_PHASE_START = 'start'
     56 TRIGGER_PHASE_COMPLETE = 'complete'
     57 TRIGGER_PHASE_FAIL = 'fail'
     58 TRIGGER_PHASE_STOP = 'stop'
     59 SIDE_EFFECT_PHASE_ON_STARTED = 'on_started'
     60 SIDE_EFFECT_PHASE_ON_COMPLETED = 'on_completed'
     61 SIDE_EFFECT_PHASE_ON_FAILED = 'on_failed'
     62 SIDE_EFFECT_PHASE_ON_CANCELLED = 'on_cancelled'
     63 SIDE_EFFECT_PHASE_ON_STOPPED = 'on_stopped'
     64 
     65 class TriggeredBy(object):
     66 
     67     def __init__(self, cause, lifecycle_trigger_key):
     68         self._cause = cause
     69         self._lifecycle_trigger_key = lifecycle_trigger_key
     70 
     71     @property
     72     def cause(self):
     73         return self._cause
     74 
     75     @property
     76     def lifecycle_trigger_key(self):
     77         return self._lifecycle_trigger_key
     78 
     79     @classmethod
     80     def from_proto(cls, triggered_by):
     81         cause_class = triggered_by.WhichOneof('cause')
     82         if cause_class is not None and cause_class not in _CAUSE_BY_ONEOF:
     83             raise NotImplementedError('Unknown lifecycle state cause: %s' % cause_class)
     84         key = triggered_by.lifecycle_trigger.key if cause_class == 'lifecycle_trigger' else None
     85         return TriggeredBy(_CAUSE_BY_ONEOF.get(cause_class, TriggeredByCause.UNSPECIFIED), key)
     86 
     87     def __eq__(self, other):
     88         if not isinstance(other, TriggeredBy):
     89             raise NotImplementedError
     90         return self.cause == other.cause and self.lifecycle_trigger_key == other.lifecycle_trigger_key
     91 
     92     def __ne__(self, other):
     93         return not self.__eq__(other)
     94 
     95     def __repr__(self):
     96         return '<%s %r>' % (self.__class__.__name__, self.__dict__)
     97 
     98 
     99 class LifecycleState(object):
    100 
    101     def __init__(self, state, transition_datetime, triggered_by):
    102         self._state = state
    103         self._transition_datetime = transition_datetime
    104         self._triggered_by = triggered_by
    105 
    106     @property
    107     def state(self):
    108         return self._state
    109 
    110     @property
    111     def transition_datetime(self):
    112         return self._transition_datetime
    113 
    114     @property
    115     def triggered_by(self):
    116         return self._triggered_by
    117 
    118     @classmethod
    119     def from_proto(cls, lifecycle_state, state_by_proto):
    120         if lifecycle_state.state not in state_by_proto:
    121             raise NotImplementedError('Unknown lifecycle state: %s' % lifecycle_state.state)
    122         transition_datetime = None
    123         if lifecycle_state.HasField('transition_time'):
    124             transition_datetime = lifecycle_state.transition_time.ToDatetime()
    125         return LifecycleState(state_by_proto[lifecycle_state.state], transition_datetime, TriggeredBy.from_proto(lifecycle_state.triggered_by))
    126 
    127     @classmethod
    128     def from_campaign_proto(cls, lifecycle_state):
    129         return cls.from_proto(lifecycle_state, CAMPAIGN_STATE_BY_PROTO)
    130 
    131     @classmethod
    132     def from_objective_proto(cls, lifecycle_state):
    133         return cls.from_proto(lifecycle_state, OBJECTIVE_STATE_BY_PROTO)
    134 
    135     @classmethod
    136     def from_track_proto(cls, lifecycle_state):
    137         return cls.from_proto(lifecycle_state, TRACK_STATE_BY_PROTO)
    138 
    139     def __eq__(self, other):
    140         if not isinstance(other, LifecycleState):
    141             raise NotImplementedError
    142         return self.state == other.state and self.transition_datetime == other.transition_datetime and self.triggered_by == other.triggered_by
    143 
    144     def __ne__(self, other):
    145         return not self.__eq__(other)
    146 
    147     def __repr__(self):
    148         return '<%s %r>' % (self.__class__.__name__, self.__dict__)
    149 
    150 
    151 class LifecycleTriggerEntry(object):
    152 
    153     def __init__(self, key, trigger, ui_definition):
    154         self._key = key
    155         self._trigger = trigger
    156         self._ui_definition = ui_definition
    157 
    158     @property
    159     def key(self):
    160         return self._key
    161 
    162     @property
    163     def trigger(self):
    164         return self._trigger
    165 
    166     @property
    167     def ui_definition(self):
    168         return self._ui_definition
    169 
    170     @classmethod
    171     def from_proto(cls, entry):
    172         return LifecycleTriggerEntry(entry.key, lifecycle_trigger_from_proto(entry.trigger), UIDefinition.from_proto(entry.ui))
    173 
    174     def __eq__(self, other):
    175         if not isinstance(other, LifecycleTriggerEntry):
    176             raise NotImplementedError
    177         return self.key == other.key and self.trigger == other.trigger and self.ui_definition == other.ui_definition
    178 
    179     def __ne__(self, other):
    180         return not self.__eq__(other)
    181 
    182     def __repr__(self):
    183         return '<%s %r>' % (self.__class__.__name__, self.__dict__)
    184 
    185 
    186 class LifecycleTriggers(object):
    187 
    188     def __init__(self, entries_by_phase):
    189         self._entries_by_phase = entries_by_phase
    190 
    191     @property
    192     def entries_by_phase(self):
    193         return self._entries_by_phase
    194 
    195     def get(self, phase):
    196         return self._entries_by_phase.get(phase, [])
    197 
    198     @classmethod
    199     def from_proto(cls, lifecycle_triggers):
    200         return LifecycleTriggers({field.name:[ LifecycleTriggerEntry.from_proto(entry) for entry in getattr(lifecycle_triggers, field.name) ] for field in lifecycle_triggers.DESCRIPTOR.fields})
    201 
    202     def __eq__(self, other):
    203         if not isinstance(other, LifecycleTriggers):
    204             raise NotImplementedError
    205         return self.entries_by_phase == other.entries_by_phase
    206 
    207     def __ne__(self, other):
    208         return not self.__eq__(other)
    209 
    210     def __repr__(self):
    211         return '<%s %r>' % (self.__class__.__name__, self.__dict__)
    212 
    213 
    214 class LifecycleSideEffects(object):
    215 
    216     def __init__(self, groups_by_phase):
    217         self._groups_by_phase = groups_by_phase
    218 
    219     @property
    220     def groups_by_phase(self):
    221         return self._groups_by_phase
    222 
    223     def get(self, phase):
    224         return self._groups_by_phase.get(phase)
    225 
    226     @classmethod
    227     def from_proto(cls, lifecycle_side_effects):
    228         return LifecycleSideEffects({field.name:SideEffectGroup.from_proto(getattr(lifecycle_side_effects, field.name)) for field in lifecycle_side_effects.DESCRIPTOR.fields if lifecycle_side_effects.HasField(field.name)})
    229 
    230     def __eq__(self, other):
    231         if not isinstance(other, LifecycleSideEffects):
    232             raise NotImplementedError
    233         return self.groups_by_phase == other.groups_by_phase
    234 
    235     def __ne__(self, other):
    236         return not self.__eq__(other)
    237 
    238     def __repr__(self):
    239         return '<%s %r>' % (self.__class__.__name__, self.__dict__)