binproviders.py 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. __package__ = 'plugins_pkg.npm'
  2. from pathlib import Path
  3. from typing import Optional
  4. from pydantic import model_validator
  5. from pydantic_pkgr import NpmProvider, PATHStr, BinProviderName
  6. from archivebox.config import DATA_DIR, CONSTANTS
  7. from abx.archivebox.base_binary import BaseBinProvider
  8. OLD_NODE_BIN_PATH = DATA_DIR / 'node_modules' / '.bin'
  9. NEW_NODE_BIN_PATH = CONSTANTS.LIB_NPM_DIR / 'node_modules' / '.bin'
  10. class SystemNpmBinProvider(NpmProvider, BaseBinProvider):
  11. name: BinProviderName = "sys_npm"
  12. npm_prefix: Optional[Path] = None
  13. class LibNpmBinProvider(NpmProvider, BaseBinProvider):
  14. name: BinProviderName = "lib_npm"
  15. PATH: PATHStr = f'{NEW_NODE_BIN_PATH}:{OLD_NODE_BIN_PATH}'
  16. npm_prefix: Optional[Path] = CONSTANTS.LIB_NPM_DIR
  17. @model_validator(mode='after')
  18. def validate_path(self):
  19. assert self.npm_prefix == NEW_NODE_BIN_PATH.parent.parent
  20. return self
  21. SYS_NPM_BINPROVIDER = SystemNpmBinProvider()
  22. LIB_NPM_BINPROVIDER = LibNpmBinProvider()
  23. npm = LIB_NPM_BINPROVIDER