'Extract records from a timeline for processing.
This method acts as a context manager. The target of the ``as`` clause
is an iterator contains all of the records contained within the digest.
If the context manager successfully exits, all records that were part
of the digest are removed from the timeline and the timeline is placed
back in the "waiting" state. If an exception is raised during the
execution of the context manager, all records are preserved and no
state change occurs so that the next invocation will contain all
records that the were included previously, as well as any records that
were added in between invocations. (This means that the caller must
either retry the digest operation until it succeeds, or wait for the
operation to be rescheduled as part of the maintenance process for the
items to be processed.)
Typically, the block that is surrounded by context manager includes all
of the processing logic necessary to summarize the timeline contents
(since this process is generally has no side effects), while any
irrevocable action -- such as sending an email -- should occur after
the context manager has exited, to ensure that action is performed at
most once.
For example::
with timelines.digest(\'project:1\') as records:
message = build_digest_email(records)
message.send_async()'

def digest(self, key, minimum_delay=None):

    raise NotImplementedError
