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

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)