atproto: DatastoreClient.get_record: if Object doesn't have bsky, fetch it

band-aid for #1711, somewhere around #1360 we started overwriting Object.bsky for external records with our_as1, argh
pull/1716/head
Ryan Barrett 2025-01-22 15:38:00 -08:00
rodzic 6b43b14c5a
commit f12bdf793c
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 6BE31FDF4776E9D4
2 zmienionych plików z 32 dodań i 23 usunięć

Wyświetl plik

@ -138,16 +138,19 @@ class DatastoreClient(Client):
def get_record(self, repo=None, collection=None, rkey=None):
assert repo and collection and rkey, (repo, collection, rkey)
uri = at_uri(did=repo, collection=collection, rkey=rkey)
did = repo
uri = at_uri(did=did, collection=collection, rkey=rkey)
record = None
# local record in a repo we own?
if repo := arroba.server.storage.load_repo(repo):
if repo := arroba.server.storage.load_repo(did):
record = repo.get_record(collection=collection, rkey=rkey)
# remote record that we may have a cached copy of
if not record:
if obj := ATProto.load(uri, raise_=False):
if not obj.bsky:
obj = ATProto.load(uri, local=False, remote=True, raise_=False)
record = obj.bsky
if record:

Wyświetl plik

@ -74,7 +74,14 @@ NOTE_BSKY = {
'bridgyOriginalUrl': 'fake:post',
'createdAt': '2007-07-07T03:04:05.000Z',
}
NOTE_BSKY_RECORD = {
'uri': 'at://did:plc:user/co.l.l/post',
'cid': 'my++sidd',
'value': {
**NOTE_BSKY,
'cid': 'my++sidd',
},
}
@patch('ids.COPIES_PROTOCOLS', ['atproto'])
class ATProtoTest(TestCase):
@ -2468,30 +2475,29 @@ Sed tortor neque, aliquet quis posuere aliquam […]
}, client.com.atproto.repo.getRecord(repo='did:plc:user',
collection='co.l.l', rkey='post'))
@patch('requests.get', return_value=requests_response({
'uri': 'at://did:plc:user/co.l.l/tid',
'cid': 'my++sidd',
'value': {
'$type': 'app.bsky.feed.post',
'text': 'baz',
'createdAt': NOW.isoformat(),
},
}))
@patch('requests.get', return_value=requests_response(NOTE_BSKY_RECORD))
def test_datastore_client_get_record_pass_through(self, mock_get):
self.make_user_and_repo()
client = DatastoreClient('https://appview.local')
self.assertEqual({
'uri': 'at://did:plc:user/co.l.l/post',
'cid': 'my++sidd',
'value': {
'$type': 'app.bsky.feed.post',
'text': 'baz',
'createdAt': NOW.isoformat(),
'cid': 'my++sidd',
},
}, client.com.atproto.repo.getRecord(repo='did:plc:user',
collection='co.l.l', rkey='post'))
self.assertEqual(NOTE_BSKY_RECORD, client.com.atproto.repo.getRecord(
repo='did:plc:user', collection='co.l.l', rkey='post'))
mock_get.assert_called_with(
'https://appview.local/xrpc/com.atproto.repo.getRecord?repo=did%3Aplc%3Auser&collection=co.l.l&rkey=post',
json=None, data=None, headers=ANY)
@patch('requests.get', return_value=requests_response(NOTE_BSKY_RECORD))
def test_datastore_client_get_record_pass_through_if_bsky_unset(self, mock_get):
self.make_user_and_repo()
self.store_object(id='at://did:plc:user/co.l.l/post', our_as1={'foo': 'bar'})
client = DatastoreClient('https://appview.local')
self.assertEqual(NOTE_BSKY_RECORD, client.com.atproto.repo.getRecord(
repo='did:plc:user', collection='co.l.l', rkey='post'))
self.assert_object('at://did:plc:user/co.l.l/post',
bsky=NOTE_BSKY_RECORD['value'],
source_protocol='atproto')
mock_get.assert_called_with(
'https://appview.local/xrpc/com.atproto.repo.getRecord?repo=did%3Aplc%3Auser&collection=co.l.l&rkey=post',