Browse Source

move main into cli init and remove circular import layer

Nick Sweeting 5 years ago
parent
commit
322be6b292
5 changed files with 61 additions and 83 deletions
  1. 0 6
      archivebox/__init__.py
  2. 2 7
      archivebox/__main__.py
  3. 54 1
      archivebox/cli/__init__.py
  4. 0 63
      archivebox/cli/archivebox.py
  5. 5 6
      setup.py

+ 0 - 6
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 *

+ 2 - 7
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)

+ 54 - 1
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_<subcommand>.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',

+ 0 - 63
archivebox/cli/archivebox.py

@@ -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)

+ 5 - 6
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,