archivebox.py 1.6 KB

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