Update twitter error handling

This commit is contained in:
Sonny Bakker 2021-09-18 21:20:45 +02:00
parent f5b708aafe
commit 67cc454595
2 changed files with 57 additions and 23 deletions

View file

@ -193,3 +193,35 @@ class TwitterClientTestCase(TestCase):
self.assertIsNone(user.twitter_oauth_token) self.assertIsNone(user.twitter_oauth_token)
self.assertIsNone(user.twitter_oauth_token_secret) self.assertIsNone(user.twitter_oauth_token_secret)
def test_client_does_not_reset_token(self):
"""
The user's token and refresh token should not be reset when an generic
exception is caught
"""
user = UserFactory(
twitter_oauth_token=str(uuid4()), twitter_oauth_token_secret=str(uuid4())
)
timeline = TwitterTimelineFactory(user=user)
response = Mock(json=lambda: {"errors": [{"code": 100}]})
self.mocked_read.side_effect = StreamException(
message="Generic message", response=response
)
with TwitterClient([timeline]) as client:
for data, stream in client:
with self.subTest(data=data, stream=stream):
self.assertIsNone(data)
self.assertIsNone(stream)
self.assertEquals(stream.rule.error, "")
self.assertEquals(stream.rule.succeeded, False)
self.mocked_read.assert_called()
user.refresh_from_db()
timeline.refresh_from_db()
self.assertIsNotNone(user.twitter_oauth_token)
self.assertIsNotNone(user.twitter_oauth_token_secret)

View file

@ -250,12 +250,14 @@ class TwitterClient(PostClient):
try: try:
response_data = e.response.json() response_data = e.response.json()
except JSONDecodeError: except JSONDecodeError:
logger.exception("Could not parse json for request")
continue continue
if "errors" in response_data: if "errors" in response_data:
errors = response_data["errors"] errors = response_data["errors"]
token_expired = any(error["code"] == 89 for error in errors) token_expired = any(error["code"] == 89 for error in errors)
if token_expired:
try: try:
import sentry_sdk import sentry_sdk