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

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)