Migrate CLI modules to bearhub namespace with bauh wrappers

This commit is contained in:
Sebastian Palencsar
2026-05-31 16:04:48 +02:00
parent cc3742c783
commit 21c9c6a723
8 changed files with 118 additions and 115 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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__"]

View File

@@ -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"]

68
bearhub/cli/app_main.py Normal file
View File

@@ -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()

15
bearhub/cli/cli_args.py Normal file
View File

@@ -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()

30
bearhub/cli/controller.py Normal file
View File

@@ -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]))