'Parse an on disk file name.
:param filename: the file name including extension
:returns: a dict, with keys for timestamp, ext and ctype_timestamp:
* timestamp is a :class:`~swift.common.utils.Timestamp`
* ctype_timestamp is a :class:`~swift.common.utils.Timestamp` or
None for .meta files, otherwise None
* ext is a string, the file extension including the leading dot or
the empty string if the filename has no extension.
Subclasses may override this method to add further keys to the
returned dict.
:raises DiskFileError: if any part of the filename is not able to be
validated.'

def parse_on_disk_filename(self, filename):

    ts_ctype = None
    (fname, ext) = splitext(filename)
    try:
        if (ext == '.meta'):
            (timestamp, ts_ctype) = decode_timestamps(fname, explicit=True)[:2]
        else:
            timestamp = Timestamp(fname)
    except ValueError:
        raise DiskFileError(('Invalid    Timestamp    value    in    filename    %r' % filename))
    return {'timestamp': timestamp, 'ext': ext, 'ctype_timestamp': ts_ctype}
