diff --git a/archivebox/__init__.py b/archivebox/__init__.py index 56b6f16e..b0c00b61 100644 --- a/archivebox/__init__.py +++ b/archivebox/__init__.py @@ -1,7 +1 @@ __package__ = 'archivebox' - -from . import core -from . import cli - -# The main CLI source code, is in 'archivebox/main.py' -from .main import * diff --git a/archivebox/__main__.py b/archivebox/__main__.py index 3386d46d..55e94415 100755 --- a/archivebox/__main__.py +++ b/archivebox/__main__.py @@ -3,13 +3,8 @@ __package__ = 'archivebox' import sys -from .cli import archivebox - - -def main(): - archivebox.main(args=sys.argv[1:], stdin=sys.stdin) +from .cli import main if __name__ == '__main__': - archivebox.main(args=sys.argv[1:], stdin=sys.stdin) - + main(args=sys.argv[1:], stdin=sys.stdin) diff --git a/archivebox/cli/__init__.py b/archivebox/cli/__init__.py index 7972c02e..ece64f8b 100644 --- a/archivebox/cli/__init__.py +++ b/archivebox/cli/__init__.py @@ -1,8 +1,13 @@ __package__ = 'archivebox.cli' +__command__ = 'archivebox' import os +import argparse + +from typing import Optional, Dict, List, IO + +from ..config import OUTPUT_DIR -from typing import Dict, List, Optional, IO from importlib import import_module CLI_DIR = os.path.dirname(os.path.abspath(__file__)) @@ -24,6 +29,7 @@ is_valid_cli_module = lambda module, subcommand: ( and module.__command__.split(' ')[-1] == subcommand ) + def list_subcommands() -> Dict[str, str]: """find and import all valid archivebox_.py files in CLI_DIR""" @@ -57,6 +63,53 @@ def run_subcommand(subcommand: str, SUBCOMMANDS = list_subcommands() + +def main(args: Optional[List[str]]=None, stdin: Optional[IO]=None, pwd: Optional[str]=None) -> None: + subcommands = list_subcommands() + parser = argparse.ArgumentParser( + prog=__command__, + description='ArchiveBox: The self-hosted internet archive', + add_help=False, + ) + group = parser.add_mutually_exclusive_group() + group.add_argument( + '--help', '-h', + action='store_true', + help=subcommands['help'], + ) + group.add_argument( + '--version', + action='store_true', + help=subcommands['version'], + ) + group.add_argument( + "subcommand", + type=str, + help= "The name of the subcommand to run", + nargs='?', + choices=subcommands.keys(), + default=None, + ) + parser.add_argument( + "subcommand_args", + help="Arguments for the subcommand", + nargs=argparse.REMAINDER, + ) + command = parser.parse_args(args or ()) + + if command.help or command.subcommand is None: + command.subcommand = 'help' + if command.version: + command.subcommand = 'version' + + run_subcommand( + subcommand=command.subcommand, + subcommand_args=command.subcommand_args, + stdin=stdin, + pwd=pwd or OUTPUT_DIR, + ) + + __all__ = ( 'SUBCOMMANDS', 'list_subcommands', diff --git a/archivebox/cli/archivebox.py b/archivebox/cli/archivebox.py deleted file mode 100755 index c8281937..00000000 --- a/archivebox/cli/archivebox.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python3 -# archivebox [command] - -__package__ = 'archivebox.cli' -__command__ = 'archivebox' - -import sys -import argparse - -from typing import Optional, List, IO - -from . import list_subcommands, run_subcommand -from ..config import OUTPUT_DIR - - -def main(args: Optional[List[str]]=None, stdin: Optional[IO]=None, pwd: Optional[str]=None) -> None: - subcommands = list_subcommands() - parser = argparse.ArgumentParser( - prog=__command__, - description='ArchiveBox: The self-hosted internet archive', - add_help=False, - ) - group = parser.add_mutually_exclusive_group() - group.add_argument( - '--help', '-h', - action='store_true', - help=subcommands['help'], - ) - group.add_argument( - '--version', - action='store_true', - help=subcommands['version'], - ) - group.add_argument( - "subcommand", - type=str, - help= "The name of the subcommand to run", - nargs='?', - choices=subcommands.keys(), - default=None, - ) - parser.add_argument( - "subcommand_args", - help="Arguments for the subcommand", - nargs=argparse.REMAINDER, - ) - command = parser.parse_args(args or ()) - - if command.help or command.subcommand is None: - command.subcommand = 'help' - if command.version: - command.subcommand = 'version' - - run_subcommand( - subcommand=command.subcommand, - subcommand_args=command.subcommand_args, - stdin=stdin, - pwd=pwd or OUTPUT_DIR, - ) - - -if __name__ == '__main__': - main(args=sys.argv[1:], stdin=sys.stdin) diff --git a/setup.py b/setup.py index 8ac00c44..049528fb 100755 --- a/setup.py +++ b/setup.py @@ -1,4 +1,3 @@ -import os import setuptools from pathlib import Path @@ -10,9 +9,9 @@ README = (BASE_DIR / "README.md").read_text() VERSION = (SOURCE_DIR / "VERSION").read_text().strip() # To see when setup.py gets called (uncomment for debugging) -import sys -print(SOURCE_DIR, f" (v{VERSION})") -print('>', sys.executable, *sys.argv) +# import sys +# print(SOURCE_DIR, f" (v{VERSION})") +# print('>', sys.executable, *sys.argv) # raise SystemExit(0) setuptools.setup( @@ -69,10 +68,10 @@ setuptools.setup( # 'redis': ['redis', 'django-redis'], # 'pywb': ['pywb', 'redis'], }, - packages=[PKG_NAME], + packages=setuptools.find_packages(), entry_points={ "console_scripts": [ - f"{PKG_NAME} = {PKG_NAME}.__main__:main", + f"{PKG_NAME} = {PKG_NAME}.cli:main", ], }, include_package_data=True,