mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-07 03:34:15 +02:00
gem selector sketch
This commit is contained in:
33
bauh/core/config.py
Normal file
33
bauh/core/config.py
Normal file
@@ -0,0 +1,33 @@
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
from typing import List
|
||||
|
||||
from bauh import __app_name__
|
||||
from bauh.api.constants import HOME_PATH
|
||||
|
||||
CONFIG_PATH = '{}/.config/{}'.format(HOME_PATH, __app_name__)
|
||||
FILE_PATH = '{}/config.json'.format(CONFIG_PATH)
|
||||
|
||||
|
||||
class Configuration:
|
||||
|
||||
def __init__(self, gems: List[str]):
|
||||
self.gems = gems
|
||||
|
||||
|
||||
def read() -> Configuration:
|
||||
if os.path.exists(FILE_PATH):
|
||||
with open(FILE_PATH) as f:
|
||||
config_file = f.read()
|
||||
|
||||
return Configuration(**json.loads(config_file))
|
||||
|
||||
return Configuration(gems=None)
|
||||
|
||||
|
||||
def save(config: Configuration):
|
||||
Path(CONFIG_PATH).mkdir(parents=True, exist_ok=True)
|
||||
|
||||
with open(FILE_PATH, 'w+') as f:
|
||||
f.write(json.dumps(config.__dict__, indent=2))
|
||||
@@ -2,10 +2,10 @@ from argparse import Namespace
|
||||
from threading import Thread
|
||||
from typing import List, Set, Type
|
||||
|
||||
from bauh_api.abstract.controller import SoftwareManager, SearchResult, ApplicationContext
|
||||
from bauh_api.abstract.disk import DiskCacheLoader
|
||||
from bauh_api.abstract.handler import ProcessWatcher
|
||||
from bauh_api.abstract.model import SoftwarePackage, PackageUpdate, PackageHistory, PackageSuggestion, PackageAction
|
||||
from bauh.api.abstract.controller import SoftwareManager, SearchResult, ApplicationContext
|
||||
from bauh.api.abstract.disk import DiskCacheLoader
|
||||
from bauh.api.abstract.handler import ProcessWatcher
|
||||
from bauh.api.abstract.model import SoftwarePackage, PackageUpdate, PackageHistory, PackageSuggestion, PackageAction
|
||||
|
||||
SUGGESTIONS_LIMIT = 5
|
||||
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
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__), '{}_commons'.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
|
||||
40
bauh/core/gems.py
Normal file
40
bauh/core/gems.py
Normal file
@@ -0,0 +1,40 @@
|
||||
import inspect
|
||||
import os
|
||||
import pkgutil
|
||||
from typing import List
|
||||
|
||||
from bauh import ROOT_DIR
|
||||
from bauh.api.abstract.controller import SoftwareManager, ApplicationContext
|
||||
from bauh.util import util
|
||||
|
||||
|
||||
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):
|
||||
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, names: List[str] = None) -> List[SoftwareManager]:
|
||||
managers = []
|
||||
|
||||
for f in os.scandir(ROOT_DIR + '/gems'):
|
||||
if f.is_dir() and f.name != '__pycache__' and (not names or f.name in names):
|
||||
module = pkgutil.find_loader('bauh.gems.{}.controller'.format(f.name)).load_module()
|
||||
|
||||
manager_class = find_manager(module)
|
||||
|
||||
if manager_class:
|
||||
locale_path = '{}/resources/locale'.format(f.path)
|
||||
|
||||
if os.path.exists(locale_path):
|
||||
context.i18n.update(util.get_locale_keys(locale, locale_path))
|
||||
|
||||
managers.append(manager_class(context=context))
|
||||
|
||||
return managers
|
||||
|
||||
Reference in New Issue
Block a user