def extract_zip(filename, extract_dir):
    """ Extract the sources in a temporary folder.
    :arg filename, name of the zip file containing the data from MapQTL
    which will be extracted
    :arg extract_dir, folder in which to extract the archive.
    """
    LOG.info("Extracting %s in %s " % (filename, extract_dir))
    if not os.path.exists(extract_dir):
        try:
            os.mkdir(extract_dir)
        except IOError as err:  # pragma: no cover
            LOG.info("Could not generate the folder %s" % extract_dir)
            LOG.debug("Error: %s" % err)
            return

    if zipfile.is_zipfile(filename):
        try:
            zfile = zipfile.ZipFile(filename, "r")
            for name in zfile.namelist():
                if os.path.dirname(name):
                    curdir = os.path.join(extract_dir, os.path.dirname(name))
                    if not os.path.exists(curdir):
                        os.mkdir(curdir)
                        continue
                outfile = open(os.path.join(extract_dir, name), 'wb')
                outfile.write(zfile.read(name))
                outfile.flush()
                outfile.close()
            zfile.close()
        except IOError as err:  # pragma: no cover
            LOG.info("Error while extracting the zip archive.")
            LOG.debug("Error: %s" % err)
    else:
        try:  # pragma: no cover  We only have zipfile to test with
            tar = tarfile.open(filename)
            tar.extractall(extract_dir)
            tar.close()
        except tarfile.ReadError as err:  # pragma: no cover
            LOG.info("Error while extracting the tarball.")
            LOG.debug("Error: %s" % err)

    return extract_dir