@classmethod
  def _MessageFields(cls, message_fields_schema, allow_message_fields=True):
    message_fields = {}
    for index, name in enumerate(message_fields_schema):
      field_index = index + 1
      prop = _VerifyProperty(cls, name)
      to_proto = cls._property_to_proto.get(prop.__class__)

      if to_proto is None:
        raise AttributeError('%s does not have a proto mapping for %s.' %
                             (cls.__name__, prop.__class__.__name__))

      if utils.IsSimpleField(to_proto):
        proto_attr = ndb_utils.MessageFromSimpleField(to_proto, prop,
                                                      field_index)
      elif callable(to_proto):
        proto_attr = to_proto(prop, field_index)
      else:
        raise TypeError('Proto mapping for %s was invalid. Received %s, which '
                        'was neither a ProtoRPC field, nor a callable object.' %
                        (name, to_proto))

      if not allow_message_fields:
        if isinstance(proto_attr, messages.MessageField):
          error_msg = NO_MSG_FIELD_TEMPLATE % (proto_attr.__class__.__name__,)
          raise TypeError(error_msg)

      message_fields[name] = proto_attr

    return message_fields
Returns the ID of the active task in the layout, or None if there is
dataset/ETHPy150Open GoogleDeveloperExperts/experts-app-backend/endpoints_proto_datastore/ndb/model.py/EndpointsModel._MessageFields--crossover with--dataset/ETHPy150Open enthought/pyface/pyface/tasks/task_window_layout.py/TaskWindowLayout.get_active_task