Ver código fonte

new setup flag on init command to autosetup on init

Nick Sweeting 4 anos atrás
pai
commit
8b4f84959a
3 arquivos alterados com 26 adições e 13 exclusões
  1. 4 4
      archivebox/cli/__init__.py
  2. 6 0
      archivebox/cli/archivebox_init.py
  3. 16 9
      archivebox/main.py

+ 4 - 4
archivebox/cli/__init__.py

@@ -15,10 +15,10 @@ from importlib import import_module
 CLI_DIR = Path(__file__).resolve().parent
 
 # these common commands will appear sorted before any others for ease-of-use
-meta_cmds = ('help', 'version')                                         # dont require valid data folder at all
-main_cmds = ('init', 'config')                                          # dont require existing db present
-archive_cmds = ('add', 'remove', 'update', 'list', 'status', 'setup')   # require existing db present
-fake_db = ("oneshot",)                                                  # use fake in-memory db
+meta_cmds = ('help', 'version')                               # dont require valid data folder at all
+main_cmds = ('init', 'config', 'setup')                       # dont require existing db present
+archive_cmds = ('add', 'remove', 'update', 'list', 'status')  # require existing db present
+fake_db = ("oneshot",)                                        # use fake in-memory db
 
 display_first = (*meta_cmds, *main_cmds, *archive_cmds)
 

+ 6 - 0
archivebox/cli/archivebox_init.py

@@ -32,12 +32,18 @@ def main(args: Optional[List[str]]=None, stdin: Optional[IO]=None, pwd: Optional
         action='store_true',
         help='Run any updates or migrations without rechecking all snapshot dirs',
     )
+    parser.add_argument(
+        '--setup', #'-s',
+        action='store_true',
+        help='Automatically install dependencies and extras used for archiving',
+    )
     command = parser.parse_args(args or ())
     reject_stdin(__command__, stdin)
 
     init(
         force=command.force,
         quick=command.quick,
+        setup=command.setup,
         out_dir=pwd or OUTPUT_DIR,
     )
     

+ 16 - 9
archivebox/main.py

@@ -101,6 +101,11 @@ from .config import (
     USE_CHROME,
     CHROME_BINARY,
     CHROME_VERSION,
+    YOUTUBEDL_BINARY,
+    YOUTUBEDL_VERSION,
+    SINGLEFILE_VERSION,
+    READABILITY_VERSION,
+    MERCURY_VERSION,
     USE_YOUTUBEDL,
     USE_NODE,
     NODE_VERSION,
@@ -108,6 +113,7 @@ from .config import (
     CONFIG,
     USER_CONFIG,
     get_real_name,
+    setup_django,
 )
 from .logging_util import (
     TERM_WIDTH,
@@ -295,19 +301,19 @@ def run(subcommand: str,
 
 
 @enforce_types
-def init(force: bool=False, quick: bool=False, out_dir: Path=OUTPUT_DIR) -> None:
+def init(force: bool=False, quick: bool=False, setup: bool=False, out_dir: Path=OUTPUT_DIR) -> None:
     """Initialize a new ArchiveBox collection in the current directory"""
     
     from core.models import Snapshot
 
-    Path(out_dir).mkdir(exist_ok=True)
+    out_dir.mkdir(exist_ok=True)
     is_empty = not len(set(os.listdir(out_dir)) - ALLOWED_IN_OUTPUT_DIR)
 
-    if (Path(out_dir) / JSON_INDEX_FILENAME).exists():
+    if (out_dir / JSON_INDEX_FILENAME).exists():
         stderr("[!] This folder contains a JSON index. It is deprecated, and will no longer be kept up to date automatically.", color="lightyellow")
         stderr("    You can run `archivebox list --json --with-headers > index.json` to manually generate it.", color="lightyellow")
 
-    existing_index = (Path(out_dir) / SQL_INDEX_FILENAME).exists()
+    existing_index = (out_dir / SQL_INDEX_FILENAME).exists()
 
     if is_empty and not existing_index:
         print('{green}[+] Initializing a new ArchiveBox v{} collection...{reset}'.format(VERSION, **ANSI))
@@ -343,12 +349,12 @@ def init(force: bool=False, quick: bool=False, out_dir: Path=OUTPUT_DIR) -> None
     print(f'    + ./{CONFIG_FILE.relative_to(OUTPUT_DIR)}...')
     write_config_file({}, out_dir=out_dir)
 
-    if (Path(out_dir) / SQL_INDEX_FILENAME).exists():
+    if (out_dir / SQL_INDEX_FILENAME).exists():
         print('\n{green}[*] Verifying main SQL index and running any migrations needed...{reset}'.format(**ANSI))
     else:
         print('\n{green}[+] Building main SQL index and running initial migrations...{reset}'.format(**ANSI))
     
-    DATABASE_FILE = Path(out_dir) / SQL_INDEX_FILENAME
+    DATABASE_FILE = out_dir / SQL_INDEX_FILENAME
     for migration_line in apply_migrations(out_dir):
         print(f'    {migration_line}')
 
@@ -443,15 +449,16 @@ def init(force: bool=False, quick: bool=False, out_dir: Path=OUTPUT_DIR) -> None
         print('    For more usage and examples, run:')
         print('        archivebox help')
 
-    json_index = Path(out_dir) / JSON_INDEX_FILENAME
-    html_index = Path(out_dir) / HTML_INDEX_FILENAME
+    json_index = out_dir / JSON_INDEX_FILENAME
+    html_index = out_dir / HTML_INDEX_FILENAME
     index_name = f"{date.today()}_index_old"
     if json_index.exists():
         json_index.rename(f"{index_name}.json")
     if html_index.exists():
         html_index.rename(f"{index_name}.html")
 
-
+    if setup:
+        run_subcommand('setup', pwd=out_dir)
 
 @enforce_types
 def status(out_dir: Path=OUTPUT_DIR) -> None: