'Processes XML <datastore-index> nodes into Index objects.
The following information is parsed out:
kind: specifies the kind of entities to index.
ancestor: true if the index supports queries that filter by
ancestor-key to constraint results to a single entity group.
property: represents the entity properties to index, with a name
and direction attribute.
Args:
node: <datastore-index> XML node in datastore-indexes.xml.'

def ProcessIndexNode(self, node):

    if (node.tag != 'datastore-index'):
        self.errors.append(('Unrecognized    node:    <%s>' % node.tag))
        return
    index = Index()
    index.kind = node.attrib.get('kind', '')
    if (not index.kind):
        self.errors.append(MISSING_KIND)
    ancestor = node.attrib.get('ancestor', 'false')
    index.ancestor = _BooleanAttribute(ancestor)
    if (index.ancestor is None):
        self.errors.append(('Value    for    ancestor    should    be    true    or    false,    not    "%s"' % ancestor))
    properties = []
    property_nodes = [n for n in node.getchildren() if (n.tag == 'property')]
    for property_node in property_nodes:
        name = property_node.attrib.get('name', '')
        if (not name):
            self.errors.append((NAME_MISSING % index.kind))
            continue
        direction = property_node.attrib.get('direction', 'asc')
        if (direction not in ('asc', 'desc')):
            self.errors.append((BAD_DIRECTION % direction))
            continue
        properties.append(Property(name=name, direction=direction))
    index.properties = properties
    self.indexes.append(index)
