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

contribution_method.py (14161B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\data_model\contribution_method.py
      2 import campaigns.client.v1.data_model.flatbuffer.contributionmethod_generated as fb_contributionmethod
      3 import campaigns.client.v1.data_model.flatbuffer.campaigndefinition_generated as fb_campaigndefinition
      4 from campaigns.client.contributionmethods.job_definitions import JobContributionMethodDefinition, JobContributionMethodConfiguration, JobParameterDefinitionController
      5 
      6 class ContributionMethodDefinition(object):
      7 
      8     def __init__(self, contribution_method, parameter_definitions, title, progress_description, icon):
      9         self._contribution_method = contribution_method
     10         self._parameter_definitions = parameter_definitions
     11         self._title = title
     12         self._progress_description = progress_description
     13         self._icon = icon
     14 
     15     @property
     16     def contribution_method(self):
     17         return self._contribution_method
     18 
     19     @property
     20     def parameter_definitions(self):
     21         return self._parameter_definitions
     22 
     23     @property
     24     def title(self):
     25         return self._title
     26 
     27     @property
     28     def progress_description(self):
     29         return self._progress_description
     30 
     31     @property
     32     def icon(self):
     33         return self._icon
     34 
     35     def __repr__(self):
     36         return '<%s %r>' % (self.__class__.__name__, self.__dict__)
     37 
     38     @classmethod
     39     def from_proto(cls, definition):
     40         parameters = []
     41         for definition_parameter in definition.attributes.parameters:
     42             matcher = definition_parameter.matcher
     43             parameter = MatcherParameterDefinition(key=matcher.key, type=matcher.type, accepted_value_types_list=matcher.accepted_value_types[:], title=matcher.title.sequential, description=matcher.description.sequential, icon=matcher.icon.name)
     44             parameters.append(parameter)
     45 
     46         contribution_method_attributes = definition.attributes
     47         return ContributionMethodDefinition(contribution_method=definition.definition.name, parameter_definitions=parameters, title=contribution_method_attributes.title.sequential, progress_description=contribution_method_attributes.progress_description.sequential, icon=contribution_method_attributes.icon.name)
     48 
     49     @classmethod
     50     def from_flatbuffer(cls, definition_fb):
     51         name = definition_fb.Name().decode('utf-8')
     52         title = definition_fb.Title()
     53         progress_description = definition_fb.ProgressDescription()
     54         icon = definition_fb.Icon().decode('utf-8')
     55         parameters = []
     56         for i in range(definition_fb.MatcherParametersLength()):
     57             parameters.append(MatcherParameterDefinition.from_flatbuffer(definition_fb.MatcherParameters(i)))
     58 
     59         return ContributionMethodDefinition(name, parameters, title, progress_description, icon)
     60 
     61     def to_flatbuffer(self, builder):
     62         name = builder.CreateString(self._contribution_method)
     63         icon = builder.CreateString(self._icon)
     64         parameter_offsets = [ parameter.to_flatbuffer(builder) for parameter in self.parameter_definitions ]
     65         fb_contributionmethod.DefinitionStartMatcherParametersVector(builder, len(parameter_offsets))
     66         for offset in reversed(parameter_offsets):
     67             builder.PrependUOffsetTRelative(offset)
     68 
     69         parameters_offset = builder.EndVector()
     70         fb_contributionmethod.DefinitionStart(builder)
     71         fb_contributionmethod.DefinitionAddName(builder, name)
     72         fb_contributionmethod.DefinitionAddTitle(builder, self._title)
     73         fb_contributionmethod.DefinitionAddProgressDescription(builder, self._progress_description)
     74         fb_contributionmethod.DefinitionAddIcon(builder, icon)
     75         fb_contributionmethod.DefinitionAddMatcherParameters(builder, parameters_offset)
     76         return fb_contributionmethod.DefinitionEnd(builder)
     77 
     78     def to_job_format(self):
     79         return JobContributionMethodDefinition(self)
     80 
     81     def __eq__(self, other):
     82         if not isinstance(other, ContributionMethodDefinition):
     83             return NotImplemented
     84         return self.contribution_method == other.contribution_method and self._parameter_definitions == other._parameter_definitions and self._title == other._title and self._progress_description == other._progress_description and self._icon == other._icon
     85 
     86     def __ne__(self, other):
     87         return not self.__eq__(other)
     88 
     89 
     90 class MatcherParameterDefinition(object):
     91 
     92     def __init__(self, key, type, accepted_value_types_list, title, description, icon):
     93         self._key = key
     94         self._type = type
     95         self._accepted_value_types_list = accepted_value_types_list
     96         self._title = title
     97         self._description = description
     98         self._icon = icon
     99 
    100     @property
    101     def key(self):
    102         return self._key
    103 
    104     @property
    105     def type(self):
    106         return self._type
    107 
    108     @property
    109     def accepted_value_types_list(self):
    110         return self._accepted_value_types_list
    111 
    112     @property
    113     def title(self):
    114         return self._title
    115 
    116     @property
    117     def description(self):
    118         return self._description
    119 
    120     @property
    121     def icon(self):
    122         return self._icon
    123 
    124     @classmethod
    125     def from_flatbuffer(cls, matcher_parameter_fb):
    126         key = matcher_parameter_fb.Key().decode('utf-8')
    127         type = matcher_parameter_fb.Type().decode('utf-8')
    128         title = matcher_parameter_fb.Title()
    129         description = matcher_parameter_fb.Description()
    130         icon = matcher_parameter_fb.Icon().decode('utf-8')
    131         accepted_value_types_list = []
    132         for i in range(matcher_parameter_fb.AcceptedValueTypesLength()):
    133             accepted_value_types_list.append(matcher_parameter_fb.AcceptedValueTypes(i).decode('utf-8'))
    134 
    135         return MatcherParameterDefinition(key, type, accepted_value_types_list, title, description, icon)
    136 
    137     def to_flatbuffer(self, builder):
    138         key = builder.CreateString(self._key)
    139         type = builder.CreateString(self._type)
    140         icon = builder.CreateString(self._icon)
    141         accepted_value_types_list = [ builder.CreateString(accepted_value_type) for accepted_value_type in self._accepted_value_types_list ]
    142         fb_contributionmethod.MatcherParameterStartAcceptedValueTypesVector(builder, len(accepted_value_types_list))
    143         for accepted_value_type in reversed(accepted_value_types_list):
    144             builder.PrependUOffsetTRelative(accepted_value_type)
    145 
    146         avt_list_offset = builder.EndVector()
    147         fb_contributionmethod.MatcherParameterStart(builder)
    148         fb_contributionmethod.MatcherParameterAddKey(builder, key)
    149         fb_contributionmethod.MatcherParameterAddType(builder, type)
    150         fb_contributionmethod.MatcherParameterAddIcon(builder, icon)
    151         fb_contributionmethod.MatcherParameterAddTitle(builder, self.title)
    152         fb_contributionmethod.MatcherParameterAddDescription(builder, self.description)
    153         fb_contributionmethod.MatcherParameterAddAcceptedValueTypes(builder, avt_list_offset)
    154         return fb_contributionmethod.MatcherParameterEnd(builder)
    155 
    156     def to_job_format(self):
    157         return JobParameterDefinitionController(self)
    158 
    159     def __repr__(self):
    160         return '<%s %r>' % (self.__class__.__name__, self.__dict__)
    161 
    162     def __eq__(self, other):
    163         if not isinstance(other, MatcherParameterDefinition):
    164             return NotImplemented
    165         return self.key == other.key and self.type == other.type and self.accepted_value_types_list == other.accepted_value_types_list and self.title == other.title and self.description == other.description and self.icon == other.icon
    166 
    167     def __ne__(self, other):
    168         return not self.__eq__(other)
    169 
    170 
    171 class ContributionMethodConfiguration(object):
    172 
    173     def __init__(self, contribution_method, parameter_configs):
    174         self._contribution_method = contribution_method
    175         self._parameter_configs = parameter_configs
    176 
    177     @property
    178     def contribution_method(self):
    179         return self._contribution_method
    180 
    181     @property
    182     def parameter_configs(self):
    183         return self._parameter_configs
    184 
    185     def __repr__(self):
    186         return '<%s %r>' % (self.__class__.__name__, self.__dict__)
    187 
    188     @classmethod
    189     def from_proto(cls, contribution_method_configuration):
    190         parameter_configs = []
    191         for parameter_config in contribution_method_configuration.parameters:
    192             parameter_values_configs = []
    193             for parameter_value in parameter_config.matcher.values:
    194                 parameter_values_configs.append(MatcherValueEntry(parameter_value.value_type, parameter_value.values))
    195 
    196             parameter_configs.append(ParameterConfiguration(parameter_config.key, parameter_values_configs))
    197 
    198         return ContributionMethodConfiguration(contribution_method=contribution_method_configuration.contribution_method.name, parameter_configs=parameter_configs)
    199 
    200     @classmethod
    201     def from_flatbuffer(cls, configuration):
    202         name = configuration.Name().decode('utf-8')
    203         parameters = []
    204         for params_idx in range(configuration.ParametersLength()):
    205             parameter = configuration.Parameters(params_idx)
    206             matchers = []
    207             for values_idx in range(parameter.ValuesLength()):
    208                 value_type = parameter.Values(values_idx)
    209                 type_values = []
    210                 for type_values_idx in range(value_type.ValuesLength()):
    211                     type_values.append(value_type.Values(type_values_idx))
    212 
    213                 matcher = MatcherValueEntry(value_type.Type().decode('utf-8'), type_values)
    214                 matchers.append(matcher)
    215 
    216             parameter = ParameterConfiguration(key=parameter.Key().decode('utf-8'), values=matchers)
    217             parameters.append(parameter)
    218 
    219         return ContributionMethodConfiguration(contribution_method=name, parameter_configs=parameters)
    220 
    221     def to_flatbuffer(self, builder):
    222         name_fb = builder.CreateString(self.contribution_method)
    223         parameter_offset_list = []
    224         for parameter_config in self.parameter_configs:
    225             key = builder.CreateString(parameter_config.key)
    226             values_list = []
    227             for parameter_value in parameter_config.values:
    228                 value_type = builder.CreateString(parameter_value.value_type)
    229                 value_strings = []
    230                 for value in parameter_value.values:
    231                     value_string = builder.CreateString(value)
    232                     value_strings.append(value_string)
    233 
    234                 fb_campaigndefinition.ValueEntryStartValuesVector(builder, len(value_strings))
    235                 for value_string in reversed(value_strings):
    236                     builder.PrependUOffsetTRelative(value_string)
    237 
    238                 values_fb = builder.EndVector()
    239                 fb_campaigndefinition.ValueEntryStart(builder)
    240                 fb_campaigndefinition.ValueEntryAddType(builder, value_type)
    241                 fb_campaigndefinition.ValueEntryAddValues(builder, values_fb)
    242                 values_list.append(fb_campaigndefinition.ValueEntryEnd(builder))
    243 
    244             fb_campaigndefinition.MatcherParameterConfigurationStartValuesVector(builder, len(values_list))
    245             for value_offset in reversed(values_list):
    246                 builder.PrependUOffsetTRelative(value_offset)
    247 
    248             values_list_fb = builder.EndVector()
    249             fb_campaigndefinition.MatcherParameterConfigurationStart(builder)
    250             fb_campaigndefinition.MatcherParameterConfigurationAddKey(builder, key)
    251             fb_campaigndefinition.MatcherParameterConfigurationAddValues(builder, values_list_fb)
    252             parameter_offset_list.append(fb_campaigndefinition.MatcherParameterConfigurationEnd(builder))
    253 
    254         fb_campaigndefinition.ContributionMethodConfigurationStartParametersVector(builder, len(parameter_offset_list))
    255         for parameter_offset in reversed(parameter_offset_list):
    256             builder.PrependUOffsetTRelative(parameter_offset)
    257 
    258         parameters_fb = builder.EndVector()
    259         fb_campaigndefinition.ContributionMethodConfigurationStart(builder)
    260         fb_campaigndefinition.ContributionMethodConfigurationAddName(builder, name_fb)
    261         fb_campaigndefinition.ContributionMethodConfigurationAddParameters(builder, parameters_fb)
    262         return fb_campaigndefinition.ContributionMethodConfigurationEnd(builder)
    263 
    264     def to_job_format(self):
    265         return JobContributionMethodConfiguration(self)
    266 
    267     def __eq__(self, other):
    268         if not isinstance(other, ContributionMethodConfiguration):
    269             return NotImplemented
    270         return self.contribution_method == other.contribution_method and self._parameter_configs == other._parameter_configs
    271 
    272     def __ne__(self, other):
    273         return not self.__eq__(other)
    274 
    275 
    276 class ParameterConfiguration(object):
    277 
    278     def __init__(self, key, values):
    279         self._key = key
    280         self._values = values
    281 
    282     @property
    283     def key(self):
    284         return self._key
    285 
    286     @property
    287     def values(self):
    288         return self._values
    289 
    290     def get_values(self):
    291         value_list = []
    292         for value_entry in self._values:
    293             for v in value_entry.values:
    294                 value_list.append((value_entry.value_type, int(v)))
    295 
    296         return value_list
    297 
    298     def __repr__(self):
    299         return '<%s %r>' % (self.__class__.__name__, self.__dict__)
    300 
    301     def __eq__(self, other):
    302         if not isinstance(other, ParameterConfiguration):
    303             return NotImplemented
    304         return self.key == other.key and self._values == other.values
    305 
    306     def __ne__(self, other):
    307         return not self.__eq__(other)
    308 
    309 
    310 class MissingParameterConfiguration(ParameterConfiguration):
    311     pass
    312 
    313 
    314 class MatcherValueEntry(object):
    315 
    316     def __init__(self, value_type, values):
    317         self._value_type = value_type
    318         self._values = values
    319 
    320     @property
    321     def value_type(self):
    322         return self._value_type
    323 
    324     @property
    325     def values(self):
    326         return self._values
    327 
    328     def __repr__(self):
    329         return '<%s %r>' % (self.__class__.__name__, self.__dict__)
    330 
    331     def __eq__(self, other):
    332         if not isinstance(other, MatcherValueEntry):
    333             return NotImplemented
    334         return self.value_type == other.value_type and self.values == other.values