Ejemplo n.º 1
0
def per_test_store():
    from mbf_externals import ExternalAlgorithmStore, change_global_store

    base = Path("store").absolute()
    unpacked = base / "unpacked"
    if unpacked.exists():  # pragma: no cover
        shutil.rmtree(unpacked)
    unpacked.mkdir(exist_ok=False, parents=True)
    (base / "zipped").mkdir(exist_ok=True)
    store = ExternalAlgorithmStore(base / "zipped", unpacked)
    change_global_store(store)
    yield store
    if unpacked.exists():
        shutil.rmtree(unpacked)
Ejemplo n.º 2
0
def local_store():
    from mbf_externals import ExternalAlgorithmStore, change_global_store

    base = Path(__file__).parent.parent.parent.parent / "tests"
    unpacked = base / "unpacked"
    if unpacked.exists():  # pragma: no cover
        shutil.rmtree(unpacked)
    unpacked.mkdir()
    store = ExternalAlgorithmStore(base / "zipped",
                                   unpacked,
                                   no_downloads=True)
    change_global_store(store)
    yield store
    if unpacked.exists():
        shutil.rmtree(unpacked)
Ejemplo n.º 3
0
def per_run_store():
    from mbf_externals import ExternalAlgorithmStore, change_global_store

    global rm_registered

    base = Path(
        __file__).parent.parent.parent.parent / "tests" / "run" / "store"
    unpacked = base / "unpacked"
    unpacked.mkdir(exist_ok=True, parents=True)
    (base / "zipped").mkdir(exist_ok=True)
    store = ExternalAlgorithmStore(base / "zipped", unpacked)
    change_global_store(store)
    yield store
    import atexit

    if not rm_registered:
        rm_registered = True
        atexit.register(lambda: shutil.rmtree(base))
    def test_hashsum_checking_against_other_machines(self, new_pipegraph):
        from mbf_externals import (
            ExternalAlgorithmStore,
            change_global_store,
        )
        from mbf_externals.externals import DownloadDiscrepancyException

        Path("store1/zipped").mkdir(parents=True)
        Path("store1/extracted").mkdir(parents=True)
        Path("store2/zipped").mkdir(parents=True)
        Path("store2/extracted").mkdir(parents=True)

        store = ExternalAlgorithmStore("store1/zipped", "store1/extracted")
        change_global_store(store)
        SelfFetchingAlgorithmRandomFileEachTime()  # which 'downloads' one file.
        store = ExternalAlgorithmStore("store2/zipped", "store2/extracted")
        change_global_store(store)
        with pytest.raises(DownloadDiscrepancyException):
            SelfFetchingAlgorithmRandomFileEachTime()  # which 'downloads' a different file and explodes
Ejemplo n.º 5
0

if __name__ == "__main__":
    try:
        target_dir = Path(sys.argv[1])
    except IndexError:
        if "VIRTUAL_ENV" in os.environ:
            zipped = Path(os.environ["VIRTUAL_ENV"]) / "mbf_store" / "zip"
            target_dir = zipped
            target_dir.mkdir(exist_ok=True, parents=True)
        else:
            print_usage("NO VIRTUAL_ENV active")
    if not (target_dir.exists() and target_dir.is_dir()):
        print_usage("<dir> was not a directory")
    print("Downloading into", str(target_dir.absolute()))
    sys.path.insert(0, str((Path(__file__).parent.parent / "src").absolute()))
    import mbf_externals

    store = mbf_externals.ExternalAlgorithmStore(target_dir, "doesnotexist")
    mbf_externals.change_global_store(store)
    for sc in all_subclasses(mbf_externals.ExternalAlgorithm):
        if hasattr(sc, "fetch_version"):
            try:
                x = sc(version="_fetching")
                print("fetching", x.name)
            except TypeError as e:
                if "abstract class" in str(e):
                    pass
                else:
                    raise