diff --git a/setup.py b/setup.py --- a/setup.py +++ b/setup.py @@ -56,7 +56,7 @@ include_package_data=True, entry_points=""" [swh.cli.subcommands] - content-replayer=swh.objstorage.replayer.cli:cli + content-replayer=swh.objstorage.replayer.cli:objstorage_cli_group """, classifiers=[ "Programming Language :: Python :: 3", diff --git a/swh/objstorage/replayer/cli.py b/swh/objstorage/replayer/cli.py --- a/swh/objstorage/replayer/cli.py +++ b/swh/objstorage/replayer/cli.py @@ -3,9 +3,9 @@ # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information -import functools +# WARNING: do not import unnecessary things here to keep cli startup time under +# control import logging -import mmap import click @@ -14,16 +14,10 @@ except ImportError: notify = None -from swh.model.model import SHA1_SIZE -from swh.journal.client import get_journal_client -from swh.objstorage.cli import cli -from swh.objstorage.factory import get_objstorage +from swh.objstorage.cli import cli as objstorage_cli_group -from swh.objstorage.replayer.replay import is_hash_in_bytearray -from swh.objstorage.replayer.replay import process_replay_objects_content - -@cli.command("replay") +@objstorage_cli_group.command("replay") @click.option( "--stop-after-objects", "-n", @@ -68,6 +62,14 @@ ObjStorage before copying an object. You can turn that off if you know you're copying to an empty ObjStorage. """ + import functools + import mmap + from swh.model.model import SHA1_SIZE + from swh.journal.client import get_journal_client + from swh.objstorage.factory import get_objstorage + from swh.objstorage.replayer.replay import is_hash_in_bytearray + from swh.objstorage.replayer.replay import process_replay_objects_content + conf = ctx.obj["config"] try: objstorage_src = get_objstorage(**conf.pop("objstorage")) @@ -126,7 +128,7 @@ def main(): logging.basicConfig() - return cli(auto_envvar_prefix="SWH_OBJSTORAGE") + return objstorage_cli_group(auto_envvar_prefix="SWH_OBJSTORAGE") if __name__ == "__main__": diff --git a/swh/objstorage/replayer/tests/test_cli.py b/swh/objstorage/replayer/tests/test_cli.py --- a/swh/objstorage/replayer/tests/test_cli.py +++ b/swh/objstorage/replayer/tests/test_cli.py @@ -21,7 +21,7 @@ from swh.journal.serializers import key_to_kafka from swh.model.hashutil import hash_to_hex from swh.objstorage.backends.in_memory import InMemoryObjStorage -from swh.objstorage.replayer.cli import cli +from swh.objstorage.replayer.cli import objstorage_cli_group from swh.objstorage.replayer.replay import CONTENT_REPLAY_RETRIES @@ -51,7 +51,7 @@ def decorator(f): @functools.wraps(f) - @patch("swh.objstorage.replayer.cli.get_objstorage") + @patch("swh.objstorage.factory.get_objstorage") def newf(get_objstorage_mock, *args, **kwargs): get_objstorage_mock.side_effect = get_mock_objstorage f(*args, objstorages=objstorages, **kwargs) @@ -71,7 +71,9 @@ yaml.dump(config, config_fd) config_fd.seek(0) args = ["-C" + config_fd.name] + list(args) - return runner.invoke(cli, args, obj={"log_level": logging.DEBUG}, env=env,) + return runner.invoke( + objstorage_cli_group, args, obj={"log_level": logging.DEBUG}, env=env, + ) def test_replay_help():