'Extract the archive for this `toppath`.
Extract the archive to a new directory, adjust `toppath` to
point to the extracted directory, and return an
`ArchiveImportTask`. If extraction fails, return None.'

def unarchive(self):

    assert self.is_archive
    if (not (self.session.config['move'] or self.session.config['copy'])):
        log.warning(u"Archive    importing    requires    either    'copy'    or    'move'    to    be    enabled.")
        return
    log.debug(u'Extracting    archive:    {0}', displayable_path(self.toppath))
    archive_task = ArchiveImportTask(self.toppath)
    try:
        archive_task.extract()
    except Exception as exc:
        log.error(u'extraction    failed:    {0}', exc)
        return
    self.toppath = archive_task.toppath
    log.debug(u'Archive    extracted    to:    {0}', self.toppath)
    return archive_task
