diff --git a/bauh/core/controller.py b/bauh/core/controller.py index f2810825..074b958f 100755 --- a/bauh/core/controller.py +++ b/bauh/core/controller.py @@ -16,7 +16,7 @@ SUGGESTIONS_LIMIT = 6 class GenericApplicationManager(ApplicationManager): def __init__(self, managers: List[ApplicationManager], disk_loader_factory: DiskCacheLoaderFactory, app_args: Namespace, locale_keys: dict): - super(GenericApplicationManager, self).__init__(app_args=app_args, app_cache=None, locale_keys=locale_keys, fpakman_root_dir=ROOT_DIR, http_client=None) + super(GenericApplicationManager, self).__init__(app_args=app_args, app_cache=None, locale_keys=locale_keys, app_root_dir=ROOT_DIR, http_client=None) self.managers = managers self.map = {m.get_app_type(): m for m in self.managers} self.disk_loader_factory = disk_loader_factory diff --git a/bauh/core/extensions.py b/bauh/core/extensions.py index c44111ad..88fd6a9c 100644 --- a/bauh/core/extensions.py +++ b/bauh/core/extensions.py @@ -8,45 +8,48 @@ from bauh_api.abstract.controller import ApplicationManager from bauh_api.util.cache import Cache from bauh_api.util.http import HttpClient -from bauh import ROOT_DIR +from bauh import ROOT_DIR, __app_name__ from bauh.util import util -ignore_modules = {'fpakman_api'} +ignore_modules = {'{}_api'.format(__app_name__)} +ext_pattern = '{}_'.format(__app_name__) def find_manager(member): - if inspect.isclass(member) and inspect.getmro(member)[1].__name__ == 'ApplicationManager': - 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 + if not isinstance(member, str): + if inspect.isclass(member) and inspect.getmro(member)[1].__name__ == 'ApplicationManager': + 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(caches: List[Cache], cache_map: Dict[type, Cache], locale_keys: Dict[str, str], app_args: Namespace, http_client: HttpClient) -> List[ApplicationManager]: managers = [] for m in pkgutil.iter_modules(): - if m.ispkg and m.name and m.name not in ignore_modules and m.name.startswith('fpakman_'): + 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() - manager_class = find_manager(module) + if hasattr(module, 'controller'): + manager_class = find_manager(module.controller) - if manager_class: - locale_path = '{}/resources/locale'.format(module.__path__[0]) + if manager_class: + locale_path = '{}/resources/locale'.format(module.__path__[0]) - if os.path.exists(locale_path): - locale_keys.update(util.get_locale_keys(app_args.locale, locale_path)) + if os.path.exists(locale_path): + locale_keys.update(util.get_locale_keys(app_args.locale, locale_path)) - app_cache = Cache(expiration_time=app_args.cache_exp) - man = manager_class(app_args=app_args, - fpakman_root_dir=ROOT_DIR, - http_client=http_client, - locale_keys=locale_keys, - app_cache=app_cache) - cache_map[man.get_app_type()] = app_cache - caches.append(app_cache) - managers.append(man) + app_cache = Cache(expiration_time=app_args.cache_exp) + man = manager_class(app_args=app_args, + fpakman_root_dir=ROOT_DIR, + http_client=http_client, + locale_keys=locale_keys, + app_cache=app_cache) + cache_map[man.get_app_type()] = app_cache + caches.append(app_cache) + managers.append(man) return managers