Reimplemented from QtCore.QAbstractItemModel

        The internal pointer is the section.
        The row determines the key in the scalars then sections of the configobj.
        So for a given index, use row to retrieve the key::

          key = self.get_key(index.internalPointer(), index.row())

        To use the key on the section to get the value OR
        use get_value(index) / get_configspec_str

def index(self, row, column, parent):
        """Reimplemented from QtCore.QAbstractItemModel

        The internal pointer is the section.
        The row determines the key in the scalars then sections of the configobj.
        So for a given index, use row to retrieve the key::

          key = self.get_key(index.internalPointer(), index.row())

        To use the key on the section to get the value OR
        use get_value(index) / get_configspec_str

        """
        if not parent.isValid():
            s = self._conf
        else:
            p = parent.internalPointer()
            k = self.get_key(p, parent.row())
            s = p[k]
        return self.createIndex(row, column, s)