mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-07 01:14:15 +02:00
refactoring and extension loading fix
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user