From fd43b56d31ebce09f11e42de8fb1109b7eda1e71 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 16 May 2022 10:11:45 -0700 Subject: [PATCH 1/2] Fixes celery error encountering Article type activities --- bookwyrm/activitypub/base_activity.py | 2 +- .../tests/views/inbox/test_inbox_create.py | 32 +++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index 6bee25f6..1aacfd1f 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -43,7 +43,7 @@ def naive_parse(activity_objects, activity_json, serializer=None): serializer = activity_objects[activity_type] except KeyError as err: # we know this exists and that we can't handle it - if activity_type in ["Question"]: + if activity_type in ["Question", "Article"]: return None raise ActivitySerializerError(err) diff --git a/bookwyrm/tests/views/inbox/test_inbox_create.py b/bookwyrm/tests/views/inbox/test_inbox_create.py index 4ee366cf..d08840b5 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_create.py +++ b/bookwyrm/tests/views/inbox/test_inbox_create.py @@ -208,16 +208,44 @@ class InboxCreate(TestCase): self.assertEqual(book_list.description, "summary text") self.assertEqual(book_list.remote_id, "https://example.com/list/22") - def test_create_unsupported_type(self, *_): + def test_create_unsupported_type_question(self, *_): """ignore activities we know we can't handle""" activity = self.create_json activity["object"] = { "id": "https://example.com/status/887", "type": "Question", } - # just observer how it doesn't throw an error + # just observe how it doesn't throw an error views.inbox.activity_task(activity) + def test_create_unsupported_type_article(self, *_): + """ special case in unsupported type because we do know what it is""" + activity = self.create_json + activity["object"] = { + "id": "https://example.com/status/887", + "type": "Article", + "name": "hello", + "published": "2021-04-29T21:27:30.014235+00:00", + "attributedTo": "https://example.com/user/mouse", + "to": ["https://www.w3.org/ns/activitystreams#Public"], + "cc": ["https://example.com/user/mouse/followers"], + "sensitive": False, + "@context": "https://www.w3.org/ns/activitystreams", + } + # just observe how it doesn't throw an error + views.inbox.activity_task(activity) + + def test_create_unsupported_type_unknown(self, *_): + """Something truly unexpected should throw an error""" + activity = self.create_json + activity["object"] = { + "id": "https://example.com/status/887", + "type": "Blaaaah", + } + # error this time + with self.assertRaises(ActivitySerializerError): + views.inbox.activity_task(activity) + def test_create_unknown_type(self, *_): """ignore activities we know we've never heard of""" activity = self.create_json From b2775c51606b9f7dba2983f4d8d7f57a9b28b5d8 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 16 May 2022 10:20:13 -0700 Subject: [PATCH 2/2] Check unsupported types before attempting to serialize --- bookwyrm/activitypub/base_activity.py | 4 ++-- bookwyrm/tests/views/inbox/test_inbox_create.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index 1aacfd1f..448d5563 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -39,12 +39,12 @@ def naive_parse(activity_objects, activity_json, serializer=None): activity_json["type"] = "PublicKey" activity_type = activity_json.get("type") + if activity_type in ["Question", "Article"]: + return None try: serializer = activity_objects[activity_type] except KeyError as err: # we know this exists and that we can't handle it - if activity_type in ["Question", "Article"]: - return None raise ActivitySerializerError(err) return serializer(activity_objects=activity_objects, **activity_json) diff --git a/bookwyrm/tests/views/inbox/test_inbox_create.py b/bookwyrm/tests/views/inbox/test_inbox_create.py index d08840b5..cc1b8d50 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_create.py +++ b/bookwyrm/tests/views/inbox/test_inbox_create.py @@ -219,7 +219,7 @@ class InboxCreate(TestCase): views.inbox.activity_task(activity) def test_create_unsupported_type_article(self, *_): - """ special case in unsupported type because we do know what it is""" + """special case in unsupported type because we do know what it is""" activity = self.create_json activity["object"] = { "id": "https://example.com/status/887",