diff --git a/atproto.py b/atproto.py index cc861d57..3dd964dc 100644 --- a/atproto.py +++ b/atproto.py @@ -906,7 +906,7 @@ def fetch_blob(url, blob_field, name, check_size=True, check_type=True): logger.warning(e) continue - if link: + if link and link.as1: if img := util.get_url(link.as1, 'image'): props = appview.defs['app.bsky.embed.external#external']['properties'] fetch_blob(img, props, name='thumb', diff --git a/tests/test_atproto.py b/tests/test_atproto.py index 491a9f87..878f3590 100644 --- a/tests/test_atproto.py +++ b/tests/test_atproto.py @@ -1575,7 +1575,7 @@ def test_send_note_existing_repo(self, mock_create_task): -""", url='http://orig.co/inal'), +""", url='http://orig.co/post'), requests_response('blob contents', content_type='image/png'), ]) def test_send_note_first_link_preview_embed(self, _, __): @@ -1583,7 +1583,7 @@ def test_send_note_first_link_preview_embed(self, _, __): obj = Object(id='fake:post', source_protocol='fake', our_as1={ **NOTE_AS, - 'content': 'My original post', + 'content': 'My original post', }) self.assertTrue(ATProto.send(obj, 'https://bsky.brid.gy')) @@ -1593,14 +1593,14 @@ def test_send_note_first_link_preview_embed(self, _, __): last_tid = arroba.util.int_to_tid(arroba.util._tid_ts_last) self.assert_equals({ **NOTE_BSKY, - 'bridgyOriginalText': 'My original post', + 'bridgyOriginalText': 'My original post', 'embed': { '$type': 'app.bsky.embed.external', 'external': { '$type': 'app.bsky.embed.external#external', 'description': 'Descrypshun', 'title': 'Titull', - 'uri': 'http://orig.co/inal', + 'uri': 'http://orig.co/post', 'thumb': { '$type': 'blob', 'mimeType': 'image/png', @@ -1611,10 +1611,32 @@ def test_send_note_first_link_preview_embed(self, _, __): }, }, repo.get_record('app.bsky.feed.post', last_tid), ignore=['facets']) + @patch.object(tasks_client, 'create_task', return_value=Task(name='my task')) + def test_send_note_link_preview_existing_object_no_data(self, _): + user = self.make_user_and_repo() + + # no data! + Object(id='http://orig.co/post', source_protocol='web').put() + + obj = Object(id='fake:post', source_protocol='fake', our_as1={ + **NOTE_AS, + 'content': 'My original post', + }) + self.assertTrue(ATProto.send(obj, 'https://bsky.brid.gy')) + + # check repo, record + did = user.key.get().get_copy(ATProto) + repo = self.storage.load_repo(did) + last_tid = arroba.util.int_to_tid(arroba.util._tid_ts_last) + self.assert_equals({ + **NOTE_BSKY, + 'bridgyOriginalText': 'My original post', + }, repo.get_record('app.bsky.feed.post', last_tid), ignore=['facets']) + @patch.object(tasks_client, 'create_task', return_value=Task(name='my task')) @patch('requests.get', side_effect=[ requests_response(f'A poast', - url='http://orig.co/inal'), + url='http://orig.co/post'), ]) def test_send_note_link_preview_non_web_url(self, mock_get, mock_create_task): user = self.make_user_and_repo() @@ -1664,7 +1686,7 @@ def test_send_note_link_preview_blocklisted_domain(self, mock_get, __): -""", url='http://orig.co/inal'), +""", url='http://orig.co/post'), requests_response('blob contents', content_type='image/png'), ]) @patch.dict( @@ -1676,7 +1698,7 @@ def test_send_note_truncated_original_post_embed_overrides_first_link_preview( obj = Object(id='fake:post', source_protocol='fake', our_as1={ **NOTE_AS, - 'content': 'My original poaaast', + 'content': 'My original poaaast', }) self.assertTrue(ATProto.send(obj, 'https://bsky.brid.gy')) @@ -1687,7 +1709,7 @@ def test_send_note_truncated_original_post_embed_overrides_first_link_preview( self.assert_equals({ **NOTE_BSKY, 'text': 'My original […]', - 'bridgyOriginalText': 'My original poaaast', + 'bridgyOriginalText': 'My original poaaast', 'embed': { '$type': 'app.bsky.embed.external', 'external': {