From 130ad7d73ee054fd9512e7e1b11f33e5a8b26890 Mon Sep 17 00:00:00 2001 From: "Antoine R. Dumont (@ardumont)" Date: Thu, 28 Jan 2021 18:45:36 +0100 Subject: [PATCH] Make debian lister constructors compatible with credentials In effect, it just allows to add credentials to cgit, cran and pypi listers. This fixes instances of error [1] [1] https://sentry.softwareheritage.org/share/issue/a5fb50f8e43e4b328c4917771576c6b0/ Related to T2998 --- swh/lister/debian/lister.py | 10 ++++++--- swh/lister/debian/tests/test_lister.py | 31 ++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/swh/lister/debian/lister.py b/swh/lister/debian/lister.py index f62183d..439ee4b 100644 --- a/swh/lister/debian/lister.py +++ b/swh/lister/debian/lister.py @@ -11,7 +11,7 @@ import gzip from itertools import product import logging import lzma -from typing import Any, Callable, Dict, Iterator, List, Set, Tuple +from typing import Any, Callable, Dict, Iterator, List, Optional, Set, Tuple from urllib.parse import urljoin from debian.deb822 import Sources @@ -21,7 +21,7 @@ from swh.scheduler.interface import SchedulerInterface from swh.scheduler.model import ListedOrigin from .. import USER_AGENT -from ..pattern import Lister +from ..pattern import CredentialsType, Lister logger = logging.getLogger(__name__) @@ -76,9 +76,13 @@ class DebianLister(Lister[DebianListerState, DebianPageType]): mirror_url: str = "http://deb.debian.org/debian/", suites: List[Suite] = ["stretch", "buster", "bullseye"], components: List[Component] = ["main", "contrib", "non-free"], + credentials: Optional[CredentialsType] = None, ): super().__init__( - scheduler=scheduler, url=mirror_url, instance=distribution, + scheduler=scheduler, + url=mirror_url, + instance=distribution, + credentials=credentials, ) # to ensure urljoin will produce valid Sources URL diff --git a/swh/lister/debian/tests/test_lister.py b/swh/lister/debian/tests/test_lister.py index d4821a0..2dc5c6d 100644 --- a/swh/lister/debian/tests/test_lister.py +++ b/swh/lister/debian/tests/test_lister.py @@ -199,3 +199,34 @@ def test_lister_debian_updated_packages( assert stats.origins == 0 else: assert stats.origins != 0 + + +@pytest.mark.parametrize( + "credentials, expected_credentials", + [ + (None, []), + ({"key": "value"}, []), + ( + {"debian": {"Debian": [{"username": "user", "password": "pass"}]}}, + [{"username": "user", "password": "pass"}], + ), + ], +) +def test_lister_debian_instantiation_with_credentials( + credentials, expected_credentials, swh_scheduler +): + lister = DebianLister(swh_scheduler, credentials=credentials) + + # Credentials are allowed in constructor + assert lister.credentials == expected_credentials + + +def test_lister_debian_from_configfile(swh_scheduler_config, mocker): + load_from_envvar = mocker.patch("swh.lister.pattern.load_from_envvar") + load_from_envvar.return_value = { + "scheduler": {"cls": "local", **swh_scheduler_config}, + "credentials": {}, + } + lister = DebianLister.from_configfile() + assert lister.scheduler is not None + assert lister.credentials is not None