mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-02 12:05:50 +00:00
[Python] Fixed the issue with nested unions relying on InitFromBuf. (#7576)
* feat: Fixed the issue with nested unions relying on InitFromBuf. Problem: Issue #7569 Nested Unions were broken with the introduction of parsing buffers with an initial encoding offset. Fix: Revert the InitFromBuf method to the previous version and introduction of InitFromPackedBuf that allows users to read types from packed buffers applying the offset automatically. Test: Added in TestNestedUnionTables to test the encoding and decoding ability using a nested table with a union field. * fix: Uncommented generate code command
This commit is contained in:
@@ -1108,13 +1108,25 @@ class PythonGenerator : public BaseGenerator {
|
||||
|
||||
code += GenIndents(1) + "@classmethod";
|
||||
code += GenIndents(1) + "def InitFromBuf(cls, buf, pos):";
|
||||
code += GenIndents(2) + "n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, 0)";
|
||||
code += GenIndents(2) + struct_var + " = " + struct_type + "()";
|
||||
code += GenIndents(2) + struct_var + ".Init(buf, pos+n)";
|
||||
code += GenIndents(2) + struct_var + ".Init(buf, pos)";
|
||||
code += GenIndents(2) + "return cls.InitFromObj(" + struct_var + ")";
|
||||
code += "\n";
|
||||
}
|
||||
|
||||
void InitializeFromPackedBuf(const StructDef &struct_def,
|
||||
std::string *code_ptr) const {
|
||||
auto &code = *code_ptr;
|
||||
const auto struct_var = namer_.Variable(struct_def);
|
||||
const auto struct_type = namer_.Type(struct_def);
|
||||
|
||||
code += GenIndents(1) + "@classmethod";
|
||||
code += GenIndents(1) + "def InitFromPackedBuf(cls, buf, pos=0):";
|
||||
code += GenIndents(2) + "n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, pos)";
|
||||
code += GenIndents(2) + "return cls.InitFromBuf(buf, pos+n)";
|
||||
code += "\n";
|
||||
}
|
||||
|
||||
void InitializeFromObjForObject(const StructDef &struct_def,
|
||||
std::string *code_ptr) const {
|
||||
auto &code = *code_ptr;
|
||||
@@ -1607,6 +1619,8 @@ class PythonGenerator : public BaseGenerator {
|
||||
|
||||
InitializeFromBuf(struct_def, &code);
|
||||
|
||||
InitializeFromPackedBuf(struct_def, &code);
|
||||
|
||||
InitializeFromObjForObject(struct_def, &code);
|
||||
|
||||
GenUnPack(struct_def, &code);
|
||||
|
||||
Reference in New Issue
Block a user