Fix pyi top level messages/enums in public imports
Ported from https://github.com/protocolbuffers/protobuf/pull/13424
According to PEP 484 https://peps.python.org/pep-0484/#stub-files
Modules and variables imported into the stub are not considered exported from the stub unless the import uses the import ... as ... form or the equivalent from ... import ... as ... form.
PiperOrigin-RevId: 552945770
diff --git a/src/google/protobuf/compiler/python/pyi_generator.cc b/src/google/protobuf/compiler/python/pyi_generator.cc
index bc98b1f..8aec94d 100644
--- a/src/google/protobuf/compiler/python/pyi_generator.cc
+++ b/src/google/protobuf/compiler/python/pyi_generator.cc
@@ -283,14 +283,14 @@
std::string module_name = StrippedModuleName(public_dep->name());
// Top level messages in public imports
for (int i = 0; i < public_dep->message_type_count(); ++i) {
- printer_->Print("from $module$ import $message_class$\n", "module",
- module_name, "message_class",
- public_dep->message_type(i)->name());
+ printer_->Print(
+ "from $module$ import $message_class$ as $message_class$\n", "module",
+ module_name, "message_class", public_dep->message_type(i)->name());
}
// Top level enums for public imports
for (int i = 0; i < public_dep->enum_type_count(); ++i) {
- printer_->Print("from $module$ import $enum_class$\n", "module",
- module_name, "enum_class",
+ printer_->Print("from $module$ import $enum_class$ as $enum_class$\n",
+ "module", module_name, "enum_class",
public_dep->enum_type(i)->name());
}
}