apps.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import sys
  2. from pathlib import Path
  3. from typing import List, Dict, Optional
  4. from pydantic import InstanceOf, Field
  5. from django.apps import AppConfig
  6. from pydantic_pkgr import BinProvider, PipProvider, BinName, PATHStr
  7. from plugantic.base_plugin import BasePlugin, BaseConfigSet, BaseBinary, BaseBinProvider
  8. from plugantic.base_configset import ConfigSectionName
  9. from pkg.settings import env, apt, brew
  10. ###################### Config ##########################
  11. class PipDependencyConfigs(BaseConfigSet):
  12. section: ConfigSectionName = 'DEPENDENCY_CONFIG'
  13. USE_PIP: bool = True
  14. PIP_BINARY: str = Field(default='pip')
  15. PIP_ARGS: Optional[List[str]] = Field(default=None)
  16. PIP_EXTRA_ARGS: List[str] = []
  17. PIP_DEFAULT_ARGS: List[str] = []
  18. DEFAULT_GLOBAL_CONFIG = {
  19. }
  20. PIP_CONFIG = PipDependencyConfigs(**DEFAULT_GLOBAL_CONFIG)
  21. class PipProvider(PipProvider, BaseBinProvider):
  22. PATH: PATHStr = str(Path(sys.executable).parent)
  23. pip = PipProvider(PATH=str(Path(sys.executable).parent))
  24. class PipBinary(BaseBinary):
  25. name: BinName = 'pip'
  26. binproviders_supported: List[InstanceOf[BinProvider]] = [env, pip, apt, brew]
  27. PIP_BINARY = PipBinary()
  28. class PipPlugin(BasePlugin):
  29. name: str = 'builtin_plugins.pip'
  30. app_label: str = 'pip'
  31. verbose_name: str = 'PIP'
  32. configs: List[InstanceOf[BaseConfigSet]] = [PIP_CONFIG]
  33. binproviders: List[InstanceOf[BaseBinProvider]] = [pip]
  34. binaries: List[InstanceOf[BaseBinary]] = [PIP_BINARY]
  35. PLUGIN = PipPlugin()
  36. DJANGO_APP = PLUGIN.AppConfig
  37. # CONFIGS = PLUGIN.configs
  38. # BINARIES = PLUGIN.binaries
  39. # EXTRACTORS = PLUGIN.extractors
  40. # REPLAYERS = PLUGIN.replayers
  41. # CHECKS = PLUGIN.checks