__package__ = 'archivebox.pkg.management.commands' from django.core.management.base import BaseCommand from django.conf import settings from pydantic_pkgr import Binary, BinProvider, BrewProvider, EnvProvider, SemVer from pydantic_pkgr.binprovider import bin_abspath from ....config import NODE_BIN_PATH, bin_path from plugantic.plugins import LOADED_PLUGINS from pkg.settings import env class Command(BaseCommand): def handle(self, *args, method, **options): method(*args, **options) def add_arguments(self, parser): subparsers = parser.add_subparsers(title="sub-commands", required=True) list_parser = subparsers.add_parser("list", help="List archivebox runtime dependencies.") list_parser.set_defaults(method=self.list) install_parser = subparsers.add_parser("install", help="Install archivebox runtime dependencies.") install_parser.add_argument("--update", action="store_true", help="Update dependencies to latest versions.") install_parser.add_argument("package_names", nargs="+", type=str) install_parser.set_defaults(method=self.install) def list(self, *args, **options): self.stdout.write('################# PLUGINS ####################') for plugin in LOADED_PLUGINS: self.stdout.write(f'{plugin.name}:') for binary in plugin.binaries: try: binary = binary.install() except Exception as e: # import ipdb; ipdb.set_trace() raise self.stdout.write(f' {binary.name.ljust(14)} {str(binary.version).ljust(11)} {binary.binprovider.INSTALLER_BIN.ljust(5)} {binary.abspath}') self.stdout.write('\n################# LEGACY ####################') for bin_key, dependency in settings.CONFIG.DEPENDENCIES.items(): bin_name = settings.CONFIG[bin_key] self.stdout.write(f'{bin_key}: {bin_name}') # binary = Binary(name=package_name, providers=[env]) # print(binary) # try: # loaded_bin = binary.load() # self.stdout.write( # self.style.SUCCESS(f'Successfully loaded {package_name}:') + str(loaded_bin) # ) # except Exception as e: # self.stderr.write( # self.style.ERROR(f"Error loading {package_name}: {e}") # ) def install(self, *args, bright, **options): for package_name in options["package_names"]: binary = Binary(name=package_name, providers=[env]) print(binary) try: loaded_bin = binary.load() self.stdout.write( self.style.SUCCESS(f'Successfully loaded {package_name}:') + str(loaded_bin) ) except Exception as e: self.stderr.write( self.style.ERROR(f"Error loading {package_name}: {e}") )