apps.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. __package__ = 'archivebox.builtin_plugins.npm'
  2. from pathlib import Path
  3. from typing import List, Optional
  4. from django.conf import settings
  5. from pydantic import InstanceOf, Field
  6. from pydantic_pkgr import BinProvider, NpmProvider, BinName, PATHStr, BinProviderName
  7. from plugantic.base_plugin import BasePlugin
  8. from plugantic.base_configset import BaseConfigSet, ConfigSectionName
  9. from plugantic.base_binary import BaseBinary, BaseBinProvider, env, apt, brew
  10. from plugantic.base_hook import BaseHook
  11. from ...config import CONFIG
  12. ###################### Config ##########################
  13. class NpmDependencyConfigs(BaseConfigSet):
  14. section: ConfigSectionName = 'DEPENDENCY_CONFIG'
  15. USE_NPM: bool = True
  16. NPM_BINARY: str = Field(default='npm')
  17. NPM_ARGS: Optional[List[str]] = Field(default=None)
  18. NPM_EXTRA_ARGS: List[str] = []
  19. NPM_DEFAULT_ARGS: List[str] = []
  20. DEFAULT_GLOBAL_CONFIG = {
  21. }
  22. NPM_CONFIG = NpmDependencyConfigs(**DEFAULT_GLOBAL_CONFIG)
  23. class SystemNpmProvider(NpmProvider, BaseBinProvider):
  24. name: BinProviderName = "npm"
  25. PATH: PATHStr = str(CONFIG.NODE_BIN_PATH)
  26. npm_prefix: Optional[Path] = None
  27. class LibNpmProvider(NpmProvider, BaseBinProvider):
  28. name: BinProviderName = "lib_npm"
  29. PATH: PATHStr = str(CONFIG.NODE_BIN_PATH)
  30. npm_prefix: Optional[Path] = settings.CONFIG.LIB_DIR / 'npm'
  31. SYS_NPM_BINPROVIDER = SystemNpmProvider()
  32. LIB_NPM_BINPROVIDER = LibNpmProvider()
  33. npm = LIB_NPM_BINPROVIDER
  34. class NpmBinary(BaseBinary):
  35. name: BinName = 'npm'
  36. binproviders_supported: List[InstanceOf[BinProvider]] = [apt, brew, env]
  37. NPM_BINARY = NpmBinary()
  38. class NodeBinary(BaseBinary):
  39. name: BinName = 'node'
  40. binproviders_supported: List[InstanceOf[BinProvider]] = [apt, brew, env]
  41. NODE_BINARY = NodeBinary()
  42. class NpmPlugin(BasePlugin):
  43. app_label: str = 'npm'
  44. verbose_name: str = 'NPM'
  45. hooks: List[InstanceOf[BaseHook]] = [
  46. NPM_CONFIG,
  47. SYS_NPM_BINPROVIDER,
  48. LIB_NPM_BINPROVIDER,
  49. NODE_BINARY,
  50. NPM_BINARY,
  51. ]
  52. PLUGIN = NpmPlugin()
  53. PLUGIN.register(settings)
  54. DJANGO_APP = PLUGIN.AppConfig