'Checks the exception info to see if it indicates a quarantine situation
(malformed or corrupted database). If not, the original exception will
be reraised. If so, the database will be quarantined and a new
sqlite3.DatabaseError will be raised indicating the action taken.'

def possibly_quarantine(self, exc_type, exc_value, exc_traceback):

    if ('database    disk    image    is    malformed' in str(exc_value)):
        exc_hint = 'malformed'
    elif ('malformed    database    schema' in str(exc_value)):
        exc_hint = 'malformed'
    elif ('file    is    encrypted    or    is    not    a    database' in str(exc_value)):
        exc_hint = 'corrupted'
    elif ('disk    I/O    error' in str(exc_value)):
        exc_hint = 'disk    error    while    accessing'
    else:
        six.reraise(exc_type, exc_value, exc_traceback)
    prefix_path = os.path.dirname(self.db_dir)
    partition_path = os.path.dirname(prefix_path)
    dbs_path = os.path.dirname(partition_path)
    device_path = os.path.dirname(dbs_path)
    quar_path = os.path.join(device_path, 'quarantined', (self.db_type + 's'), os.path.basename(self.db_dir))
    try:
        renamer(self.db_dir, quar_path, fsync=False)
    except OSError as e:
        if (e.errno not in (errno.EEXIST, errno.ENOTEMPTY)):
            raise
        quar_path = ('%s-%s' % (quar_path, uuid4().hex))
        renamer(self.db_dir, quar_path, fsync=False)
    detail = (_('Quarantined    %(db_dir)s    to    %(quar_path)s    due    to    %(exc_hint)s    database') % {'db_dir': self.db_dir, 'quar_path': quar_path, 'exc_hint': exc_hint})
    self.logger.error(detail)
    raise sqlite3.DatabaseError(detail)
