Newer
Older
navi-1 / navi / workers / __init__.py
from .base import Worker, WorkerContext, WorkerResult
from .compressor import CompressionWorker


def build_default_workers() -> list[Worker]:
    """Auto-discover and instantiate all built-in workers."""
    import importlib
    import inspect
    from pathlib import Path

    workers: list[Worker] = []
    pkg_dir = Path(__file__).parent

    for py_file in sorted(pkg_dir.glob("*.py")):
        if py_file.name.startswith("_"):
            continue
        mod_name = f"navi.workers.{py_file.stem}"
        try:
            mod = importlib.import_module(mod_name)
        except Exception:
            continue
        for _name, obj in inspect.getmembers(mod):
            if (
                inspect.isclass(obj)
                and issubclass(obj, Worker)
                and obj is not Worker
                and not getattr(obj, "__abstractmethods__", None)
            ):
                try:
                    instance = obj()
                    workers.append(instance)
                except Exception:
                    pass

    return workers


__all__ = [
    "Worker",
    "WorkerContext",
    "WorkerResult",
    "CompressionWorker",
    "build_default_workers",
]