| """
|
| Compatibility layer providing ``google.protobuf.internal.builder`` for environments
|
| where the upstream package omits the helper (older SentencePiece protobuf stubs expect it).
|
|
|
| This module mirrors the implementation shipped with protobuf 3.x so generated *_pb2.py
|
| files can import ``builder`` without adjusting the global installation.
|
| """
|
|
|
| from google.protobuf import message as _message
|
| from google.protobuf import reflection as _reflection
|
| from google.protobuf import symbol_database as _symbol_database
|
| from google.protobuf.internal import enum_type_wrapper
|
|
|
| _sym_db = _symbol_database.Default()
|
|
|
|
|
| def BuildMessageAndEnumDescriptors(file_des, module):
|
| """Populate message and enum descriptors on the generated module."""
|
|
|
| def _build_nested_descriptors(msg_des, prefix):
|
| for name, nested_msg in msg_des.nested_types_by_name.items():
|
| module_name = prefix + name.upper()
|
| module[module_name] = nested_msg
|
| _build_nested_descriptors(nested_msg, module_name + "_")
|
| for enum_des in msg_des.enum_types:
|
| module[prefix + enum_des.name.upper()] = enum_des
|
|
|
| for name, msg_des in file_des.message_types_by_name.items():
|
| module_name = "_" + name.upper()
|
| module[module_name] = msg_des
|
| _build_nested_descriptors(msg_des, module_name + "_")
|
|
|
|
|
| def BuildTopDescriptorsAndMessages(file_des, module_name, module):
|
| """Create message classes and top-level descriptors on the generated module."""
|
|
|
| def _build_message(msg_des):
|
| attrs = {}
|
| for name, nested_msg in msg_des.nested_types_by_name.items():
|
| attrs[name] = _build_message(nested_msg)
|
| attrs["DESCRIPTOR"] = msg_des
|
| attrs["__module__"] = module_name
|
| message_class = _reflection.GeneratedProtocolMessageType(
|
| msg_des.name,
|
| (_message.Message,),
|
| attrs,
|
| )
|
| _sym_db.RegisterMessage(message_class)
|
| return message_class
|
|
|
| for name, enum_des in file_des.enum_types_by_name.items():
|
| module["_" + name.upper()] = enum_des
|
| module[name] = enum_type_wrapper.EnumTypeWrapper(enum_des)
|
| for enum_value in enum_des.values:
|
| module[enum_value.name] = enum_value.number
|
|
|
| for name, extension_des in file_des.extensions_by_name.items():
|
| module[name.upper() + "_FIELD_NUMBER"] = extension_des.number
|
| module[name] = extension_des
|
|
|
| for name, service in file_des.services_by_name.items():
|
| module["_" + name.upper()] = service
|
|
|
| for name, msg_des in file_des.message_types_by_name.items():
|
| module[name] = _build_message(msg_des)
|
|
|
|
|
| def BuildServices(file_des, module_name, module):
|
| """Expose service stubs for generated proto files."""
|
|
|
| from google.protobuf import service as _service
|
| from google.protobuf import service_reflection
|
|
|
| for name, service in file_des.services_by_name.items():
|
| module[name] = service_reflection.GeneratedServiceType(
|
| name,
|
| (_service.Service,),
|
| {"DESCRIPTOR": service, "__module__": module_name},
|
| )
|
| stub_name = name + "_Stub"
|
| module[stub_name] = service_reflection.GeneratedServiceStubType(
|
| stub_name,
|
| (module[name],),
|
| {"DESCRIPTOR": service, "__module__": module_name},
|
| )
|
|
|
|
|
| __all__ = [
|
| "BuildMessageAndEnumDescriptors",
|
| "BuildTopDescriptorsAndMessages",
|
| "BuildServices",
|
| ]
|
|
|