binproviders.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. __package__ = 'plugins_pkg.npm'
  2. from pathlib import Path
  3. from typing import Optional
  4. from pydantic_pkgr import NpmProvider, PATHStr, BinProviderName
  5. from archivebox.config import DATA_DIR, CONSTANTS
  6. from abx.archivebox.base_binary import BaseBinProvider
  7. OLD_NODE_BIN_PATH = DATA_DIR / 'node_modules' / '.bin'
  8. NEW_NODE_BIN_PATH = CONSTANTS.DEFAULT_LIB_DIR / 'npm' / 'node_modules' / '.bin'
  9. class SystemNpmBinProvider(NpmProvider, BaseBinProvider):
  10. name: BinProviderName = "sys_npm"
  11. npm_prefix: Optional[Path] = None
  12. class LibNpmBinProvider(NpmProvider, BaseBinProvider):
  13. name: BinProviderName = "lib_npm"
  14. PATH: PATHStr = f'{NEW_NODE_BIN_PATH}:{OLD_NODE_BIN_PATH}'
  15. npm_prefix: Optional[Path] = CONSTANTS.DEFAULT_LIB_DIR / 'npm'
  16. def setup(self) -> None:
  17. # update paths from config if they arent the default
  18. from archivebox.config.common import STORAGE_CONFIG
  19. if STORAGE_CONFIG.LIB_DIR != CONSTANTS.DEFAULT_LIB_DIR:
  20. self.npm_prefix = STORAGE_CONFIG.LIB_DIR / 'npm'
  21. self.PATH = f'{STORAGE_CONFIG.LIB_DIR / "npm" / "node_modules" / ".bin"}:{NEW_NODE_BIN_PATH}:{OLD_NODE_BIN_PATH}'
  22. super().setup()
  23. SYS_NPM_BINPROVIDER = SystemNpmBinProvider()
  24. LIB_NPM_BINPROVIDER = LibNpmBinProvider()
  25. npm = LIB_NPM_BINPROVIDER