pupilsense / registry_utils.py
vijul.shah
End-to-End Pipeline Configured
0f2d9f6
raw
history blame
2.7 kB
import os
import importlib
from os import path as osp
def scandir(dir_path, suffix=None, recursive=False, full_path=False):
"""Scan a directory to find the interested files.
Args:
dir_path (str): Path of the directory.
suffix (str | tuple(str), optional): File suffix that we are
interested in. Default: None.
recursive (bool, optional): If set to True, recursively scan the
directory. Default: False.
full_path (bool, optional): If set to True, include the dir_path.
Default: False.
Returns:
A generator for all the interested files with relative paths.
"""
if (suffix is not None) and not isinstance(suffix, (str, tuple)):
raise TypeError('"suffix" must be a string or tuple of strings')
root = dir_path
def _scandir(dir_path, suffix, recursive):
for entry in os.scandir(dir_path):
if not entry.name.startswith(".") and entry.is_file():
if full_path:
return_path = entry.path
else:
return_path = osp.relpath(entry.path, root)
if suffix is None:
yield return_path
elif return_path.endswith(suffix):
yield return_path
else:
if recursive:
yield from _scandir(entry.path, suffix=suffix, recursive=recursive)
else:
continue
return _scandir(dir_path, suffix=suffix, recursive=recursive)
def import_registered_modules(registration_folder="registrations"):
"""
Import all registered modules from the specified folder.
This function automatically scans all the files under the specified folder and imports all the required modules for registry.
Parameters:
registration_folder (str, optional): Path to the folder containing registration modules. Default is "registrations".
Returns:
list: List of imported modules.
"""
# print("\n")
registration_modules_folder = (
osp.dirname(osp.abspath(__file__)) + f"/{registration_folder}"
)
# print("registration_modules_folder = ", registration_modules_folder)
registration_modules_file_names = [
osp.splitext(osp.basename(v))[0]
for v in scandir(dir_path=registration_modules_folder)
]
# print("registration_modules_file_names = ", registration_modules_file_names)
imported_modules = [
importlib.import_module(f"{registration_folder}.{file_name}")
for file_name in registration_modules_file_names
]
# print("imported_modules = ", imported_modules)
# print("\n")