diff --git a/swh/objstorage/__init__.py b/swh/objstorage/__init__.py --- a/swh/objstorage/__init__.py +++ b/swh/objstorage/__init__.py @@ -7,6 +7,3 @@ from pkgutil import extend_path __path__: Iterable[str] = extend_path(__path__, __name__) - -# for BW compat -from swh.objstorage.factory import * # noqa diff --git a/swh/objstorage/api/client.py b/swh/objstorage/api/client.py --- a/swh/objstorage/api/client.py +++ b/swh/objstorage/api/client.py @@ -6,8 +6,8 @@ from swh.core.api import RPCClient from swh.model import hashutil -from ..objstorage import DEFAULT_CHUNK_SIZE, DEFAULT_LIMIT -from ..exc import Error, ObjNotFoundError, ObjStorageAPIError +from swh.objstorage.objstorage import DEFAULT_CHUNK_SIZE, DEFAULT_LIMIT +from swh.objstorage.exc import Error, ObjNotFoundError, ObjStorageAPIError class RemoteObjStorage: diff --git a/swh/objstorage/cli.py b/swh/objstorage/cli.py --- a/swh/objstorage/cli.py +++ b/swh/objstorage/cli.py @@ -3,19 +3,16 @@ # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information +# WARNING: do not import unnecessary things here to keep cli startup time under +# control import os import logging import time import click -import aiohttp.web -from swh.core import config from swh.core.cli import CONTEXT_SETTINGS -from swh.objstorage.factory import get_objstorage -from swh.objstorage.api.server import validate_config, make_app - @click.group(name="objstorage", context_settings=CONTEXT_SETTINGS) @click.option( @@ -29,6 +26,8 @@ def cli(ctx, config_file): """Software Heritage Objstorage tools. """ + from swh.core import config + if not config_file: config_file = os.environ.get("SWH_CONFIG_FILENAME") @@ -67,6 +66,9 @@ This is not meant to be run on production systems. """ + import aiohttp.web + from swh.objstorage.api.server import validate_config, make_app + app = make_app(validate_config(ctx.obj["config"])) if ctx.obj["log_level"] == "DEBUG": app.update(debug=True) @@ -79,6 +81,8 @@ def import_directories(ctx, directory): """Import a local directory in an existing objstorage. """ + from swh.objstorage.factory import get_objstorage + objstorage = get_objstorage(**ctx.obj["config"]["objstorage"]) nobj = 0 volume = 0 @@ -102,6 +106,8 @@ def fsck(ctx): """Check the objstorage is not corrupted. """ + from swh.objstorage.factory import get_objstorage + objstorage = get_objstorage(**ctx.obj["config"]["objstorage"]) for obj_id in objstorage: try: diff --git a/swh/objstorage/multiplexer/__init__.py b/swh/objstorage/multiplexer/__init__.py --- a/swh/objstorage/multiplexer/__init__.py +++ b/swh/objstorage/multiplexer/__init__.py @@ -1,5 +1,5 @@ -from .multiplexer_objstorage import MultiplexerObjStorage -from .striping_objstorage import StripingObjStorage +from swh.objstorage.multiplexer.multiplexer_objstorage import MultiplexerObjStorage +from swh.objstorage.multiplexer.striping_objstorage import StripingObjStorage __all__ = ["MultiplexerObjStorage", "StripingObjStorage"] diff --git a/swh/objstorage/multiplexer/filter/filter.py b/swh/objstorage/multiplexer/filter/filter.py --- a/swh/objstorage/multiplexer/filter/filter.py +++ b/swh/objstorage/multiplexer/filter/filter.py @@ -3,7 +3,7 @@ # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information -from ...objstorage import ObjStorage +from swh.objstorage.objstorage import ObjStorage class ObjStorageFilter(ObjStorage): diff --git a/swh/objstorage/multiplexer/filter/id_filter.py b/swh/objstorage/multiplexer/filter/id_filter.py --- a/swh/objstorage/multiplexer/filter/id_filter.py +++ b/swh/objstorage/multiplexer/filter/id_filter.py @@ -8,9 +8,9 @@ from swh.model import hashutil -from .filter import ObjStorageFilter -from ...objstorage import compute_hash -from ...exc import ObjNotFoundError +from swh.objstorage.multiplexer.filter.filter import ObjStorageFilter +from swh.objstorage.objstorage import compute_hash +from swh.objstorage.exc import ObjNotFoundError class IdObjStorageFilter(ObjStorageFilter, metaclass=abc.ABCMeta): diff --git a/swh/objstorage/multiplexer/filter/read_write_filter.py b/swh/objstorage/multiplexer/filter/read_write_filter.py --- a/swh/objstorage/multiplexer/filter/read_write_filter.py +++ b/swh/objstorage/multiplexer/filter/read_write_filter.py @@ -3,7 +3,7 @@ # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information -from .filter import ObjStorageFilter +from swh.objstorage.multiplexer.filter.filter import ObjStorageFilter class ReadObjStorageFilter(ObjStorageFilter): diff --git a/swh/objstorage/multiplexer/multiplexer_objstorage.py b/swh/objstorage/multiplexer/multiplexer_objstorage.py --- a/swh/objstorage/multiplexer/multiplexer_objstorage.py +++ b/swh/objstorage/multiplexer/multiplexer_objstorage.py @@ -7,8 +7,8 @@ import random import threading -from ..objstorage import ObjStorage -from ..exc import ObjNotFoundError +from swh.objstorage.objstorage import ObjStorage +from swh.objstorage.exc import ObjNotFoundError class ObjStorageThread(threading.Thread): diff --git a/swh/objstorage/multiplexer/striping_objstorage.py b/swh/objstorage/multiplexer/striping_objstorage.py --- a/swh/objstorage/multiplexer/striping_objstorage.py +++ b/swh/objstorage/multiplexer/striping_objstorage.py @@ -6,7 +6,10 @@ from collections import defaultdict import queue -from .multiplexer_objstorage import ObjStorageThread, MultiplexerObjStorage +from swh.objstorage.multiplexer.multiplexer_objstorage import ( + ObjStorageThread, + MultiplexerObjStorage, +) class StripingObjStorage(MultiplexerObjStorage):