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)
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)
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
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