diff --git a/swh/deposit/api/common.py b/swh/deposit/api/common.py --- a/swh/deposit/api/common.py +++ b/swh/deposit/api/common.py @@ -31,7 +31,6 @@ STATE_IRI, DEPOSIT_STATUS_DEPOSITED, DEPOSIT_STATUS_PARTIAL, - PRIVATE_CHECK_DEPOSIT, DEPOSIT_STATUS_LOAD_SUCCESS, ARCHIVE_TYPE, METADATA_TYPE, @@ -195,14 +194,12 @@ if self.config["checks"]: deposit.save() # needed to have a deposit id - args = [deposit.collection.name, deposit.id] scheduler = self.scheduler if deposit.status == DEPOSIT_STATUS_DEPOSITED and not deposit.check_task_id: - check_url = request.build_absolute_uri( - reverse(PRIVATE_CHECK_DEPOSIT, args=args) - ) task = create_oneshot_task_dict( - "check-deposit", deposit_check_url=check_url + "check-deposit", + collection=deposit.collection.name, + deposit_id=deposit.id, ) check_task_id = scheduler.create_tasks([task])[0]["id"] deposit.check_task_id = check_task_id diff --git a/swh/deposit/loader/checker.py b/swh/deposit/loader/checker.py --- a/swh/deposit/loader/checker.py +++ b/swh/deposit/loader/checker.py @@ -7,25 +7,38 @@ from typing import Mapping +from swh.core.config import SWHConfig + from swh.deposit.client import PrivateApiDepositClient logger = logging.getLogger(__name__) -class DepositChecker: +class DepositChecker(SWHConfig): """Deposit checker implementation. Trigger deposit's checks through the private api. """ - def __init__(self, client=None): + CONFIG_BASE_FILENAME = "deposit/checker" + + DEFAULT_CONFIG = { + "deposit": ("dict", {"url": "http://localhost:5006/1/private/", "auth": {},}) + } + + def __init__(self, config=None): super().__init__() - self.client = client if client else PrivateApiDepositClient() + if config is None: + self.config = self.parse_config_file() + else: + self.config = config + self.client = PrivateApiDepositClient(config=self.config["deposit"]) - def check(self, deposit_check_url: str) -> Mapping[str, str]: + def check(self, collection: str, deposit_id: str) -> Mapping[str, str]: status = None + deposit_check_url = f"/{collection}/{deposit_id}/check/" try: r = self.client.check(deposit_check_url) status = "eventful" if r == "verified" else "failed" diff --git a/swh/deposit/loader/tasks.py b/swh/deposit/loader/tasks.py --- a/swh/deposit/loader/tasks.py +++ b/swh/deposit/loader/tasks.py @@ -3,16 +3,18 @@ # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information +from typing import Mapping + from celery import shared_task from swh.deposit.loader.checker import DepositChecker @shared_task(name=__name__ + ".ChecksDepositTsk") -def check_deposit(deposit_check_url): +def check_deposit(collection: str, deposit_id: str) -> Mapping[str, str]: """Check a deposit's status Args: see :func:`DepositChecker.check`. """ checker = DepositChecker() - return checker.check(deposit_check_url) + return checker.check(collection, deposit_id) diff --git a/swh/deposit/tests/api/test_deposit_schedule.py b/swh/deposit/tests/api/test_deposit_schedule.py --- a/swh/deposit/tests/api/test_deposit_schedule.py +++ b/swh/deposit/tests/api/test_deposit_schedule.py @@ -76,9 +76,11 @@ task = tasks[0] assert timestamp_before_call <= task.pop("next_run") <= timestamp_after_call - check_url = f"http://testserver/1/private/test/{deposit_id}/check/" assert task == { - "arguments": {"args": [], "kwargs": {"deposit_check_url": check_url,},}, + "arguments": { + "args": [], + "kwargs": {"collection": "test", "deposit_id": int(deposit_id),}, + }, "current_interval": datetime.timedelta(days=1), "id": 1, "policy": "oneshot", diff --git a/swh/deposit/tests/loader/conftest.py b/swh/deposit/tests/loader/conftest.py --- a/swh/deposit/tests/loader/conftest.py +++ b/swh/deposit/tests/loader/conftest.py @@ -44,8 +44,15 @@ @pytest.fixture -def deposit_checker(swh_config): - return DepositChecker() +def deposit_checker(): + return DepositChecker( + config={ + "deposit": { + "url": "https://deposit.softwareheritage.org/1/private/", + "auth": {}, + } + } + ) @pytest.fixture diff --git a/swh/deposit/tests/loader/test_checker.py b/swh/deposit/tests/loader/test_checker.py --- a/swh/deposit/tests/loader/test_checker.py +++ b/swh/deposit/tests/loader/test_checker.py @@ -3,18 +3,14 @@ # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information -from django.urls import reverse from unittest.mock import patch -from swh.deposit.config import PRIVATE_CHECK_DEPOSIT - def test_check_deposit_ready(swh_config, requests_mock_datadir, deposit_checker): """Check on a valid 'deposited' deposit should result in 'verified' """ - deposit_check_url = reverse(PRIVATE_CHECK_DEPOSIT, args=["test", 1]) - actual_result = deposit_checker.check(deposit_check_url=deposit_check_url) + actual_result = deposit_checker.check(collection="test", deposit_id=1) assert actual_result == {"status": "eventful"} @@ -22,8 +18,7 @@ """Check on invalid 'deposited' deposit should result in 'rejected' """ - deposit_check_url = reverse(PRIVATE_CHECK_DEPOSIT, args=["test", 2]) - actual_result = deposit_checker.check(deposit_check_url=deposit_check_url) + actual_result = deposit_checker.check(collection="test", deposit_id=2) assert actual_result == {"status": "failed"} @@ -33,6 +28,5 @@ """ mock_requests.side_effect = ValueError("simulated problem when checking") - deposit_check_url = reverse(PRIVATE_CHECK_DEPOSIT, args=["test", 3]) - actual_result = deposit_checker.check(deposit_check_url=deposit_check_url) + actual_result = deposit_checker.check(collection="test", deposit_id=3) assert actual_result == {"status": "failed"} diff --git a/swh/deposit/tests/loader/test_tasks.py b/swh/deposit/tests/loader/test_tasks.py --- a/swh/deposit/tests/loader/test_tasks.py +++ b/swh/deposit/tests/loader/test_tasks.py @@ -7,15 +7,15 @@ @patch("swh.deposit.loader.checker.DepositChecker.check") -def deposit_check(checker, swh_config, swh_app, celery_session_worker): +def test_deposit_check(checker, swh_config, swh_app, celery_session_worker): checker.return_value = {"status": "uneventful"} res = swh_app.send_task( - "swh.deposit.loader.tasks.ChecksDepositTsk", args=["check_deposit_url"] + "swh.deposit.loader.tasks.ChecksDepositTsk", args=["collection", 42] ) assert res res.wait() assert res.successful() assert res.result == {"status": "uneventful"} - checker.assert_called_once_with("check_deposit_url") + checker.assert_called_once_with("collection", 42)