diff --git a/swh/lister/__init__.py b/swh/lister/__init__.py --- a/swh/lister/__init__.py +++ b/swh/lister/__init__.py @@ -4,8 +4,11 @@ # See top-level LICENSE file for more information import logging + import pkg_resources +from swh.lister import pattern + logger = logging.getLogger(__name__) @@ -51,5 +54,16 @@ registry_entry = LISTERS[lister_name].load()() lister_cls = registry_entry["lister"] - lister = lister_cls(override_config=conf) - return lister + if issubclass(lister_cls, pattern.Lister): + # New-style listers allow overriding the configuration by subclassing, + # instead of having an override_config argument in __init__. + class OverriddenConfigLister(lister_cls): + def load_config(self, conf=conf): + config = super().load_config() + config.update(conf) + return config + + return OverriddenConfigLister() + else: + # Old-style lister + return lister_cls(override_config=conf) diff --git a/swh/lister/tests/test_cli.py b/swh/lister/tests/test_cli.py --- a/swh/lister/tests/test_cli.py +++ b/swh/lister/tests/test_cli.py @@ -6,7 +6,6 @@ import pytest -from swh.lister.core.lister_base import ListerBase from swh.lister.cli import get_lister, SUPPORTED_LISTERS from .test_utils import init_db @@ -27,7 +26,7 @@ db_url = init_db().url() for lister_name in SUPPORTED_LISTERS: lst = get_lister(lister_name, db_url) - assert isinstance(lst, ListerBase) + assert hasattr(lst, "run") def test_get_lister_override(): @@ -45,9 +44,7 @@ # check the override ends up defined in the lister for lister_name, url in listers.items(): lst = get_lister( - lister_name, - db_url, - **{"url": url, "priority": "high", "policy": "oneshot",}, + lister_name, db_url, url=url, priority="high", policy="oneshot" ) assert lst.url == url