diff --git a/bauh/cli/app.py b/bauh/cli/app.py index ad88fb53..48cab8dc 100644 --- a/bauh/cli/app.py +++ b/bauh/cli/app.py @@ -1,68 +1 @@ -import os - -import urllib3 - -from bauh import ROOT_DIR, __version__ -from bauh.api import user -from bauh.api.abstract.context import ApplicationContext -from bauh.api.http import HttpClient -from bauh.cli import __app_name__, cli_args -from bauh.cli.controller import CLIManager -from bauh.commons.internet import InternetChecker -from bauh.context import generate_i18n, DEFAULT_I18N_KEY -from bauh.view.core import gems -from bauh.view.core.config import CoreConfigManager -from bauh.view.core.controller import GenericSoftwareManager -from bauh.view.core.downloader import AdaptableFileDownloader -from bauh.view.util import logs, util, resource -from bauh.view.util.cache import DefaultMemoryCacheFactory -from bauh.view.util.disk import DefaultDiskCacheLoaderFactory - - -def main(): - if not os.getenv('PYTHONUNBUFFERED'): - os.environ['PYTHONUNBUFFERED'] = '1' - - urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) - - args = cli_args.read() - logger = logs.new_logger(__app_name__, False) - - app_config = CoreConfigManager().get_config() - http_client = HttpClient(logger) - - i18n = generate_i18n(app_config, resource.get_path('locale')) - - cache_factory = DefaultMemoryCacheFactory(expiration_time=0) - - downloader = AdaptableFileDownloader(logger=logger, multithread_enabled=app_config['download']['multithreaded'], - multithread_client=app_config['download']['multithreaded_client'], - i18n=i18n, http_client=http_client, - check_ssl=app_config['download']['check_ssl']) - - context = ApplicationContext(i18n=i18n, - http_client=http_client, - download_icons=bool(app_config['download']['icons']), - app_root_dir=ROOT_DIR, - cache_factory=cache_factory, - disk_loader_factory=DefaultDiskCacheLoaderFactory(logger), - logger=logger, - distro=util.get_distro(), - file_downloader=downloader, - app_name=__app_name__, - app_version=__version__, - internet_checker=InternetChecker(offline=False), - suggestions_mapping=None, # TODO not needed at the moment - root_user=user.is_root()) - - managers = gems.load_managers(context=context, locale=i18n.current_key, config=app_config, - default_locale=DEFAULT_I18N_KEY, logger=logger) - - cli = CLIManager(GenericSoftwareManager(managers, context=context, config=app_config)) - - if args.command == 'updates': - cli.list_updates(args.format) - - -if __name__ == '__main__': - main() +from bearhub.cli.app_main import * # noqa: F401,F403 diff --git a/bauh/cli/cli_args.py b/bauh/cli/cli_args.py index ff36e6b1..c150e06c 100644 --- a/bauh/cli/cli_args.py +++ b/bauh/cli/cli_args.py @@ -1,15 +1 @@ -import argparse -from argparse import Namespace - -from bauh import __app_name__, __version__ - - -def read() -> Namespace: - parser = argparse.ArgumentParser(prog='{}-cli'.format(__app_name__), description="CLI for Linux software management") - parser.add_argument('-v', '--version', action='version', version='%(prog)s {}'.format(__version__)) - - sub_parsers = parser.add_subparsers(dest='command', help='commands') - updates_parser = sub_parsers.add_parser('updates', help='List available software updates') - updates_parser.add_argument('-f', '--format', help='Command output format. Default: %(default)s', choices=['text', 'json'], default='text') - - return parser.parse_args() +from bearhub.cli.cli_args import * # noqa: F401,F403 diff --git a/bauh/cli/controller.py b/bauh/cli/controller.py index 35dad789..0811109b 100644 --- a/bauh/cli/controller.py +++ b/bauh/cli/controller.py @@ -1,30 +1 @@ -import json - -from bauh.cli import __app_name__ -from bauh.view.core.controller import GenericSoftwareManager - - -class CLIManager: - - def __init__(self, manager: GenericSoftwareManager): - self.manager = manager - - def _print(self, msg: str): - print('[{}] {}'.format(__app_name__, msg)) - - def list_updates(self, output_format: str): - updates = self.manager.list_updates() - - json_output = output_format == 'json' - - if not updates and not json_output: - self._print('No updates available') - return - - if not json_output: - self._print('There are {} updates available:\n'.format(len(updates))) - - for idx, u in enumerate(updates): - print('{}. Name: {}\tVersion: {}\tType: {}'.format(idx+1, u.name, u.version, u.type)) - else: - print(json.dumps([u.__dict__ for u in updates])) +from bearhub.cli.controller import * # noqa: F401,F403 diff --git a/bearhub/cli/__init__.py b/bearhub/cli/__init__.py index afc42881..0fed2ad8 100644 --- a/bearhub/cli/__init__.py +++ b/bearhub/cli/__init__.py @@ -2,6 +2,6 @@ Temporary namespace migration shim for CLI package. """ -from bauh.cli import __app_name__ +from bearhub import __app_name__ __all__ = ["__app_name__"] diff --git a/bearhub/cli/app.py b/bearhub/cli/app.py index 2e2b8c06..4a6a243a 100644 --- a/bearhub/cli/app.py +++ b/bearhub/cli/app.py @@ -2,6 +2,6 @@ Temporary namespace migration shim for CLI entry point. """ -from bauh.cli.app import main +from bearhub.cli.app_main import main __all__ = ["main"] diff --git a/bearhub/cli/app_main.py b/bearhub/cli/app_main.py new file mode 100644 index 00000000..7b0585c8 --- /dev/null +++ b/bearhub/cli/app_main.py @@ -0,0 +1,68 @@ +import os + +import urllib3 + +from bearhub import ROOT_DIR, __version__ +from bauh.api import user +from bauh.api.abstract.context import ApplicationContext +from bauh.api.http import HttpClient +from bearhub.cli import __app_name__, cli_args +from bearhub.cli.controller import CLIManager +from bauh.commons.internet import InternetChecker +from bearhub.context import generate_i18n, DEFAULT_I18N_KEY +from bauh.view.core import gems +from bauh.view.core.config import CoreConfigManager +from bauh.view.core.controller import GenericSoftwareManager +from bauh.view.core.downloader import AdaptableFileDownloader +from bauh.view.util import logs, util, resource +from bauh.view.util.cache import DefaultMemoryCacheFactory +from bauh.view.util.disk import DefaultDiskCacheLoaderFactory + + +def main(): + if not os.getenv('PYTHONUNBUFFERED'): + os.environ['PYTHONUNBUFFERED'] = '1' + + urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + + args = cli_args.read() + logger = logs.new_logger(__app_name__, False) + + app_config = CoreConfigManager().get_config() + http_client = HttpClient(logger) + + i18n = generate_i18n(app_config, resource.get_path('locale')) + + cache_factory = DefaultMemoryCacheFactory(expiration_time=0) + + downloader = AdaptableFileDownloader(logger=logger, multithread_enabled=app_config['download']['multithreaded'], + multithread_client=app_config['download']['multithreaded_client'], + i18n=i18n, http_client=http_client, + check_ssl=app_config['download']['check_ssl']) + + context = ApplicationContext(i18n=i18n, + http_client=http_client, + download_icons=bool(app_config['download']['icons']), + app_root_dir=ROOT_DIR, + cache_factory=cache_factory, + disk_loader_factory=DefaultDiskCacheLoaderFactory(logger), + logger=logger, + distro=util.get_distro(), + file_downloader=downloader, + app_name=__app_name__, + app_version=__version__, + internet_checker=InternetChecker(offline=False), + suggestions_mapping=None, # TODO not needed at the moment + root_user=user.is_root()) + + managers = gems.load_managers(context=context, locale=i18n.current_key, config=app_config, + default_locale=DEFAULT_I18N_KEY, logger=logger) + + cli = CLIManager(GenericSoftwareManager(managers, context=context, config=app_config)) + + if args.command == 'updates': + cli.list_updates(args.format) + + +if __name__ == '__main__': + main() diff --git a/bearhub/cli/cli_args.py b/bearhub/cli/cli_args.py new file mode 100644 index 00000000..05eccc76 --- /dev/null +++ b/bearhub/cli/cli_args.py @@ -0,0 +1,15 @@ +import argparse +from argparse import Namespace + +from bearhub import __app_name__, __version__ + + +def read() -> Namespace: + parser = argparse.ArgumentParser(prog='{}-cli'.format(__app_name__), description="CLI for Linux software management") + parser.add_argument('-v', '--version', action='version', version='%(prog)s {}'.format(__version__)) + + sub_parsers = parser.add_subparsers(dest='command', help='commands') + updates_parser = sub_parsers.add_parser('updates', help='List available software updates') + updates_parser.add_argument('-f', '--format', help='Command output format. Default: %(default)s', choices=['text', 'json'], default='text') + + return parser.parse_args() diff --git a/bearhub/cli/controller.py b/bearhub/cli/controller.py new file mode 100644 index 00000000..81d8d94f --- /dev/null +++ b/bearhub/cli/controller.py @@ -0,0 +1,30 @@ +import json + +from bearhub.cli import __app_name__ +from bauh.view.core.controller import GenericSoftwareManager + + +class CLIManager: + + def __init__(self, manager: GenericSoftwareManager): + self.manager = manager + + def _print(self, msg: str): + print('[{}] {}'.format(__app_name__, msg)) + + def list_updates(self, output_format: str): + updates = self.manager.list_updates() + + json_output = output_format == 'json' + + if not updates and not json_output: + self._print('No updates available') + return + + if not json_output: + self._print('There are {} updates available:\n'.format(len(updates))) + + for idx, u in enumerate(updates): + print('{}. Name: {}\tVersion: {}\tType: {}'.format(idx+1, u.name, u.version, u.type)) + else: + print(json.dumps([u.__dict__ for u in updates]))