def test_findlib(): """ Test finding of libs """ if not sys.platform.startswith('linux'): return # Candidate libs for common lib dirs, paths = core.findlib.generate_candidate_libs(['libpython']) assert paths # Candidate libs for common freeimage fi_dir = os.path.join(core.appdata_dir('imageio'), 'freeimage') dirs, paths = core.findlib.generate_candidate_libs(['libfreeimage'], [fi_dir]) assert fi_dir in dirs assert paths open(os.path.join(fi_dir, 'notalib.test.so'), 'wb') # Loading libs gllib = ctypes.util.find_library('GL') core.load_lib([gllib], []) core.load_lib([], ['libfreeimage'], [fi_dir]) # Fail raises(ValueError, core.load_lib, [], []) # Nothing given raises(ValueError, core.load_lib, ['', None], []) # Nothing given raises(OSError, core.load_lib, ['thislibdoesnotexist_foobar'], []) raises(OSError, core.load_lib, [], ['notalib'], [fi_dir])
def test_findlib2(): if not sys.platform.startswith("linux"): skip("test on linux only") need_internet() # need our own version of FI to test this bit # Candidate libs for common freeimage fi_dir = os.path.join(core.appdata_dir("imageio"), "freeimage") if not os.path.isdir(fi_dir): os.mkdir(fi_dir) dirs, paths = core.findlib.generate_candidate_libs(["libfreeimage"], [fi_dir]) # assert fi_dir in dirs -> Cannot test: lib may not exist assert paths open(os.path.join(fi_dir, "notalib.test.so"), "wb") # Loading libs gllib = ctypes.util.find_library("GL") core.load_lib([gllib], []) core.load_lib([], ["libfreeimage"], [fi_dir]) # Fail raises(ValueError, core.load_lib, [], []) # Nothing given raises(ValueError, core.load_lib, ["", None], []) # Nothing given raises(OSError, core.load_lib, ["thislibdoesnotexist_foobar"], []) raises(OSError, core.load_lib, [], ["notalib"], [fi_dir])
def test_findlib2(): if not sys.platform.startswith('linux'): skip('test on linux only') need_internet() # need our own version of FI to test this bit # Candidate libs for common freeimage fi_dir = os.path.join(core.appdata_dir('imageio'), 'freeimage') if not os.path.isdir(fi_dir): os.mkdir(fi_dir) dirs, paths = core.findlib.generate_candidate_libs(['libfreeimage'], [fi_dir]) #assert fi_dir in dirs -> Cannot test: lib may not exist assert paths open(os.path.join(fi_dir, 'notalib.test.so'), 'wb') # Loading libs gllib = ctypes.util.find_library('GL') core.load_lib([gllib], []) core.load_lib([], ['libfreeimage'], [fi_dir]) # Fail raises(ValueError, core.load_lib, [], []) # Nothing given raises(ValueError, core.load_lib, ['', None], []) # Nothing given raises(OSError, core.load_lib, ['thislibdoesnotexist_foobar'], []) raises(OSError, core.load_lib, [], ['notalib'], [fi_dir])
def _load_freeimage(self): # todo: we want to load from location relative to exe in frozen apps # Get lib dirs lib_dirs = [appdata_dir('imageio')] # Make sure that we have our binary version of the libary lib_filename = get_freeimage_lib() or 'notavalidlibname' # Load library lib_names = ['freeimage', 'libfreeimage'] exact_lib_names = [lib_filename, 'FreeImage', 'libfreeimage.dylib', 'libfreeimage.so', 'libfreeimage.so.3'] try: lib, fname = load_lib(exact_lib_names, lib_names, lib_dirs) except OSError: # pragma: no cover # Could not load. Get why e_type, e_value, e_tb = sys.exc_info() del e_tb load_error = str(e_value) err_msg = load_error + '\nPlease install the FreeImage library.' raise OSError(err_msg) # Store self._lib = lib self._lib_fname = fname
def test_get_fi_lib(vendored_lib, tmp_userdir): from imageio.plugins._freeimage import get_freeimage_lib add = core.appdata_dir("imageio") os.makedirs(add, exist_ok=True) shutil.copytree(vendored_lib, os.path.join(add, "freeimage")) lib = get_freeimage_lib() assert os.path.isfile(lib)
def get_test_dir(): global _the_test_dir if _the_test_dir is None: # Define dir from imageio.core import appdata_dir _the_test_dir = os.path.join(appdata_dir('imageio'), 'testdir') # Clear and create it now clean_test_dir(True) os.makedirs(_the_test_dir) # And later atexit.register(clean_test_dir) return _the_test_dir
def get_test_dir(): global _the_test_dir if _the_test_dir is None: # Define dir from imageio.core import appdata_dir _the_test_dir = os.path.join(appdata_dir('imageio'), 'testdir') # Clear it now if os.path.isdir(_the_test_dir): shutil.rmtree(_the_test_dir) os.makedirs(_the_test_dir) # And later atexit.register(lambda x=None: shutil.rmtree(_the_test_dir)) return _the_test_dir
def setup_library(tmp_path_factory, vendored_lib): # Checks if freeimage is installed by the system from imageio.plugins.freeimage import fi use_imageio_binary = not fi.has_lib() # During this test, pretend that FI is the default format imageio.formats.sort("-FI") if use_imageio_binary: if sys.platform.startswith("win"): user_dir_env = "LOCALAPPDATA" else: user_dir_env = "IMAGEIO_USERDIR" # Setup from test_images/freeimage ud = tmp_path_factory.mktemp("userdir") old_user_dir = os.getenv(user_dir_env, None) os.environ[user_dir_env] = str(ud) os.makedirs(ud, exist_ok=True) add = core.appdata_dir("imageio") os.makedirs(add, exist_ok=True) shutil.copytree(vendored_lib, os.path.join(add, "freeimage")) fi.load_freeimage() assert fi.has_lib( ), "imageio-binaries' version of libfreeimage was not found" yield if use_imageio_binary: if old_user_dir is not None: os.environ[user_dir_env] = old_user_dir else: del os.environ[user_dir_env] # Sort formats back to normal imageio.formats.sort()