def setup(self):
   self.my_file = descriptor.filedescriptor(
       name='some/filename/some.proto',
       package='protobuf_unittest'
       )
   self.my_enum = descriptor.enumdescriptor(
       name='foreignenum',
       full_name='protobuf_unittest.foreignenum',
       filename=none,
       file=self.my_file,
       values=[
         descriptor.enumvaluedescriptor(name='foreign_foo', index=0, number=4),
         descriptor.enumvaluedescriptor(name='foreign_bar', index=1, number=5),
         descriptor.enumvaluedescriptor(name='foreign_baz', index=2, number=6),
       ])
   self.my_message = descriptor.descriptor(
       name='nestedmessage',
       full_name='protobuf_unittest.testalltypes.nestedmessage',
       filename=none,
       file=self.my_file,
       containing_type=none,
       fields=[
         descriptor.fielddescriptor(
           name='bb',
           full_name='protobuf_unittest.testalltypes.nestedmessage.bb',
           index=0, number=1,
           type=5, cpp_type=1, label=1,
           has_default_value=false, default_value=0,
           message_type=none, enum_type=none, containing_type=none,
           is_extension=false, extension_scope=none),
       ],
       nested_types=[],
       enum_types=[
         self.my_enum,
       ],
       extensions=[])
   self.my_method = descriptor.methoddescriptor(
       name='bar',
       full_name='protobuf_unittest.testservice.bar',
       index=0,
       containing_service=none,
       input_type=none,
       output_type=none)
   self.my_service = descriptor.servicedescriptor(
       name='testservicewithoptions',
       full_name='protobuf_unittest.testservicewithoptions',
       file=self.my_file,
       index=0,
       methods=[
           self.my_method
       ])
  def _makefielddescriptor(self, field_proto, message_name, index,
                           is_extension=false):
    """creates a field descriptor from a fielddescriptorproto.

    for message and enum type fields, this method will do a look up
    in the pool for the appropriate descriptor for that type. if it
    is unavailable, it will fall back to the _source function to
    create it. if this type is still unavailable, construction will
    fail.

    args:
      field_proto: the proto describing the field.
      message_name: the name of the containing message.
      index: index of the field
      is_extension: indication that this field is for an extension.

    returns:
      an initialized fielddescriptor object
    """

    if message_name:
      full_name = '.'.join((message_name, field_proto.name))
    else:
      full_name = field_proto.name

    return descriptor.fielddescriptor(
        name=field_proto.name,
        full_name=full_name,
        index=index,
        number=field_proto.number,
        type=field_proto.type,
        cpp_type=none,
        message_type=none,
        enum_type=none,
        containing_type=none,
        label=field_proto.label,
        has_default_value=false,
        default_value=none,
        is_extension=is_extension,
        extension_scope=none,
        options=field_proto.options)