From 9ff28ea6904cb1e001ae3499fec745c903b4cea5 Mon Sep 17 00:00:00 2001 From: Ryan Barrett Date: Sat, 8 Jun 2024 14:22:00 -0700 Subject: [PATCH] ATProto.send: short circuit out for deletes of objects we don't have fixes https://console.cloud.google.com/errors/detail/COjSuYPS0qLvmAE;time=P30D?project=bridgy-federated , https://console.cloud.google.com/errors/detail/COX1ss-HvOq5Xg;time=P30D?project=bridgy-federated --- atproto.py | 5 +++-- tests/test_atproto.py | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/atproto.py b/atproto.py index 163833d2..d2e66046 100644 --- a/atproto.py +++ b/atproto.py @@ -412,10 +412,11 @@ class ATProto(User, Protocol): base_obj = obj if type in ('post', 'update', 'delete'): obj_as1 = as1.get_object(obj.as1) - type = as1.object_type(obj_as1) - # TODO: should we not load for deletes? base_obj = PROTOCOLS[obj.source_protocol].load(obj_as1['id']) if not base_obj: + if type == 'delete': + logger.info("Can't delete, we don't have original object {obj_as1['id']}") + return False base_obj = obj # convert to Bluesky record; short circuits on error diff --git a/tests/test_atproto.py b/tests/test_atproto.py index 84376d08..e980bd3f 100644 --- a/tests/test_atproto.py +++ b/tests/test_atproto.py @@ -1023,13 +1023,13 @@ Sed tortor neque, aliquet quis posuere aliquam, imperdiet sitamet odio. In moles self.test_send_note_existing_repo() mock_create_task.reset_mock() - update = self.store_object(id='fake:delete', source_protocol='fake', our_as1={ + delete = self.store_object(id='fake:delete', source_protocol='fake', our_as1={ 'objectType': 'activity', 'verb': 'delete', 'actor': 'fake:user', 'object': 'fake:post', }) - self.assertTrue(ATProto.send(update, 'https://bsky.brid.gy/')) + self.assertTrue(ATProto.send(delete, 'https://bsky.brid.gy/')) # check repo, record did = self.user.key.get().get_copy(ATProto) @@ -1039,6 +1039,19 @@ Sed tortor neque, aliquet quis posuere aliquam, imperdiet sitamet odio. In moles mock_create_task.assert_called() # atproto-commit + @patch.object(tasks_client, 'create_task') + def test_send_delete_no_original(self, mock_create_task): + self.make_user_and_repo() + + obj = Object(id='fake:delete', source_protocol='fake', our_as1={ + 'objectType': 'activity', + 'verb': 'delete', + 'actor': 'fake:user', + 'object': 'fake:post', + }) + self.assertFalse(ATProto.send(obj, 'https://bsky.brid.gy/')) + mock_create_task.assert_not_called() # atproto-commit + @patch.object(tasks_client, 'create_task', return_value=Task(name='my task')) def test_send_like(self, mock_create_task): user = self.make_user_and_repo()