mirror of
https://github.com/ArchiveBox/ArchiveBox
synced 2024-11-22 20:23:12 +00:00
move main into cli init and remove circular import layer
This commit is contained in:
parent
3ec97e5528
commit
322be6b292
5 changed files with 61 additions and 83 deletions
|
@ -1,7 +1 @@
|
||||||
__package__ = 'archivebox'
|
__package__ = 'archivebox'
|
||||||
|
|
||||||
from . import core
|
|
||||||
from . import cli
|
|
||||||
|
|
||||||
# The main CLI source code, is in 'archivebox/main.py'
|
|
||||||
from .main import *
|
|
||||||
|
|
|
@ -3,13 +3,8 @@
|
||||||
__package__ = 'archivebox'
|
__package__ = 'archivebox'
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from .cli import archivebox
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
archivebox.main(args=sys.argv[1:], stdin=sys.stdin)
|
|
||||||
|
|
||||||
|
from .cli import main
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
archivebox.main(args=sys.argv[1:], stdin=sys.stdin)
|
main(args=sys.argv[1:], stdin=sys.stdin)
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,13 @@
|
||||||
__package__ = 'archivebox.cli'
|
__package__ = 'archivebox.cli'
|
||||||
|
__command__ = 'archivebox'
|
||||||
|
|
||||||
import os
|
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
|
from importlib import import_module
|
||||||
|
|
||||||
CLI_DIR = os.path.dirname(os.path.abspath(__file__))
|
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
|
and module.__command__.split(' ')[-1] == subcommand
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def list_subcommands() -> Dict[str, str]:
|
def list_subcommands() -> Dict[str, str]:
|
||||||
"""find and import all valid archivebox_<subcommand>.py files in CLI_DIR"""
|
"""find and import all valid archivebox_<subcommand>.py files in CLI_DIR"""
|
||||||
|
|
||||||
|
@ -57,6 +63,53 @@ def run_subcommand(subcommand: str,
|
||||||
|
|
||||||
SUBCOMMANDS = list_subcommands()
|
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__ = (
|
__all__ = (
|
||||||
'SUBCOMMANDS',
|
'SUBCOMMANDS',
|
||||||
'list_subcommands',
|
'list_subcommands',
|
||||||
|
|
|
@ -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)
|
|
11
setup.py
11
setup.py
|
@ -1,4 +1,3 @@
|
||||||
import os
|
|
||||||
import setuptools
|
import setuptools
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
@ -10,9 +9,9 @@ README = (BASE_DIR / "README.md").read_text()
|
||||||
VERSION = (SOURCE_DIR / "VERSION").read_text().strip()
|
VERSION = (SOURCE_DIR / "VERSION").read_text().strip()
|
||||||
|
|
||||||
# To see when setup.py gets called (uncomment for debugging)
|
# To see when setup.py gets called (uncomment for debugging)
|
||||||
import sys
|
# import sys
|
||||||
print(SOURCE_DIR, f" (v{VERSION})")
|
# print(SOURCE_DIR, f" (v{VERSION})")
|
||||||
print('>', sys.executable, *sys.argv)
|
# print('>', sys.executable, *sys.argv)
|
||||||
# raise SystemExit(0)
|
# raise SystemExit(0)
|
||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
|
@ -69,10 +68,10 @@ setuptools.setup(
|
||||||
# 'redis': ['redis', 'django-redis'],
|
# 'redis': ['redis', 'django-redis'],
|
||||||
# 'pywb': ['pywb', 'redis'],
|
# 'pywb': ['pywb', 'redis'],
|
||||||
},
|
},
|
||||||
packages=[PKG_NAME],
|
packages=setuptools.find_packages(),
|
||||||
entry_points={
|
entry_points={
|
||||||
"console_scripts": [
|
"console_scripts": [
|
||||||
f"{PKG_NAME} = {PKG_NAME}.__main__:main",
|
f"{PKG_NAME} = {PKG_NAME}.cli:main",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
|
|
Loading…
Reference in a new issue