mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-15 00:38:52 +00:00
Working on a python example plus fixing python grpc code (#6456)
Refactored python grpc code gen Adds example server & client + fixes ci Fixes generated code Making sure we encode the reply string as utf8 Adds Readme details to clarify issue regarding encoding when python is sending/receiving
This commit is contained in:
@@ -24,7 +24,6 @@
|
||||
#include "src/compiler/go_generator.h"
|
||||
#include "src/compiler/java_generator.h"
|
||||
#include "src/compiler/python_generator.h"
|
||||
#include "src/compiler/python_private_generator.h"
|
||||
#include "src/compiler/swift_generator.h"
|
||||
#include "src/compiler/ts_generator.h"
|
||||
|
||||
@@ -412,6 +411,45 @@ 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) {
|
||||
int nservices = 0;
|
||||
@@ -421,28 +459,7 @@ bool GeneratePythonGRPC(const Parser &parser, const std::string & /*path*/,
|
||||
}
|
||||
if (!nservices) return true;
|
||||
|
||||
grpc_python_generator::GeneratorConfiguration config;
|
||||
config.grpc_package_root = "grpc";
|
||||
config.beta_package_root = "grpc.beta";
|
||||
config.import_prefix = "";
|
||||
|
||||
FlatBufFile fbfile(parser, file_name, FlatBufFile::kLanguagePython);
|
||||
|
||||
grpc_python_generator::PrivateGenerator generator(config, &fbfile);
|
||||
|
||||
std::string code = generator.GetGrpcServices();
|
||||
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;
|
||||
grpc_py_filename += file_name + "_grpc_fb.py";
|
||||
|
||||
return flatbuffers::SaveFile(grpc_py_filename.c_str(), code, false);
|
||||
return PythonGRPCGenerator(parser, file_name).generate();
|
||||
}
|
||||
|
||||
class SwiftGRPCGenerator : public flatbuffers::BaseGenerator {
|
||||
|
||||
Reference in New Issue
Block a user