campaign_parameters.py (11378B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\campaign_parameters.py 2 import campaigns.client.v2.data_model.flatbuffer.event_matcher_definitions_generated as definitions_fb 3 from campaigns.client.v2.data_model.ui_definition import UIDefinition 4 from eveProto.generated.eve_public.campaign.parameter.parameter_pb2 import Definition 5 6 class ParameterDefinition(object): 7 8 def __init__(self, key, ui_definition, parameter): 9 self._key = key 10 self._ui_definition = ui_definition 11 self._parameter = parameter 12 13 @property 14 def key(self): 15 return self._key 16 17 @property 18 def ui_definition(self): 19 return self._ui_definition 20 21 @property 22 def parameter(self): 23 return self._parameter 24 25 @classmethod 26 def from_proto(cls, definition): 27 key = definition.key 28 ui_definition = UIDefinition.from_proto(definition.ui) 29 parameter_class = definition.WhichOneof('class') 30 if parameter_class == 'single_value': 31 parameter = SingleValueParameterDefinition(definition.single_value.value_type) 32 elif parameter_class == 'set': 33 parameter = SetParameterDefinition(definition.set.value_type) 34 elif parameter_class == 'multi_value_type_set': 35 values = [ value for value in definition.multi_value_type_set.accepted_value_types ] 36 parameter = MultiValueTypeParameterDefinition(values) 37 else: 38 raise NotImplementedError 39 return ParameterDefinition(key, ui_definition, parameter) 40 41 def to_flatbuffer(self, builder): 42 key_offset = builder.CreateString(self.key) 43 ui_definition_offset = self.ui_definition.to_flatbuffer(builder) 44 if isinstance(self.parameter, SingleValueParameterDefinition): 45 value_offset = builder.CreateString(self.parameter.value_type) 46 definitions_fb.ParameterStartValuesVector(builder, 1) 47 builder.PrependUOffsetTRelative(value_offset) 48 values_offset = builder.EndVector() 49 values_type = definitions_fb.ParameterType.SingleValue 50 elif isinstance(self.parameter, MultiValueTypeParameterDefinition): 51 value_offsets = [ builder.CreateString(value_type) for value_type in self.parameter.value_types ] 52 definitions_fb.ParameterStartValuesVector(builder, len(value_offsets)) 53 for value_offset in reversed(value_offsets): 54 builder.PrependUOffsetTRelative(value_offset) 55 56 values_offset = builder.EndVector() 57 values_type = definitions_fb.ParameterType.MultiValue 58 elif isinstance(self.parameter, SetParameterDefinition): 59 value_offset = builder.CreateString(self.parameter.value_type) 60 definitions_fb.ParameterStartValuesVector(builder, 1) 61 builder.PrependUOffsetTRelative(value_offset) 62 values_offset = builder.EndVector() 63 values_type = definitions_fb.ParameterType.Set 64 else: 65 raise NotImplementedError 66 definitions_fb.ParameterStart(builder) 67 definitions_fb.ParameterAddKey(builder, key_offset) 68 definitions_fb.ParameterAddUi(builder, ui_definition_offset) 69 definitions_fb.ParameterAddType(builder, values_type) 70 definitions_fb.ParameterAddValues(builder, values_offset) 71 return definitions_fb.ParameterEnd(builder) 72 73 @classmethod 74 def from_flatbuffer(cls, parameter_fb): 75 key = parameter_fb.Key() 76 ui = UIDefinition.from_flatbuffer(parameter_fb.Ui()) 77 parameter_type = parameter_fb.Type() 78 if parameter_type == definitions_fb.ParameterType.SingleValue: 79 value = parameter_fb.Values(0) 80 parameter = SingleValueParameterDefinition(value.decode('utf-8')) 81 elif parameter_type == definitions_fb.ParameterType.Set: 82 value = parameter_fb.Values(0) 83 parameter = SetParameterDefinition(value.decode('utf-8')) 84 elif parameter_type == definitions_fb.ParameterType.MultiValue: 85 values = [] 86 for index in range(parameter_fb.ValuesLength()): 87 value = parameter_fb.Values(index) 88 values.append(value.decode('utf-8')) 89 90 parameter = MultiValueTypeParameterDefinition(values) 91 else: 92 raise ValueError('Unsupported parameter type') 93 return ParameterDefinition(key, ui, parameter) 94 95 def __eq__(self, other): 96 if not isinstance(other, ParameterDefinition): 97 raise NotImplementedError 98 return self.key == other.key and self.ui_definition == other.ui_definition and self.parameter == other.parameter 99 100 def __ne__(self, other): 101 return not self.__eq__(other) 102 103 def __repr__(self): 104 return '<%s %r>' % (self.__class__.__name__, self.__dict__) 105 106 107 class SingleValueParameterDefinition(object): 108 109 def __init__(self, value_type): 110 self._value_type = value_type 111 112 @property 113 def value_type(self): 114 return self._value_type 115 116 def __eq__(self, other): 117 if not isinstance(other, SingleValueParameterDefinition): 118 raise NotImplementedError 119 return self.value_type == other.value_type 120 121 def __ne__(self, other): 122 return not self.__eq__(other) 123 124 def __repr__(self): 125 return '<%s %r>' % (self.__class__.__name__, self.__dict__) 126 127 128 class SetParameterDefinition(object): 129 130 def __init__(self, value_type): 131 self._value_type = value_type 132 133 @property 134 def value_type(self): 135 return self._value_type 136 137 def __eq__(self, other): 138 if not isinstance(other, SetParameterDefinition): 139 raise NotImplementedError 140 return self.value_type == other.value_type 141 142 def __ne__(self, other): 143 return not self.__eq__(other) 144 145 def __repr__(self): 146 return '<%s %r>' % (self.__class__.__name__, self.__dict__) 147 148 149 class MultiValueTypeParameterDefinition(object): 150 151 def __init__(self, value_types): 152 self._value_types = value_types 153 154 @property 155 def value_types(self): 156 return self._value_types 157 158 def __eq__(self, other): 159 if not isinstance(other, MultiValueTypeParameterDefinition): 160 raise NotImplementedError 161 return self.value_types == other.value_types 162 163 def __ne__(self, other): 164 return not self.__eq__(other) 165 166 def __repr__(self): 167 return '<%s %r>' % (self.__class__.__name__, self.__dict__) 168 169 170 class ParameterConfiguration(object): 171 172 def __init__(self, key, parameter): 173 self._key = key 174 self._parameter = parameter 175 176 @property 177 def key(self): 178 return self._key 179 180 @property 181 def parameter(self): 182 return self._parameter 183 184 @classmethod 185 def from_proto(cls, configuration): 186 parameter_class = configuration.WhichOneof('class') 187 if parameter_class == 'single_value': 188 parameter = SingleValueParameterConfiguration.from_proto(configuration.single_value) 189 elif parameter_class == 'set_value': 190 parameter = SetParameterConfiguration.from_proto(configuration.set_value) 191 elif parameter_class == 'multi_value_type_set_value': 192 parameter = MultiValueTypeParameterConfiguration.from_proto(configuration.multi_value_type_set_value) 193 else: 194 raise NotImplementedError('Unknown parameter configuration class: %s' % parameter_class) 195 return ParameterConfiguration(configuration.key, parameter) 196 197 def __eq__(self, other): 198 if not isinstance(other, ParameterConfiguration): 199 raise NotImplementedError 200 return self.key == other.key and self.parameter == other.parameter 201 202 def __ne__(self, other): 203 return not self.__eq__(other) 204 205 def __repr__(self): 206 return '<%s %r>' % (self.__class__.__name__, self.__dict__) 207 208 209 class ParameterValue(object): 210 211 def __init__(self, literal = None, wildcard = False): 212 self._literal = literal 213 self._wildcard = wildcard 214 215 @property 216 def literal(self): 217 return self._literal 218 219 @property 220 def wildcard(self): 221 return self._wildcard 222 223 @classmethod 224 def from_proto(cls, value): 225 value_class = value.WhichOneof('value') 226 if value_class == 'literal': 227 return ParameterValue(literal=value.literal) 228 if value_class == 'wildcard': 229 return ParameterValue(wildcard=value.wildcard) 230 raise NotImplementedError('Unknown parameter value class: %s' % value_class) 231 232 def __eq__(self, other): 233 if not isinstance(other, ParameterValue): 234 raise NotImplementedError 235 return self.literal == other.literal and self.wildcard == other.wildcard 236 237 def __ne__(self, other): 238 return not self.__eq__(other) 239 240 def __repr__(self): 241 return '<%s %r>' % (self.__class__.__name__, self.__dict__) 242 243 244 class SingleValueParameterConfiguration(object): 245 246 def __init__(self, value_type, value): 247 self._value_type = value_type 248 self._value = value 249 250 @property 251 def value_type(self): 252 return self._value_type 253 254 @property 255 def value(self): 256 return self._value 257 258 @classmethod 259 def from_proto(cls, single_value): 260 return SingleValueParameterConfiguration(single_value.value_type, ParameterValue.from_proto(single_value.value)) 261 262 def __eq__(self, other): 263 if not isinstance(other, SingleValueParameterConfiguration): 264 raise NotImplementedError 265 return self.value_type == other.value_type and self.value == other.value 266 267 def __ne__(self, other): 268 return not self.__eq__(other) 269 270 def __repr__(self): 271 return '<%s %r>' % (self.__class__.__name__, self.__dict__) 272 273 274 class SetParameterConfiguration(object): 275 276 def __init__(self, value_type, values): 277 self._value_type = value_type 278 self._values = values 279 280 @property 281 def value_type(self): 282 return self._value_type 283 284 @property 285 def values(self): 286 return self._values 287 288 @classmethod 289 def from_proto(cls, set_value): 290 return SetParameterConfiguration(set_value.value_type, [ ParameterValue.from_proto(value) for value in set_value.values ]) 291 292 def __eq__(self, other): 293 if not isinstance(other, SetParameterConfiguration): 294 raise NotImplementedError 295 return self.value_type == other.value_type and self.values == other.values 296 297 def __ne__(self, other): 298 return not self.__eq__(other) 299 300 def __repr__(self): 301 return '<%s %r>' % (self.__class__.__name__, self.__dict__) 302 303 304 class MultiValueTypeParameterConfiguration(object): 305 306 def __init__(self, value_sets): 307 self._value_sets = value_sets 308 309 @property 310 def value_sets(self): 311 return self._value_sets 312 313 @classmethod 314 def from_proto(cls, multi_value_type_set_value): 315 return MultiValueTypeParameterConfiguration([ SetParameterConfiguration.from_proto(value_set) for value_set in multi_value_type_set_value.values ]) 316 317 def __eq__(self, other): 318 if not isinstance(other, MultiValueTypeParameterConfiguration): 319 raise NotImplementedError 320 return self.value_sets == other.value_sets 321 322 def __ne__(self, other): 323 return not self.__eq__(other) 324 325 def __repr__(self): 326 return '<%s %r>' % (self.__class__.__name__, self.__dict__)