event_matcher_definitions_serialization.py (4603B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\data_model\flatbuffer\event_matcher_definitions_serialization.py 2 import campaigns.client.v2.data_model.flatbuffer.event_matcher_definitions_generated as definitions_fb 3 from campaigns.client.v2.data_model.event_matcher_definition import EventMatcherDefinition 4 from flatbuffers import Builder 5 from flatbuffers.vector_utils import write_vector_of_offsets 6 from semantic_version import SemanticVersion 7 8 def serialize_versioned_definitions_to_flatbuffer(version_definition_dict): 9 builder = Builder() 10 versioned_definition_offsets = _serialize_versioned_definitions_to_list(builder, version_definition_dict) 11 versioned_definitions_offset = write_vector_of_offsets(builder, definitions_fb.VersionedDefinitionsStartDefinitionsVector, versioned_definition_offsets) 12 definitions_fb.VersionedDefinitionsStart(builder) 13 definitions_fb.VersionedDefinitionsAddDefinitions(builder, versioned_definitions_offset) 14 versioned_definitions_fb = definitions_fb.VersionedDefinitionsEnd(builder) 15 builder.Finish(versioned_definitions_fb) 16 return builder.Output() 17 18 19 def _serialize_versioned_definitions_to_list(builder, version_definition_dict): 20 offsets = [] 21 for version, definitions in version_definition_dict.items(): 22 version_offset = _serialize_semantic_version(builder, version) 23 definition_offsets = [] 24 for definition in definitions: 25 definition_offsets.append(definition.to_flatbuffer(builder)) 26 27 definitions_offset = write_vector_of_offsets(builder, definitions_fb.DefinitionsStartMethodsVector, definition_offsets) 28 definitions_fb.DefinitionsStart(builder) 29 definitions_fb.DefinitionsAddVersion(builder, version_offset) 30 definitions_fb.DefinitionsAddMethods(builder, definitions_offset) 31 offsets.append(definitions_fb.DefinitionsEnd(builder)) 32 33 return offsets 34 35 36 def _deserialize_version_and_definitions_list(versioned_definitions_fb): 37 version = _deserialize_semantic_version(versioned_definitions_fb.Version()) 38 definitions = [] 39 for index in range(versioned_definitions_fb.MethodsLength()): 40 definition = versioned_definitions_fb.Methods(index) 41 definitions.append(EventMatcherDefinition.from_flatbuffer(definition)) 42 43 return (version, definitions) 44 45 46 def deserialize_flatbuffer_to_versioned_definitions_dict(flatbuffer_data): 47 versioned_definitions_dict = {} 48 versioned_definitions = definitions_fb.VersionedDefinitions.GetRootAs(flatbuffer_data) 49 for i in range(versioned_definitions.DefinitionsLength()): 50 semantic_version, definitions = _deserialize_version_and_definitions_list(versioned_definitions.Definitions(i)) 51 versioned_definitions_dict[semantic_version] = definitions 52 53 return versioned_definitions_dict 54 55 56 def _serialize_semantic_version(builder, version): 57 prerelease_strings = [ builder.CreateString(tag) for tag in version.prerelease_tags ] 58 build_strings = [ builder.CreateString(tag) for tag in version.build_tags ] 59 definitions_fb.SemanticVersionStartPrereleaseTagsVector(builder, len(prerelease_strings)) 60 for prerelease_string in reversed(prerelease_strings): 61 builder.PrependUOffsetTRelative(prerelease_string) 62 63 prerelease_offset = builder.EndVector() 64 definitions_fb.SemanticVersionStartBuildTagsVector(builder, len(build_strings)) 65 for build_string in reversed(build_strings): 66 builder.PrependUOffsetTRelative(build_string) 67 68 build_offset = builder.EndVector() 69 definitions_fb.SemanticVersionStart(builder) 70 definitions_fb.SemanticVersionAddMajor(builder, version.major) 71 definitions_fb.SemanticVersionAddMinor(builder, version.minor) 72 definitions_fb.SemanticVersionAddPatch(builder, version.patch) 73 definitions_fb.SemanticVersionAddPrereleaseTags(builder, prerelease_offset) 74 definitions_fb.SemanticVersionAddBuildTags(builder, build_offset) 75 return definitions_fb.SemanticVersionEnd(builder) 76 77 78 def _deserialize_semantic_version(version_flatbuffer): 79 major = version_flatbuffer.Major() 80 minor = version_flatbuffer.Minor() 81 patch = version_flatbuffer.Patch() 82 prerelease_tags = [] 83 for i in range(version_flatbuffer.PrereleaseTagsLength()): 84 prerelease_tags.append(version_flatbuffer.PrereleaseTags(i).decode('utf-8')) 85 86 build_tags = [] 87 for i in range(version_flatbuffer.BuildTagsLength()): 88 build_tags.append(version_flatbuffer.BuildTags(i).decode('utf-8')) 89 90 return SemanticVersion(major, minor, patch, prerelease_tags, build_tags)