def get_exports(mod: Union[ModuleType, str]) -> Iterable[Member]:
    """Get all exports in the given path.

    Exports are values whose names are in the `__all__` special variable of
    their owning module.

    Args:
        path: The path to search for exports. Can be iterable of paths in case
            of namespace package paths.

        prefix: If given, only exports from modules that match this
            prefix are returned.

    Returns:
        Iterable of namedtuples (modname, qualname, val) where modname is the
            module name, qualname is the fully qualified name of the member and
            val is the value of the member.
    """

    if isinstance(mod, str):
        try:
            mod = importlib.import_module(mod)
        except Exception:
            return

    for modname in get_submodule_names(mod):
        if inspect.getattr_static(mod, "__all__", None) is None:
            continue

        for name in mod.__all__:
            val = getattr(mod, name)
            qualname = modname + "." + name
            yield Member(
                mod, name=name, qualname=qualname, val=val, typ=type(val)
            )
Get all exports in the given path.

    Exports are values whose names are in the `__all__` special variable of
    their owning module.

    Args:
        path: The path to search for exports. Can be iterable of paths in case
            of namespace package paths.

        prefix: If given, only exports from modules that match this
            prefix are returned.

    Returns:
        Iterable of namedtuples (modname, qualname, val) where modname is the
            module name, qualname is the fully qualified name of the member and
            val is the value of the member.
    
tests/utils.py