Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions include/codegen/python.cc
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,21 @@ const python::Import &python::Imports::Import(const std::string &module,
imports.push_back(std::move(import));
return imports.back();
}

const python::Import &python::Imports::Export(const std::string &module) {
python::Import import;
import.module = module;
exports.push_back(std::move(import));
return exports.back();
}

const python::Import &python::Imports::Export(const std::string &module,
const std::string &name) {
python::Import import;
import.module = module;
import.name = name;
exports.push_back(std::move(import));
return exports.back();
}
} // namespace python
} // namespace flatbuffers
5 changes: 5 additions & 0 deletions include/codegen/python.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,12 @@ struct Imports {
const python::Import &Import(const std::string &module,
const std::string &name);

const python::Import &Export(const std::string &module);
const python::Import &Export(const std::string &module,
const std::string &name);

std::vector<python::Import> imports;
std::vector<python::Import> exports;
};
} // namespace python
} // namespace flatbuffers
Expand Down
31 changes: 24 additions & 7 deletions src/idl_gen_python.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,7 @@ class PythonStubGenerator {
void GenerateObjectStub(std::stringstream &stub, const StructDef *struct_def,
Imports *imports) const {
std::string name = namer_.ObjectType(*struct_def);
imports->Export(ModuleFor(struct_def), namer_.Type(*struct_def));

stub << "class " << name;
if (version_.major != 3) stub << "(object)";
Expand Down Expand Up @@ -327,6 +328,7 @@ class PythonStubGenerator {
void GenerateStructStub(std::stringstream &stub, const StructDef *struct_def,
Imports *imports) const {
std::string type = namer_.Type(*struct_def);
imports->Export(ModuleFor(struct_def), namer_.Type(*struct_def));

stub << "class " << type;
if (version_.major != 3) stub << "(object)";
Expand Down Expand Up @@ -545,6 +547,7 @@ class PythonStubGenerator {
void GenerateEnumStub(std::stringstream &stub, const EnumDef *enum_def,
Imports *imports) const {
stub << "class " << namer_.Type(*enum_def);
imports->Export(ModuleFor(enum_def), namer_.Type(*enum_def));

if (version_.major == 3){
imports->Import("enum", "IntEnum");
Expand Down Expand Up @@ -589,18 +592,32 @@ class PythonStubGenerator {
}
}

// Remove imports from exports
for (const Import &import : imports.exports) {
if (import.name == "") {
modules.erase(import.module);
} else {
auto search = names_by_module.find(import.module);
if (search != names_by_module.end()) {
search->second.erase(import.name);
}
}
}

for (const std::string &module : modules) {
ss << "import " << module << '\n';
}
for (const auto &import : names_by_module) {
ss << "from " << import.first << " import ";
size_t i = 0;
for (const std::string &name : import.second) {
if (i > 0) ss << ", ";
ss << name;
++i;
if (!import.second.empty()) {
ss << "from " << import.first << " import ";
size_t i = 0;
for (const std::string &name : import.second) {
if (i > 0) ss << ", ";
ss << name;
++i;
}
ss << '\n';
}
ss << '\n';
}
}

Expand Down
1 change: 0 additions & 1 deletion tests/MyGame/Example/ArrayStruct.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import numpy as np

import flatbuffers
import typing
from MyGame.Example.ArrayStruct import ArrayStruct
from MyGame.Example.NestedStruct import NestedStruct, NestedStructT
from MyGame.Example.TestEnum import TestEnum

Expand Down
1 change: 0 additions & 1 deletion tests/MyGame/Example/ArrayTable.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import numpy as np
import flatbuffers
import typing
from MyGame.Example.ArrayStruct import ArrayStruct, ArrayStructT
from MyGame.Example.ArrayTable import ArrayTable

uoffset: typing.TypeAlias = flatbuffers.number_types.UOffsetTFlags.py_type

Expand Down
1 change: 0 additions & 1 deletion tests/MyGame/Example/NestedStruct.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import numpy as np

import flatbuffers
import typing
from MyGame.Example.NestedStruct import NestedStruct
from MyGame.Example.TestEnum import TestEnum

uoffset: typing.TypeAlias = flatbuffers.number_types.UOffsetTFlags.py_type
Expand Down
1 change: 0 additions & 1 deletion tests/MyGame/Example/NestedUnion/Any.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import numpy as np

import flatbuffers
import typing
from MyGame.Example.NestedUnion.Any import Any
from MyGame.Example.NestedUnion.TestSimpleTableWithEnum import TestSimpleTableWithEnum
from MyGame.Example.NestedUnion.Vec3 import Vec3
from flatbuffers import table
Expand Down
1 change: 0 additions & 1 deletion tests/MyGame/Example/NestedUnion/NestedUnionTest.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import numpy as np
import flatbuffers
import typing
from MyGame.Example.NestedUnion.Any import Any
from MyGame.Example.NestedUnion.NestedUnionTest import NestedUnionTest
from MyGame.Example.NestedUnion.TestSimpleTableWithEnum import TestSimpleTableWithEnumT
from MyGame.Example.NestedUnion.Vec3 import Vec3T
from flatbuffers import table
Expand Down
1 change: 0 additions & 1 deletion tests/MyGame/Example/NestedUnion/Test.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import numpy as np

import flatbuffers
import typing
from MyGame.Example.NestedUnion.Test import Test

uoffset: typing.TypeAlias = flatbuffers.number_types.UOffsetTFlags.py_type

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import numpy as np
import flatbuffers
import typing
from MyGame.Example.NestedUnion.Color import Color
from MyGame.Example.NestedUnion.TestSimpleTableWithEnum import TestSimpleTableWithEnum

uoffset: typing.TypeAlias = flatbuffers.number_types.UOffsetTFlags.py_type

Expand Down
1 change: 0 additions & 1 deletion tests/MyGame/Example/NestedUnion/Vec3.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import flatbuffers
import typing
from MyGame.Example.NestedUnion.Color import Color
from MyGame.Example.NestedUnion.Test import Test, TestT
from MyGame.Example.NestedUnion.Vec3 import Vec3

uoffset: typing.TypeAlias = flatbuffers.number_types.UOffsetTFlags.py_type

Expand Down
1 change: 0 additions & 1 deletion tests/MyGame/MonsterExtra.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import numpy as np

import flatbuffers
import typing
from MyGame.MonsterExtra import MonsterExtra

uoffset: typing.TypeAlias = flatbuffers.number_types.UOffsetTFlags.py_type

Expand Down
Loading