Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9342691
D3124.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Subscribers
None
D3124.diff
View Options
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)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Jul 3, 12:56 PM (1 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3215930
Attached To
D3124: Pass collection + id to the checker instead of an URL.
Event Timeline
Log In to Comment