archivebox.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/usr/bin/env python3
  2. # archivebox [command]
  3. __package__ = 'archivebox.cli'
  4. __command__ = 'archivebox'
  5. import sys
  6. import argparse
  7. from typing import Optional, List, IO
  8. from . import list_subcommands, run_subcommand
  9. from ..config import OUTPUT_DIR
  10. def main(args: Optional[List[str]]=None, stdin: Optional[IO]=None, pwd: Optional[str]=None) -> None:
  11. subcommands = list_subcommands()
  12. parser = argparse.ArgumentParser(
  13. prog=__command__,
  14. description='ArchiveBox: The self-hosted internet archive',
  15. add_help=False,
  16. )
  17. group = parser.add_mutually_exclusive_group()
  18. group.add_argument(
  19. '--help', '-h',
  20. action='store_true',
  21. help=subcommands['help'],
  22. )
  23. group.add_argument(
  24. '--version',
  25. action='store_true',
  26. help=subcommands['version'],
  27. )
  28. group.add_argument(
  29. "subcommand",
  30. type=str,
  31. help= "The name of the subcommand to run",
  32. nargs='?',
  33. choices=subcommands.keys(),
  34. default=None,
  35. )
  36. parser.add_argument(
  37. "subcommand_args",
  38. help="Arguments for the subcommand",
  39. nargs=argparse.REMAINDER,
  40. )
  41. command = parser.parse_args(args or ())
  42. if command.help or command.subcommand is None:
  43. command.subcommand = 'help'
  44. if command.version:
  45. command.subcommand = 'version'
  46. run_subcommand(
  47. subcommand=command.subcommand,
  48. subcommand_args=command.subcommand_args,
  49. stdin=stdin,
  50. pwd=pwd or OUTPUT_DIR,
  51. )
  52. if __name__ == '__main__':
  53. main(args=sys.argv[1:], stdin=sys.stdin)