Warning

This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.

Source code for galaxy.tool_util.verify.asserts.archive

import io
import re
import tarfile
import zipfile


def _extract_from_tar(tar_temp, path):
    for fn in tar_temp.getnames():
        if re.match(path, fn):
            # Will only match on first hit, probably fine for now
            return tar_temp.extractfile(fn)


def _extract_from_zip(zip_temp, path):
    for fn in zip_temp.namelist():
        if re.match(path, fn):
            # Will only match on first hit, probably fine for now
            return zip_temp.open(fn)


[docs]def assert_has_archive_member(output_bytes, path, verify_assertions_function, children): """ Recursively checks the specified children assertions against the text of the first element matching the specified path found within the archive. Currently supported formats: .zip, .tar, .tar.gz.""" output_temp = io.BytesIO(output_bytes) try: # tar / tar.gz temp = tarfile.open(fileobj=output_temp, mode='r') contents = _extract_from_tar(temp, path) except tarfile.TarError: # zip temp = zipfile.ZipFile(output_temp, mode='r') contents = _extract_from_zip(temp, path) finally: verify_assertions_function(contents.read(), children) contents.close() temp.close() output_temp.close()