apps.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. __package__ = 'plugins_extractor.git'
  2. from typing import List
  3. from pathlib import Path
  4. from pydantic import InstanceOf, Field
  5. from pydantic_pkgr import BinProvider, BinName
  6. from abx.archivebox.base_plugin import BasePlugin, BaseHook
  7. from abx.archivebox.base_configset import BaseConfigSet
  8. from abx.archivebox.base_binary import BaseBinary, env, apt, brew
  9. from abx.archivebox.base_extractor import BaseExtractor, ExtractorName
  10. from archivebox.config import ARCHIVING_CONFIG
  11. class GitConfig(BaseConfigSet):
  12. SAVE_GIT: bool = True
  13. GIT_DOMAINS: str = Field(default='github.com,bitbucket.org,gitlab.com,gist.github.com,codeberg.org,gitea.com,git.sr.ht')
  14. GIT_BINARY: str = Field(default='git')
  15. GIT_ARGS: List[str] = [
  16. '--recursive',
  17. ]
  18. GIT_EXTRA_ARGS: List[str] = []
  19. GIT_TIMEOUT: int = Field(default=lambda: ARCHIVING_CONFIG.TIMEOUT)
  20. GIT_CHECK_SSL_VALIDITY: bool = Field(default=lambda: ARCHIVING_CONFIG.CHECK_SSL_VALIDITY)
  21. GIT_CONFIG = GitConfig()
  22. class GitBinary(BaseBinary):
  23. name: BinName = GIT_CONFIG.GIT_BINARY
  24. binproviders_supported: List[InstanceOf[BinProvider]] = [apt, brew, env]
  25. GIT_BINARY = GitBinary()
  26. class GitExtractor(BaseExtractor):
  27. name: ExtractorName = 'git'
  28. binary: str = GIT_BINARY.name
  29. def get_output_path(self, snapshot) -> Path | None:
  30. return snapshot.as_link() / 'git'
  31. GIT_EXTRACTOR = GitExtractor()
  32. class GitPlugin(BasePlugin):
  33. app_label: str = 'git'
  34. verbose_name: str = 'GIT'
  35. hooks: List[InstanceOf[BaseHook]] = [
  36. GIT_CONFIG,
  37. GIT_BINARY,
  38. GIT_EXTRACTOR,
  39. ]
  40. PLUGIN = GitPlugin()
  41. DJANGO_APP = PLUGIN.AppConfig