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:
mustiikhalil
2021-02-26 01:38:12 +03:00
committed by GitHub
parent c0be1cb7a5
commit 8142fedd19
15 changed files with 443 additions and 692 deletions

View File

@@ -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 {