diff --git a/packagedb/package_managers.py b/packagedb/package_managers.py index 544ed3ed..81d2ac2f 100644 --- a/packagedb/package_managers.py +++ b/packagedb/package_managers.py @@ -218,13 +218,12 @@ def get_latest_date(self, downloads): latest_date = None for download in downloads: upload_time = download.get("upload_time_iso_8601") - if upload_time: - current_date = dateparser.parse(upload_time) - if not latest_date: + if not upload_time: + continue + + current_date = dateparser.parse(upload_time) + if not latest_date or current_date > latest_date: latest_date = current_date - else: - if current_date > latest_date: - latest_date = current_date return latest_date diff --git a/packagedb/tests/test_package_managers.py b/packagedb/tests/test_package_managers.py index f8392318..7dcf6267 100644 --- a/packagedb/tests/test_package_managers.py +++ b/packagedb/tests/test_package_managers.py @@ -105,6 +105,24 @@ def test_pypi_fetch_with_no_release(self, mock_response): results = list(PypiVersionAPI().fetch("django")) assert results == [] + def test_pypi_get_latest_date_skips_missing_upload_time(self): + downloads = [ + {}, + {"upload_time_iso_8601": "2010-12-23T05:14:23.509436Z"}, + {"upload_time_iso_8601": "2010-12-23T05:20:23.509436Z"}, + ] + + latest_date = PypiVersionAPI().get_latest_date(downloads) + + assert latest_date == dt_local(2010, 12, 23, 5, 20, 23, 509436) + + def test_pypi_get_latest_date_with_no_valid_upload_time(self): + downloads = [{}, {"url": "https://files.pythonhosted.org/example.whl"}] + + latest_date = PypiVersionAPI().get_latest_date(downloads) + + assert latest_date is None + @mock.patch("packagedb.package_managers.get_response") def test_ruby_fetch_with_no_release(self, mock_response): with open(os.path.join(TEST_DATA, "gem.json")) as f: