Show URL's during feed exceptions & use version number in User-Agent

This commit is contained in:
Sonny Bakker 2020-08-12 09:35:45 +02:00
parent aff108d7fc
commit 128284dca3
3 changed files with 23 additions and 18 deletions

View file

@ -161,17 +161,27 @@ class FeedClient(Client):
stream.rule.last_suceeded = timezone.now() stream.rule.last_suceeded = timezone.now()
yield response_data yield response_data
except (StreamNotFoundException, StreamTimeOutException) as e:
logger.warning(f"Request failed for {stream.rule.url}")
self.set_rule_error(stream.rule, e)
continue
except StreamException as e: except StreamException as e:
logger.exception("Request failed") logger.exception(f"Request failed for {stream.rule.url}")
length = stream.rule._meta.get_field("error").max_length self.set_rule_error(stream.rule, e)
stream.rule.error = e.message[-length:]
stream.rule.succeeded = False
yield ({"entries": []}, stream) continue
finally: finally:
stream.rule.save() stream.rule.save()
def set_rule_error(self, rule, exception):
length = rule._meta.get_field("error").max_length
rule.error = exception.message[-length:]
rule.succeeded = False
class FeedCollector(Collector): class FeedCollector(Collector):
builder = FeedBuilder builder = FeedBuilder

View file

@ -41,13 +41,12 @@ class FeedClientTestCase(TestCase):
def test_client_catches_stream_exception(self): def test_client_catches_stream_exception(self):
rule = FeedFactory.create() rule = FeedFactory.create()
mock_stream = MagicMock(rule=rule)
self.mocked_read.side_effect = StreamException(message="Stream exception") self.mocked_read.side_effect = StreamException(message="Stream exception")
with FeedClient([rule]) as client: with FeedClient([rule]) as client:
for data, stream in client: for data, stream in client:
self.assertEquals(data, {"entries": []}) self.assertEquals(data, None)
self.assertEquals(stream.rule.error, "Stream exception") self.assertEquals(stream.rule.error, "Stream exception")
self.assertEquals(stream.rule.succeeded, False) self.assertEquals(stream.rule.succeeded, False)
@ -55,7 +54,6 @@ class FeedClientTestCase(TestCase):
def test_client_catches_stream_not_found_exception(self): def test_client_catches_stream_not_found_exception(self):
rule = FeedFactory.create() rule = FeedFactory.create()
mock_stream = MagicMock(rule=rule)
self.mocked_read.side_effect = StreamNotFoundException( self.mocked_read.side_effect = StreamNotFoundException(
message="Stream not found" message="Stream not found"
@ -63,7 +61,7 @@ class FeedClientTestCase(TestCase):
with FeedClient([rule]) as client: with FeedClient([rule]) as client:
for data, stream in client: for data, stream in client:
self.assertEquals(data, {"entries": []}) self.assertEquals(data, None)
self.assertEquals(stream.rule.error, "Stream not found") self.assertEquals(stream.rule.error, "Stream not found")
self.assertEquals(stream.rule.succeeded, False) self.assertEquals(stream.rule.succeeded, False)
@ -71,13 +69,12 @@ class FeedClientTestCase(TestCase):
def test_client_catches_stream_denied_exception(self): def test_client_catches_stream_denied_exception(self):
rule = FeedFactory.create() rule = FeedFactory.create()
mock_stream = MagicMock(rule=rule)
self.mocked_read.side_effect = StreamDeniedException(message="Stream denied") self.mocked_read.side_effect = StreamDeniedException(message="Stream denied")
with FeedClient([rule]) as client: with FeedClient([rule]) as client:
for data, stream in client: for data, stream in client:
self.assertEquals(data, {"entries": []}) self.assertEquals(data, None)
self.assertEquals(stream.rule.error, "Stream denied") self.assertEquals(stream.rule.error, "Stream denied")
self.assertEquals(stream.rule.succeeded, False) self.assertEquals(stream.rule.succeeded, False)
@ -85,7 +82,6 @@ class FeedClientTestCase(TestCase):
def test_client_catches_stream_timed_out(self): def test_client_catches_stream_timed_out(self):
rule = FeedFactory.create() rule = FeedFactory.create()
mock_stream = MagicMock(rule=rule)
self.mocked_read.side_effect = StreamTimeOutException( self.mocked_read.side_effect = StreamTimeOutException(
message="Stream timed out" message="Stream timed out"
@ -93,7 +89,7 @@ class FeedClientTestCase(TestCase):
with FeedClient([rule]) as client: with FeedClient([rule]) as client:
for data, stream in client: for data, stream in client:
self.assertEquals(data, {"entries": []}) self.assertEquals(data, None)
self.assertEquals(stream.rule.error, "Stream timed out") self.assertEquals(stream.rule.error, "Stream timed out")
self.assertEquals(stream.rule.succeeded, False) self.assertEquals(stream.rule.succeeded, False)
@ -101,7 +97,6 @@ class FeedClientTestCase(TestCase):
def test_client_catches_stream_parse_exception(self): def test_client_catches_stream_parse_exception(self):
rule = FeedFactory.create() rule = FeedFactory.create()
mock_stream = MagicMock(rule=rule)
self.mocked_read.side_effect = StreamParseException( self.mocked_read.side_effect = StreamParseException(
message="Stream has wrong contents" message="Stream has wrong contents"
@ -109,7 +104,7 @@ class FeedClientTestCase(TestCase):
with FeedClient([rule]) as client: with FeedClient([rule]) as client:
for data, stream in client: for data, stream in client:
self.assertEquals(data, {"entries": []}) self.assertEquals(data, None)
self.assertEquals(stream.rule.error, "Stream has wrong contents") self.assertEquals(stream.rule.error, "Stream has wrong contents")
self.assertEquals(stream.rule.succeeded, False) self.assertEquals(stream.rule.succeeded, False)
@ -117,13 +112,12 @@ class FeedClientTestCase(TestCase):
def test_client_catches_long_exception_text(self): def test_client_catches_long_exception_text(self):
rule = FeedFactory.create() rule = FeedFactory.create()
mock_stream = MagicMock(rule=rule)
self.mocked_read.side_effect = StreamParseException(message=words(1000)) self.mocked_read.side_effect = StreamParseException(message=words(1000))
with FeedClient([rule]) as client: with FeedClient([rule]) as client:
for data, stream in client: for data, stream in client:
self.assertEquals(data, {"entries": []}) self.assertEquals(data, None)
self.assertEquals(len(stream.rule.error), 1024) self.assertEquals(len(stream.rule.error), 1024)
self.assertEquals(stream.rule.succeeded, False) self.assertEquals(stream.rule.succeeded, False)

View file

@ -1,5 +1,6 @@
from datetime import datetime from datetime import datetime
from django.conf import settings
from django.db.models.fields import CharField, TextField from django.db.models.fields import CharField, TextField
from django.template.defaultfilters import truncatechars from django.template.defaultfilters import truncatechars
from django.utils import timezone from django.utils import timezone
@ -12,7 +13,7 @@ from requests.exceptions import RequestException
from newsreader.news.collection.response_handler import ResponseHandler from newsreader.news.collection.response_handler import ResponseHandler
DEFAULT_HEADERS = {"User-Agent": "linux:rss.fudiggity.nl:v0.2"} DEFAULT_HEADERS = {"User-Agent": f"linux:rss.fudiggity.nl:{settings.VERSION}"}
def build_publication_date(dt, tz): def build_publication_date(dt, tz):