Package google :: Package protobuf :: Module reflection
[frames] | no frames]

Module reflection

source code

Contains a metaclass and helper functions used to create protocol message classes from Descriptor objects at runtime.

Recall that a metaclass is the "type" of a class. (A class is to a metaclass what an instance is to a class.)

In this case, we use the GeneratedProtocolMessageType metaclass to inject all the useful functionality into the classes output by the protocol compiler at compile-time.

The upshot of all this is that the real implementation details for ALL pure-Python protocol buffers are *here in this file*.


Author: robinson@google.com (Will Robinson)

Classes
  GeneratedProtocolMessageType
Metaclass for protocol message classes created at runtime from Descriptors.
Functions
 
ParseMessage(descriptor, byte_str)
Generate a new Message instance from this Descriptor and a byte string.
source code
 
MakeClass(descriptor)
Construct a class object for a protobuf described by descriptor.
source code
Variables
  __package__ = 'google.protobuf'
Function Details

ParseMessage(descriptor, byte_str)

source code 
Generate a new Message instance from this Descriptor and a byte string.

Args:
  descriptor: Protobuf Descriptor object
  byte_str: Serialized protocol buffer byte string

Returns:
  Newly created protobuf Message object.

MakeClass(descriptor)

source code 
Construct a class object for a protobuf described by descriptor.

Composite descriptors are handled by defining the new class as a member of the
parent class, recursing as deep as necessary.
This is the dynamic equivalent to:

class Parent(message.Message):
  __metaclass__ = GeneratedProtocolMessageType
  DESCRIPTOR = descriptor
  class Child(message.Message):
    __metaclass__ = GeneratedProtocolMessageType
    DESCRIPTOR = descriptor.nested_types[0]

Sample usage:
  file_descriptor = descriptor_pb2.FileDescriptorProto()
  file_descriptor.ParseFromString(proto2_string)
  msg_descriptor = descriptor.MakeDescriptor(file_descriptor.message_type[0])
  msg_class = reflection.MakeClass(msg_descriptor)
  msg = msg_class()

Args:
  descriptor: A descriptor.Descriptor object describing the protobuf.
Returns:
  The Message class object described by the descriptor.