diff --git a/archivebox/cli/__init__.py b/archivebox/cli/__init__.py index 890065a4..dfeda23e 100644 --- a/archivebox/cli/__init__.py +++ b/archivebox/cli/__init__.py @@ -8,7 +8,7 @@ import argparse from typing import Optional, Dict, List, IO, Union from pathlib import Path -from ..config import OUTPUT_DIR +from ..config import OUTPUT_DIR, check_data_folder, check_migrations from importlib import import_module @@ -67,8 +67,14 @@ def run_subcommand(subcommand: str, cmd_requires_db = subcommand in archive_cmds init_pending = '--init' in subcommand_args or '--quick-init' in subcommand_args + if cmd_requires_db: + check_data_folder(pwd) + setup_django(in_memory_db=subcommand in fake_db, check_db=cmd_requires_db and not init_pending) + if cmd_requires_db: + check_migrations() + module = import_module('.archivebox_{}'.format(subcommand), __package__) module.main(args=subcommand_args, stdin=stdin, pwd=pwd) # type: ignore diff --git a/archivebox/config.py b/archivebox/config.py index 1c284ae7..884ad236 100644 --- a/archivebox/config.py +++ b/archivebox/config.py @@ -1020,8 +1020,8 @@ def check_data_folder(out_dir: Union[str, Path, None]=None, config: ConfigDict=C output_dir = out_dir or config['OUTPUT_DIR'] assert isinstance(output_dir, (str, Path)) - sql_index_exists = (Path(output_dir) / SQL_INDEX_FILENAME).exists() - if not sql_index_exists: + archive_dir_exists = (Path(output_dir) / ARCHIVE_DIR_NAME).exists() + if not archive_dir_exists: stderr('[X] No archivebox index found in the current directory.', color='red') stderr(f' {output_dir}', color='lightyellow') stderr() @@ -1033,26 +1033,22 @@ def check_data_folder(out_dir: Union[str, Path, None]=None, config: ConfigDict=C stderr(' archivebox init') raise SystemExit(2) +def check_migrations(out_dir: Union[str, Path, None]=None, config: ConfigDict=CONFIG): + output_dir = out_dir or config['OUTPUT_DIR'] from .index.sql import list_migrations pending_migrations = [name for status, name in list_migrations() if not status] - if (not sql_index_exists) or pending_migrations: - if sql_index_exists: - pending_operation = f'apply the {len(pending_migrations)} pending migrations' - else: - pending_operation = 'generate the new SQL main index' - + if pending_migrations: stderr('[X] This collection was created with an older version of ArchiveBox and must be upgraded first.', color='lightyellow') stderr(f' {output_dir}') stderr() - stderr(f' To upgrade it to the latest version and {pending_operation} run:') + stderr(f' To upgrade it to the latest version and apply the {len(pending_migrations)} pending migrations, run:') stderr(' archivebox init') raise SystemExit(3) - sources_dir = Path(output_dir) / SOURCES_DIR_NAME - if not sources_dir.exists(): - sources_dir.mkdir() + (Path(output_dir) / SOURCES_DIR_NAME).mkdir(exist_ok=True) + (Path(output_dir) / LOGS_DIR_NAME).mkdir(exist_ok=True)