pkg.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. __package__ = 'archivebox.pkg.management.commands'
  2. from django.core.management.base import BaseCommand
  3. from django.conf import settings
  4. from pydantic_pkgr import Binary, BinProvider, BrewProvider, EnvProvider, SemVer
  5. from pydantic_pkgr.binprovider import bin_abspath
  6. from ....config import NODE_BIN_PATH, bin_path
  7. from plugantic.plugins import LOADED_PLUGINS
  8. from pkg.settings import env
  9. class Command(BaseCommand):
  10. def handle(self, *args, method, **options):
  11. method(*args, **options)
  12. def add_arguments(self, parser):
  13. subparsers = parser.add_subparsers(title="sub-commands", required=True)
  14. list_parser = subparsers.add_parser("list", help="List archivebox runtime dependencies.")
  15. list_parser.set_defaults(method=self.list)
  16. install_parser = subparsers.add_parser("install", help="Install archivebox runtime dependencies.")
  17. install_parser.add_argument("--update", action="store_true", help="Update dependencies to latest versions.")
  18. install_parser.add_argument("package_names", nargs="+", type=str)
  19. install_parser.set_defaults(method=self.install)
  20. def list(self, *args, **options):
  21. self.stdout.write('################# PLUGINS ####################')
  22. for plugin in LOADED_PLUGINS:
  23. self.stdout.write(f'{plugin.name}:')
  24. for binary in plugin.binaries:
  25. try:
  26. binary = binary.install()
  27. except Exception as e:
  28. # import ipdb; ipdb.set_trace()
  29. raise
  30. self.stdout.write(f' {binary.name.ljust(14)} {str(binary.version).ljust(11)} {binary.binprovider.INSTALLER_BIN.ljust(5)} {binary.abspath}')
  31. self.stdout.write('\n################# LEGACY ####################')
  32. for bin_key, dependency in settings.CONFIG.DEPENDENCIES.items():
  33. bin_name = settings.CONFIG[bin_key]
  34. self.stdout.write(f'{bin_key}: {bin_name}')
  35. # binary = Binary(name=package_name, providers=[env])
  36. # print(binary)
  37. # try:
  38. # loaded_bin = binary.load()
  39. # self.stdout.write(
  40. # self.style.SUCCESS(f'Successfully loaded {package_name}:') + str(loaded_bin)
  41. # )
  42. # except Exception as e:
  43. # self.stderr.write(
  44. # self.style.ERROR(f"Error loading {package_name}: {e}")
  45. # )
  46. def install(self, *args, bright, **options):
  47. for package_name in options["package_names"]:
  48. binary = Binary(name=package_name, providers=[env])
  49. print(binary)
  50. try:
  51. loaded_bin = binary.load()
  52. self.stdout.write(
  53. self.style.SUCCESS(f'Successfully loaded {package_name}:') + str(loaded_bin)
  54. )
  55. except Exception as e:
  56. self.stderr.write(
  57. self.style.ERROR(f"Error loading {package_name}: {e}")
  58. )