diff --git a/swh/scheduler/journal_client.py b/swh/scheduler/journal_client.py --- a/swh/scheduler/journal_client.py +++ b/swh/scheduler/journal_client.py @@ -14,18 +14,23 @@ msg_type = "origin_visit_status" -def max_date(d1: Optional[datetime], d2: Optional[datetime]) -> datetime: - """Return the max date of the visit stats +def max_date(*dates: Optional[datetime]) -> datetime: + """Return the max date of given (possibly None) dates + At least one date must be not None. """ - if d1 is None and d2 is None: + datesok: Tuple[datetime, ...] = tuple(d for d in dates if d is not None) + if not datesok: raise ValueError("At least one date should be a valid datetime") - if d1 is None: - assert d2 is not None # make mypy happy - return d2 - if d2 is None: - return d1 - return max(d1, d2) + + maxdate = datesok[0] + if len(datesok) == 1: + return maxdate + + for d in datesok[1:]: + maxdate = max(d, maxdate) + + return maxdate def process_journal_objects( diff --git a/swh/scheduler/tests/test_journal_client.py b/swh/scheduler/tests/test_journal_client.py --- a/swh/scheduler/tests/test_journal_client.py +++ b/swh/scheduler/tests/test_journal_client.py @@ -36,19 +36,28 @@ @pytest.mark.parametrize( - "d1,d2,expected_max_date", + "dates,expected_max_date", [ - (None, DATE2, DATE2), - (DATE1, None, DATE1), - (DATE1, DATE2, DATE2), - (DATE2, DATE1, DATE2), + ((DATE1,), DATE1), + ((None, DATE2), DATE2), + ((DATE1, None), DATE1), + ((DATE1, DATE2), DATE2), + ((DATE2, DATE1), DATE2), + ((DATE1, DATE2, DATE3), DATE3), + ((None, DATE2, DATE3), DATE3), + ((None, None, DATE3), DATE3), + ((DATE1, None, DATE3), DATE3), ], ) -def test_max_date(d1, d2, expected_max_date): - assert max_date(d1, d2) == expected_max_date +def test_max_date(dates, expected_max_date): + assert max_date(*dates) == expected_max_date def test_max_date_raise(): + with pytest.raises(ValueError, match="valid datetime"): + max_date() + with pytest.raises(ValueError, match="valid datetime"): + max_date(None) with pytest.raises(ValueError, match="valid datetime"): max_date(None, None)