refactoring and extension loading fix

This commit is contained in:
Vinicius Moreira
2019-08-12 18:24:27 -03:00
parent 1951a545c8
commit f432bfdd06
2 changed files with 28 additions and 25 deletions

View File

@@ -16,7 +16,7 @@ SUGGESTIONS_LIMIT = 6
class GenericApplicationManager(ApplicationManager): class GenericApplicationManager(ApplicationManager):
def __init__(self, managers: List[ApplicationManager], disk_loader_factory: DiskCacheLoaderFactory, app_args: Namespace, locale_keys: dict): 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.managers = managers
self.map = {m.get_app_type(): m for m in self.managers} self.map = {m.get_app_type(): m for m in self.managers}
self.disk_loader_factory = disk_loader_factory self.disk_loader_factory = disk_loader_factory

View File

@@ -8,45 +8,48 @@ from bauh_api.abstract.controller import ApplicationManager
from bauh_api.util.cache import Cache from bauh_api.util.cache import Cache
from bauh_api.util.http import HttpClient from bauh_api.util.http import HttpClient
from bauh import ROOT_DIR from bauh import ROOT_DIR, __app_name__
from bauh.util import util from bauh.util import util
ignore_modules = {'fpakman_api'} ignore_modules = {'{}_api'.format(__app_name__)}
ext_pattern = '{}_'.format(__app_name__)
def find_manager(member): def find_manager(member):
if inspect.isclass(member) and inspect.getmro(member)[1].__name__ == 'ApplicationManager': if not isinstance(member, str):
return member if inspect.isclass(member) and inspect.getmro(member)[1].__name__ == 'ApplicationManager':
elif inspect.ismodule(member) and member.__name__ not in ignore_modules: return member
for name, mod in inspect.getmembers(member): elif inspect.ismodule(member) and member.__name__ not in ignore_modules:
manager_found = find_manager(mod) for name, mod in inspect.getmembers(member):
if manager_found: manager_found = find_manager(mod)
return manager_found 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]: 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 = [] managers = []
for m in pkgutil.iter_modules(): 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() 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: if manager_class:
locale_path = '{}/resources/locale'.format(module.__path__[0]) locale_path = '{}/resources/locale'.format(module.__path__[0])
if os.path.exists(locale_path): if os.path.exists(locale_path):
locale_keys.update(util.get_locale_keys(app_args.locale, locale_path)) locale_keys.update(util.get_locale_keys(app_args.locale, locale_path))
app_cache = Cache(expiration_time=app_args.cache_exp) app_cache = Cache(expiration_time=app_args.cache_exp)
man = manager_class(app_args=app_args, man = manager_class(app_args=app_args,
fpakman_root_dir=ROOT_DIR, fpakman_root_dir=ROOT_DIR,
http_client=http_client, http_client=http_client,
locale_keys=locale_keys, locale_keys=locale_keys,
app_cache=app_cache) app_cache=app_cache)
cache_map[man.get_app_type()] = app_cache cache_map[man.get_app_type()] = app_cache
caches.append(app_cache) caches.append(app_cache)
managers.append(man) managers.append(man)
return managers return managers