diff --git a/swh/lister/sourceforge/tasks.py b/swh/lister/sourceforge/tasks.py --- a/swh/lister/sourceforge/tasks.py +++ b/swh/lister/sourceforge/tasks.py @@ -15,6 +15,12 @@ return SourceForgeLister.from_configfile().run().dict() +@shared_task(name=__name__ + ".IncrementalSourceForgeLister") +def list_sourceforge_incremental() -> Dict[str, int]: + """Full update of a SourceForge instance""" + return SourceForgeLister.from_configfile(incremental=True).run().dict() + + @shared_task(name=__name__ + ".ping") def _ping(): return "OK" diff --git a/swh/lister/sourceforge/tests/test_tasks.py b/swh/lister/sourceforge/tests/test_tasks.py --- a/swh/lister/sourceforge/tests/test_tasks.py +++ b/swh/lister/sourceforge/tests/test_tasks.py @@ -5,6 +5,8 @@ from swh.lister.pattern import ListerStats +lister_module = "swh.lister.sourceforge.tasks.SourceForgeLister" + def test_sourceforge_ping(swh_scheduler_celery_app, swh_scheduler_celery_worker): res = swh_scheduler_celery_app.send_task("swh.lister.sourceforge.tasks.ping") @@ -18,7 +20,7 @@ swh_scheduler_celery_app, swh_scheduler_celery_worker, mocker ): stats = ListerStats(pages=10, origins=900) - mock_lister = mocker.patch("swh.lister.sourceforge.tasks.SourceForgeLister") + mock_lister = mocker.patch(lister_module) mock_lister.from_configfile.return_value = mock_lister mock_lister.run.return_value = stats @@ -32,3 +34,23 @@ mock_lister.from_configfile.assert_called_once() mock_lister.run.assert_called_once() assert res.result == stats.dict() + + +def test_incremental_listing( + swh_scheduler_celery_app, swh_scheduler_celery_worker, mocker +): + stats = ListerStats(pages=1, origins=90) + mock_lister = mocker.patch(lister_module) + mock_lister.from_configfile.return_value = mock_lister + mock_lister.run.return_value = stats + + res = swh_scheduler_celery_app.send_task( + "swh.lister.sourceforge.tasks.IncrementalSourceForgeLister" + ) + assert res + res.wait() + assert res.successful() + + mock_lister.from_configfile.assert_called_once() + mock_lister.run.assert_called_once() + assert res.result == stats.dict()