mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-07 15:14:15 +02:00
45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
import inspect
|
|
import os
|
|
import pkgutil
|
|
from typing import List
|
|
|
|
from bauh_api.abstract.controller import SoftwareManager, ApplicationContext
|
|
|
|
from bauh import __app_name__
|
|
from bauh.util import util
|
|
|
|
ignore_modules = {'{}_api'.format(__app_name__)}
|
|
ext_pattern = '{}_'.format(__app_name__)
|
|
|
|
|
|
def find_manager(member):
|
|
if not isinstance(member, str):
|
|
if inspect.isclass(member) and inspect.getmro(member)[1].__name__ == 'SoftwareManager':
|
|
return member
|
|
elif inspect.ismodule(member) and member.__name__ not in ignore_modules:
|
|
for name, mod in inspect.getmembers(member):
|
|
manager_found = find_manager(mod)
|
|
if manager_found:
|
|
return manager_found
|
|
|
|
|
|
def load_managers(locale: str, context: ApplicationContext) -> List[SoftwareManager]:
|
|
managers = []
|
|
|
|
for m in pkgutil.iter_modules():
|
|
if m.ispkg and m.name and m.name not in ignore_modules and m.name.startswith(ext_pattern):
|
|
module = pkgutil.find_loader(m.name).load_module()
|
|
|
|
if hasattr(module, 'controller'):
|
|
manager_class = find_manager(module.controller)
|
|
|
|
if manager_class:
|
|
locale_path = '{}/resources/locale'.format(module.__path__[0])
|
|
|
|
if os.path.exists(locale_path):
|
|
context.i18n.update(util.get_locale_keys(locale, locale_path))
|
|
|
|
managers.append(manager_class(context=context))
|
|
|
|
return managers
|