mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-10 07:06:26 +00:00
Decode bytes to strings in Python Object API (#8551)
This commit is contained in:
@@ -256,6 +256,7 @@ const static FlatCOption flatc_options[] = {
|
||||
"Skip emission of Python functions that are prefixed with typenames" },
|
||||
{ "", "python-typing", "", "Generate Python type annotations" },
|
||||
{ "", "python-version", "", "Generate code for the given Python version." },
|
||||
{ "", "python-decode-obj-api-strings", "", "Decode bytes to strings for the Python Object API"},
|
||||
{ "", "python-gen-numpy", "", "Whether to generate numpy helpers." },
|
||||
{ "", "ts-omit-entrypoint", "",
|
||||
"Omit emission of namespace entrypoint file" },
|
||||
@@ -682,6 +683,8 @@ FlatCOptions FlatCompiler::ParseFromCommandLineArguments(int argc,
|
||||
} else if (arg == "--python-version") {
|
||||
if (++argi >= argc) Error("missing value following: " + arg, true);
|
||||
opts.python_version = argv[argi];
|
||||
} else if (arg == "--python-decode-obj-api-strings") {
|
||||
opts.python_decode_obj_api_strings = true;
|
||||
} else if (arg == "--python-gen-numpy" ||
|
||||
arg == "--python-gen-numpy=true") {
|
||||
opts.python_gen_numpy = true;
|
||||
|
||||
@@ -2028,6 +2028,20 @@ class PythonGenerator : public BaseGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
void GenUnPackForString(const StructDef &struct_def, const FieldDef &field,
|
||||
std::string *code_ptr) const {
|
||||
auto &code = *code_ptr;
|
||||
const auto field_field = namer_.Field(field);
|
||||
const auto field_method = namer_.Method(field);
|
||||
const auto struct_var = namer_.Variable(struct_def);
|
||||
|
||||
code += GenIndents(2) + "self." + field_field + " = " + struct_var + "." +
|
||||
field_method + "()";
|
||||
code += GenIndents(2) + "if self." + field_field + " is not None:";
|
||||
code += GenIndents(3) + "self." + field_field + " = self." + field_field +
|
||||
".decode('utf-8')";
|
||||
}
|
||||
|
||||
void GenUnPackForScalar(const StructDef &struct_def, const FieldDef &field,
|
||||
std::string *code_ptr) const {
|
||||
auto &code = *code_ptr;
|
||||
@@ -2070,6 +2084,14 @@ class PythonGenerator : public BaseGenerator {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case BASE_TYPE_STRING: {
|
||||
if (parser_.opts.python_decode_obj_api_strings) {
|
||||
GenUnPackForString(struct_def, field, &code);
|
||||
} else {
|
||||
GenUnPackForScalar(struct_def, field, &code);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default: GenUnPackForScalar(struct_def, field, &code);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user