archivebox_version.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/usr/bin/env python3
  2. __package__ = 'archivebox.cli'
  3. __command__ = 'archivebox version'
  4. import sys
  5. import argparse
  6. from pathlib import Path
  7. from typing import Optional, List, IO
  8. # from archivebox.misc.util import docstring
  9. from archivebox.config import DATA_DIR, VERSION
  10. from ..logging_util import SmartFormatter, reject_stdin
  11. # @docstring(version.__doc__)
  12. def main(args: Optional[List[str]]=None, stdin: Optional[IO]=None, pwd: Optional[str]=None) -> None:
  13. """Print the ArchiveBox version and dependency information"""
  14. parser = argparse.ArgumentParser(
  15. prog=__command__,
  16. description="Print the ArchiveBox version and dependency information", # version.__doc__,
  17. add_help=True,
  18. formatter_class=SmartFormatter,
  19. )
  20. parser.add_argument(
  21. '--quiet', '-q',
  22. action='store_true',
  23. help='Only print ArchiveBox version number and nothing else.',
  24. )
  25. parser.add_argument(
  26. '--binproviders', '-p',
  27. type=str,
  28. help='Select binproviders to detect DEFAULT=env,apt,brew,sys_pip,venv_pip,lib_pip,pipx,sys_npm,lib_npm,puppeteer,playwright (all)',
  29. default=None,
  30. )
  31. parser.add_argument(
  32. '--binaries', '-b',
  33. type=str,
  34. help='Select binaries to detect DEFAULT=curl,wget,git,yt-dlp,chrome,single-file,readability-extractor,postlight-parser,... (all)',
  35. default=None,
  36. )
  37. command = parser.parse_args(args or ())
  38. reject_stdin(__command__, stdin)
  39. # for speed reasons, check if quiet flag was set and just return simple version immediately if so
  40. if command.quiet:
  41. print(VERSION)
  42. return
  43. # otherwise do big expensive import to get the full version
  44. from ..main import version
  45. version(
  46. quiet=command.quiet,
  47. out_dir=Path(pwd) if pwd else DATA_DIR,
  48. binproviders=command.binproviders.split(',') if command.binproviders else None,
  49. binaries=command.binaries.split(',') if command.binaries else None,
  50. )
  51. if __name__ == '__main__':
  52. main(args=sys.argv[1:], stdin=sys.stdin)