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