binaries.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. __package__ = 'archivebox.plugantic'
  2. import sys
  3. import inspect
  4. import importlib
  5. from pathlib import Path
  6. from typing import Any, Optional, Dict, List
  7. from typing_extensions import Self
  8. from subprocess import run, PIPE
  9. from pydantic_pkgr import Binary, SemVer, BinName, BinProvider, EnvProvider, AptProvider, BrewProvider, PipProvider, BinProviderName, ProviderLookupDict
  10. import django
  11. from django.db.backends.sqlite3.base import Database as sqlite3
  12. def get_ytdlp_version() -> str:
  13. import yt_dlp
  14. return yt_dlp.version.__version__
  15. class YtdlpBinary(Binary):
  16. name: BinName = 'yt-dlp'
  17. providers_supported: List[BinProvider] = [
  18. EnvProvider(),
  19. PipProvider(),
  20. BrewProvider(),
  21. AptProvider(),
  22. ]
  23. provider_overrides: Dict[BinProviderName, ProviderLookupDict] = {
  24. 'pip': {
  25. 'version': get_ytdlp_version,
  26. },
  27. 'brew': {
  28. 'subdeps': lambda: 'yt-dlp ffmpeg',
  29. },
  30. 'apt': {
  31. 'subdeps': lambda: 'yt-dlp ffmpeg',
  32. }
  33. }
  34. class WgetBinary(Binary):
  35. name: BinName = 'wget'
  36. providers_supported: List[BinProvider] = [EnvProvider(), AptProvider(), BrewProvider()]
  37. # if __name__ == '__main__':
  38. # PYTHON_BINARY = PythonBinary()
  39. # SQLITE_BINARY = SqliteBinary()
  40. # DJANGO_BINARY = DjangoBinary()
  41. # WGET_BINARY = WgetBinary()
  42. # YTDLP_BINARY = YtdlpPBinary()
  43. # print('-------------------------------------DEFINING BINARIES---------------------------------')
  44. # print(PYTHON_BINARY)
  45. # print(SQLITE_BINARY)
  46. # print(DJANGO_BINARY)
  47. # print(WGET_BINARY)
  48. # print(YTDLP_BINARY)