config.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435
  1. __package__ = 'plugins_extractor.ytdlp'
  2. from typing import List
  3. from pydantic import Field, model_validator, AliasChoices
  4. from abx.archivebox.base_configset import BaseConfigSet
  5. from archivebox.config.common import ARCHIVING_CONFIG
  6. from archivebox.misc.logging import STDERR
  7. class YtdlpConfig(BaseConfigSet):
  8. USE_YTDLP: bool = Field(default=True, validation_alias=AliasChoices('USE_YOUTUBEDL', 'SAVE_MEDIA'))
  9. YTDLP_BINARY: str = Field(default='yt-dlp', alias='YOUTUBEDL_BINARY')
  10. YTDLP_EXTRA_ARGS: List[str] = Field(default=[], alias='YOUTUBEDL_EXTRA_ARGS')
  11. YTDLP_CHECK_SSL_VALIDITY: bool = Field(default=lambda: ARCHIVING_CONFIG.CHECK_SSL_VALIDITY)
  12. YTDLP_TIMEOUT: int = Field(default=lambda: ARCHIVING_CONFIG.MEDIA_TIMEOUT)
  13. @model_validator(mode='after')
  14. def validate_use_ytdlp(self):
  15. if self.USE_YTDLP and self.YTDLP_TIMEOUT < 20:
  16. STDERR.print(f'[red][!] Warning: MEDIA_TIMEOUT is set too low! (currently set to MEDIA_TIMEOUT={self.YTDLP_TIMEOUT} seconds)[/red]')
  17. STDERR.print(' youtube-dl/yt-dlp will fail to archive any media if set to less than ~20 seconds.')
  18. STDERR.print(' (Setting it somewhere over 60 seconds is recommended)')
  19. STDERR.print()
  20. STDERR.print(' If you want to disable media archiving entirely, set SAVE_MEDIA=False instead:')
  21. STDERR.print(' https://github.com/ArchiveBox/ArchiveBox/wiki/Configuration#save_media')
  22. STDERR.print()
  23. return self
  24. YTDLP_CONFIG = YtdlpConfig()