'Parse a status log entry from a text string.
This method is the inverse of render; it should always be true that
parse(entry.render()) produces a new status_log_entry equivalent to
entry.
:returns: A new status_log_entry instance with fields extracted from
the given status line. If the line is an extra message line
then None is returned.'

@classmethod
def parse(cls, line):

    if line.startswith('        '):
        return None
    line = line.lstrip(' DCTB ')
    entry_parts = line.split(' DCTB ')
    if (len(entry_parts) < 4):
        raise ValueError(('%r    is    not    a    valid    status    line' % line))
    (status_code, subdir, operation) = entry_parts[:3]
    if (subdir == cls.RENDERED_NONE_VALUE):
        subdir = None
    if (operation == cls.RENDERED_NONE_VALUE):
        operation = None
    message = entry_parts[(-1)]
    fields = dict((part.split('=', 1) for part in entry_parts[3:(-1)]))
    if (cls.TIMESTAMP_FIELD in fields):
        timestamp = int(fields[cls.TIMESTAMP_FIELD])
    else:
        timestamp = None
    return cls(status_code, subdir, operation, message, fields, timestamp)
