Source code for brainaccess.libload

import platform
import ctypes
import pathlib

from ctypes.util import find_library
from os import getcwd
from os.path import join
from shutil import which

from brainaccess.utils.exceptions import BrainAccessException

_lib_directory = pathlib.Path(__file__).parent / "lib"


[docs] def get_lib_name(name: str) -> str: platform_name = platform.uname()[0] if platform_name == "Windows": return name + ".dll" elif platform_name == "Linux": return "lib" + name + ".so" else: raise BrainAccessException(f'Unsupported platform "{platform_name}"')
[docs] def load_library(name: str) -> ctypes.CDLL: dll_name = get_lib_name(name) try: onlyfiles = [file.name for file in pathlib.Path(getcwd()).glob("*")] if dll_name in onlyfiles: return ctypes.CDLL(join(getcwd(), dll_name)) onlyfiles = [file.name for file in _lib_directory.glob("*")] if dll_name in onlyfiles: return ctypes.CDLL(join(_lib_directory, dll_name)) _lib = find_library(dll_name) if _lib: return ctypes.CDLL(_lib) lib = which(dll_name) if lib: return ctypes.CDLL(lib) raise BrainAccessException("Could not find " + dll_name) except OSError: raise BrainAccessException("Could not load " + dll_name) except Exception as e: raise BrainAccessException("Could not load " + dll_name + " " + str(e))