Show feed URL's when catching feed client exceptions

This commit is contained in:
Sonny Bakker 2020-08-12 09:31:50 +02:00
parent bd9573cebc
commit ad51d17d2d
2 changed files with 21 additions and 17 deletions

View file

@ -161,17 +161,27 @@ class FeedClient(Client):
stream.rule.last_suceeded = timezone.now()
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:
logger.exception("Request failed")
logger.exception(f"Request failed for {stream.rule.url}")
length = stream.rule._meta.get_field("error").max_length
stream.rule.error = e.message[-length:]
stream.rule.succeeded = False
self.set_rule_error(stream.rule, e)
yield ({"entries": []}, stream)
continue
finally:
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):
builder = FeedBuilder

View file

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