'Record a new progress record, returning a key for later updates.
The specified progress information will be persisted into the database.
A unique key will be returned that identifies this progress state. The
key is later used to (quickly) update this record.
For the progress resumption to proceed properly, calls to StoreKeys
MUST specify monotonically increasing key ranges. This will result in
a database whereby the ID, KEY_START, and KEY_END rows are all
increasing (rather than having ranges out of order).
NOTE: the above precondition is NOT tested by this method (since it
would imply an additional table read or two on each invocation).
Args:
kind: The kind for the WorkItem
key_start: The starting key of the WorkItem (inclusive)
key_end: The end key of the WorkItem (inclusive)
Returns:
A string to later be used as a unique key to update this state.'

def StoreKeys(self, kind, key_start, key_end):

    self._OpenSecondaryConnection()
    assert _RunningInThread(self.secondary_thread)
    assert ((not key_start) or isinstance(key_start, self.py_type)), ('%s    is    a    %s,    %s    expected    %s' % (key_start, key_start.__class__, self.__class__.__name__, self.py_type))
    assert ((not key_end) or isinstance(key_end, self.py_type)), ('%s    is    a    %s,    %s    expected    %s' % (key_end, key_end.__class__, self.__class__.__name__, self.py_type))
    assert KeyLEQ(key_start, key_end), ('%s    not    less    than    %s' % (repr(key_start), repr(key_end)))
    self.insert_cursor.execute('insert    into    progress    (state,    kind,    key_start,    key_end)    values    (?,    ?,    ?,    ?)', (STATE_READ, unicode(kind), unicode(key_start), unicode(key_end)))
    progress_key = self.insert_cursor.lastrowid
    self._MaybeCommit()
    return progress_key
