apps.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. __package__ = 'archivebox.plugins_pkg.npm'
  2. from pathlib import Path
  3. from typing import List, Optional
  4. from django.conf import settings
  5. from pydantic import InstanceOf
  6. from pydantic_pkgr import BinProvider, NpmProvider, BinName, PATHStr, BinProviderName
  7. from plugantic.base_plugin import BasePlugin
  8. from plugantic.base_configset import BaseConfigSet
  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. pass
  21. DEFAULT_GLOBAL_CONFIG = {
  22. }
  23. NPM_CONFIG = NpmDependencyConfigs(**DEFAULT_GLOBAL_CONFIG)
  24. class SystemNpmProvider(NpmProvider, BaseBinProvider):
  25. name: BinProviderName = "sys_npm"
  26. PATH: PATHStr = str(CONFIG.NODE_BIN_PATH)
  27. npm_prefix: Optional[Path] = None
  28. class LibNpmProvider(NpmProvider, BaseBinProvider):
  29. name: BinProviderName = "lib_npm"
  30. PATH: PATHStr = str(CONFIG.NODE_BIN_PATH)
  31. npm_prefix: Optional[Path] = settings.CONFIG.LIB_DIR / 'npm'
  32. SYS_NPM_BINPROVIDER = SystemNpmProvider()
  33. LIB_NPM_BINPROVIDER = LibNpmProvider()
  34. npm = LIB_NPM_BINPROVIDER
  35. class NpmBinary(BaseBinary):
  36. name: BinName = 'npm'
  37. binproviders_supported: List[InstanceOf[BinProvider]] = [apt, brew, env]
  38. NPM_BINARY = NpmBinary()
  39. class NodeBinary(BaseBinary):
  40. name: BinName = 'node'
  41. binproviders_supported: List[InstanceOf[BinProvider]] = [apt, brew, env]
  42. NODE_BINARY = NodeBinary()
  43. class NpmPlugin(BasePlugin):
  44. app_label: str = 'npm'
  45. verbose_name: str = 'NPM'
  46. hooks: List[InstanceOf[BaseHook]] = [
  47. NPM_CONFIG,
  48. SYS_NPM_BINPROVIDER,
  49. LIB_NPM_BINPROVIDER,
  50. NODE_BINARY,
  51. NPM_BINARY,
  52. ]
  53. PLUGIN = NpmPlugin()
  54. PLUGIN.register(settings)
  55. DJANGO_APP = PLUGIN.AppConfig