diff --git a/swh/deposit/client.py b/swh/deposit/client.py --- a/swh/deposit/client.py +++ b/swh/deposit/client.py @@ -9,16 +9,15 @@ import hashlib import os +import logging import requests import xmltodict -import logging from abc import ABCMeta, abstractmethod from typing import Any, Dict from urllib.parse import urljoin -from swh.core.config import SWHConfig - +from swh.core.config import read_raw_config, config_basepath logger = logging.getLogger(__name__) @@ -74,21 +73,15 @@ return m -class BaseApiDepositClient(SWHConfig): +class BaseApiDepositClient: """Deposit client base class """ - CONFIG_BASE_FILENAME = "deposit/client" - DEFAULT_CONFIG = { - "url": ("str", "http://localhost:5006"), - "auth": ("dict", {}), # with optional 'username'/'password' keys - } - def __init__(self, config=None, _client=requests): - super().__init__() if config is None: - self.config = super().parse_config_file() + config_file = os.environ["SWH_CONFIG_FILENAME"] + self.config: Dict[str, Any] = read_raw_config(config_basepath(config_file)) else: self.config = config 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 @@ -3,11 +3,12 @@ # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information +import os import logging -from typing import Mapping +from typing import Any, Dict -from swh.core.config import SWHConfig +from swh.core import config from swh.deposit.client import PrivateApiDepositClient @@ -15,28 +16,21 @@ logger = logging.getLogger(__name__) -class DepositChecker(SWHConfig): +class DepositChecker: """Deposit checker implementation. Trigger deposit's checks through the private api. """ - CONFIG_BASE_FILENAME = "deposit/checker" - - DEFAULT_CONFIG = { - "deposit": ("dict", {"url": "http://localhost:5006/1/private/", "auth": {},}) - } - - def __init__(self, config=None): - super().__init__() - if config is None: - self.config = self.parse_config_file() - else: - self.config = config + def __init__(self): + config_file = os.environ["SWH_CONFIG_FILENAME"] + self.config: Dict[str, Any] = config.read_raw_config( + config.config_basepath(config_file) + ) self.client = PrivateApiDepositClient(config=self.config["deposit"]) - def check(self, collection: str, deposit_id: str) -> Mapping[str, str]: + def check(self, collection: str, deposit_id: str) -> Dict[str, str]: status = None deposit_check_url = f"/{collection}/{deposit_id}/check/" logger.debug("deposit-check-url: %s", deposit_check_url) 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 @@ -1,12 +1,10 @@ -# Copyright (C) 2019 The Software Heritage developers +# Copyright (C) 2019-2020 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import re -import os import pytest -import yaml from functools import partial @@ -15,35 +13,18 @@ @pytest.fixture -def swh_config(tmp_path, swh_storage_postgresql, monkeypatch): - storage_config = { - "url": "https://deposit.softwareheritage.org/", - "storage": { - "cls": "local", - "args": { - "db": swh_storage_postgresql.dsn, - "objstorage": {"cls": "memory", "args": {}}, - }, - }, +def deposit_config(tmp_path): + return { + "deposit": { + "url": "https://deposit.softwareheritage.org/1/private/", + "auth": {}, + } } - conffile = os.path.join(tmp_path, "deposit.yml") - with open(conffile, "w") as f: - f.write(yaml.dump(storage_config)) - monkeypatch.setenv("SWH_CONFIG_FILENAME", conffile) - return conffile - @pytest.fixture -def deposit_checker(): - return DepositChecker( - config={ - "deposit": { - "url": "https://deposit.softwareheritage.org/1/private/", - "auth": {}, - } - } - ) +def deposit_checker(deposit_config_path): + return DepositChecker() @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 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2019 The Software Heritage developers +# Copyright (C) 2017-2020 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information @@ -6,7 +6,7 @@ from unittest.mock import patch -def test_check_deposit_ready(swh_config, requests_mock_datadir, deposit_checker): +def test_checker_deposit_ready(requests_mock_datadir, deposit_checker): """Check on a valid 'deposited' deposit should result in 'verified' """ @@ -14,7 +14,7 @@ assert actual_result == {"status": "eventful"} -def test_check_deposit_rejected(swh_config, requests_mock_datadir, deposit_checker): +def test_checker_deposit_rejected(requests_mock_datadir, deposit_checker): """Check on invalid 'deposited' deposit should result in 'rejected' """ @@ -23,7 +23,7 @@ @patch("swh.deposit.client.requests.get") -def test_check_deposit_rejected_exception(mock_requests, swh_config, deposit_checker): +def test_checker_deposit_rejected_exception(mock_requests, deposit_checker): """Check on invalid 'deposited' deposit should result in 'rejected' """ 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,8 +7,8 @@ @pytest.mark.db -def test_deposit_check_eventful( - mocker, swh_config, swh_scheduler_celery_app, swh_scheduler_celery_worker +def test_task_check_eventful( + mocker, deposit_config_path, swh_scheduler_celery_app, swh_scheduler_celery_worker ): """Successful check should make the check succeed @@ -30,8 +30,8 @@ @pytest.mark.db -def test_deposit_check_failure( - mocker, swh_config, swh_scheduler_celery_app, swh_scheduler_celery_worker +def test_task_check_failure( + mocker, deposit_config_path, swh_scheduler_celery_app, swh_scheduler_celery_worker ): """Unverified check status should make the check fail @@ -53,8 +53,8 @@ @pytest.mark.db -def test_deposit_check_3( - mocker, swh_config, swh_scheduler_celery_app, swh_scheduler_celery_worker +def test_task_check_3( + mocker, deposit_config_path, swh_scheduler_celery_app, swh_scheduler_celery_worker ): """Unexpected failures should fail the check