mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-08 14:15:17 +00:00
[gRPC] Update the code generator for Python to produce typed handlers (#8326)
* Move `namer.h` and `idl_namer.h` to `include/codegen` so they can be reused from `grpc` dirqectory. * [gRPC] Update the Python generator to produce typed handlers and Python stubs if requested. * [gRPC] Document the newly added compiler flags.
This commit is contained in:
@@ -435,47 +435,8 @@ bool GenerateJavaGRPC(const Parser &parser, const std::string &path,
|
||||
return JavaGRPCGenerator(parser, path, file_name).generate();
|
||||
}
|
||||
|
||||
class PythonGRPCGenerator : public flatbuffers::BaseGenerator {
|
||||
private:
|
||||
CodeWriter code_;
|
||||
|
||||
public:
|
||||
PythonGRPCGenerator(const Parser &parser, const std::string &filename)
|
||||
: BaseGenerator(parser, "", filename, "", "" /*Unused*/, "swift") {}
|
||||
|
||||
bool generate() {
|
||||
code_.Clear();
|
||||
code_ +=
|
||||
"# Generated by the gRPC Python protocol compiler plugin. "
|
||||
"DO NOT EDIT!\n";
|
||||
code_ += "import grpc\n";
|
||||
|
||||
FlatBufFile file(parser_, file_name_, FlatBufFile::kLanguagePython);
|
||||
|
||||
for (int i = 0; i < file.service_count(); i++) {
|
||||
auto service = file.service(i);
|
||||
code_ += grpc_python_generator::Generate(&file, service.get());
|
||||
}
|
||||
const auto final_code = code_.ToString();
|
||||
const auto filename = GenerateFileName();
|
||||
return SaveFile(filename.c_str(), final_code, false);
|
||||
}
|
||||
|
||||
std::string GenerateFileName() {
|
||||
std::string namespace_dir;
|
||||
auto &namespaces = parser_.namespaces_.back()->components;
|
||||
for (auto it = namespaces.begin(); it != namespaces.end(); ++it) {
|
||||
if (it != namespaces.begin()) namespace_dir += kPathSeparator;
|
||||
namespace_dir += *it;
|
||||
}
|
||||
std::string grpc_py_filename = namespace_dir;
|
||||
if (!namespace_dir.empty()) grpc_py_filename += kPathSeparator;
|
||||
return grpc_py_filename + file_name_ + "_grpc_fb.py";
|
||||
}
|
||||
};
|
||||
|
||||
bool GeneratePythonGRPC(const Parser &parser, const std::string & /*path*/,
|
||||
const std::string &file_name) {
|
||||
bool GeneratePythonGRPC(const Parser &parser, const std::string &path,
|
||||
const std::string & /*file_name*/) {
|
||||
int nservices = 0;
|
||||
for (auto it = parser.services_.vec.begin(); it != parser.services_.vec.end();
|
||||
++it) {
|
||||
@@ -483,7 +444,16 @@ bool GeneratePythonGRPC(const Parser &parser, const std::string & /*path*/,
|
||||
}
|
||||
if (!nservices) return true;
|
||||
|
||||
return PythonGRPCGenerator(parser, file_name).generate();
|
||||
flatbuffers::python::Version version{parser.opts.python_version};
|
||||
if (!version.IsValid()) return false;
|
||||
|
||||
if (!flatbuffers::python::grpc::Generate(parser, path, version)) {
|
||||
return false;
|
||||
}
|
||||
if (parser.opts.python_typing) {
|
||||
return flatbuffers::python::grpc::GenerateStub(parser, path, version);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
class SwiftGRPCGenerator : public flatbuffers::BaseGenerator {
|
||||
|
||||
Reference in New Issue
Block a user