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