diff --git a/src/newsreader/news/collection/feed.py b/src/newsreader/news/collection/feed.py index ef80365..7237073 100644 --- a/src/newsreader/news/collection/feed.py +++ b/src/newsreader/news/collection/feed.py @@ -70,7 +70,7 @@ class FeedBuilder(Builder): value = self.truncate_text(model_field, entry[field]) if field == "published_parsed": - created, aware_datetime = build_publication_date(value, tz) + aware_datetime, created = build_publication_date(value, tz) data[model_field] = aware_datetime if created else None elif field == "summary": summary = self.sanitize_summary(value) diff --git a/src/newsreader/news/collection/tests/feed/collector/tests.py b/src/newsreader/news/collection/tests/feed/collector/tests.py index cb61242..6834b9c 100644 --- a/src/newsreader/news/collection/tests/feed/collector/tests.py +++ b/src/newsreader/news/collection/tests/feed/collector/tests.py @@ -139,7 +139,7 @@ class FeedCollectorTestCase(TestCase): self.mocked_parse.return_value = duplicate_mock rule = CollectionRuleFactory() - _, aware_datetime = build_publication_date( + aware_datetime, _ = build_publication_date( struct_time((2019, 5, 20, 16, 7, 37, 0, 140, 0)), pytz.utc ) @@ -152,7 +152,7 @@ class FeedCollectorTestCase(TestCase): rule=rule, ) - _, aware_datetime = build_publication_date( + aware_datetime, _ = build_publication_date( struct_time((2019, 5, 20, 12, 19, 19, 0, 140, 0)), pytz.utc ) @@ -165,7 +165,7 @@ class FeedCollectorTestCase(TestCase): rule=rule, ) - _, aware_datetime = build_publication_date( + aware_datetime, _ = build_publication_date( struct_time((2019, 5, 20, 16, 32, 38, 0, 140, 0)), pytz.utc ) diff --git a/src/newsreader/news/collection/utils.py b/src/newsreader/news/collection/utils.py index 0abc367..83eb708 100644 --- a/src/newsreader/news/collection/utils.py +++ b/src/newsreader/news/collection/utils.py @@ -1,5 +1,5 @@ from datetime import datetime, tzinfo -from time import mktime, struct_time +from time import struct_time from typing import Tuple from django.utils import timezone @@ -14,11 +14,11 @@ from newsreader.news.collection.response_handler import ResponseHandler def build_publication_date(dt: struct_time, tz: tzinfo) -> Tuple: try: - naive_datetime = datetime.fromtimestamp(mktime(dt)) + naive_datetime = datetime(*dt[:6]) published_parsed = timezone.make_aware(naive_datetime, timezone=tz) - except TypeError: - return False, None - return True, published_parsed + except (TypeError, ValueError): + return None, False + return published_parsed, True def fetch(url: str) -> Response: