kopia lustrzana https://github.com/snarfed/bridgy-fed
rodzic
85ae5bc675
commit
9c5adab4f4
19
atproto.py
19
atproto.py
|
@ -276,17 +276,17 @@ class ATProto(User, Protocol):
|
|||
|
||||
type = as1.object_type(obj.as1)
|
||||
base_obj = obj
|
||||
if type in ('accept', 'undo'):
|
||||
logger.info(f'Skipping unsupported type {type}, not writing to repo')
|
||||
return False
|
||||
elif type in ('post', 'update', 'delete'):
|
||||
if type in ('post', 'update', 'delete'):
|
||||
obj_as1 = as1.get_object(obj.as1)
|
||||
type = as1.object_type(obj_as1)
|
||||
base_obj = PROTOCOLS[obj.source_protocol].load(obj_as1['id'])
|
||||
if not base_obj:
|
||||
base_obj = obj
|
||||
|
||||
assert type in ('note', 'article')
|
||||
collection = bluesky.AS1_TO_COLLECTION.get(type)
|
||||
if not collection:
|
||||
logger.info(f'Skipping unsupported type {type}, not writing to repo')
|
||||
return False
|
||||
|
||||
from_cls = PROTOCOLS[obj.source_protocol]
|
||||
from_key = from_cls.actor_key(obj)
|
||||
|
@ -318,14 +318,13 @@ class ATProto(User, Protocol):
|
|||
ndb.transactional()
|
||||
def write():
|
||||
tid = next_tid()
|
||||
logger.info(f'Storing ATProto app.bsky.feed.post {tid}: ' +
|
||||
logger.info(f'Storing ATProto {collection} {tid}: ' +
|
||||
json_dumps(dag_json.encode(record).decode(), indent=2))
|
||||
|
||||
repo.apply_writes(
|
||||
[Write(action=Action.CREATE, collection='app.bsky.feed.post',
|
||||
rkey=tid, record=record)])
|
||||
repo.apply_writes([Write(action=Action.CREATE, collection=collection,
|
||||
rkey=tid, record=record)])
|
||||
|
||||
at_uri = f'at://{user.atproto_did}/app.bsky.feed.post/{tid}'
|
||||
at_uri = f'at://{user.atproto_did}/{collection}/{tid}'
|
||||
base_obj.add('copies', Target(uri=at_uri, protocol=to_cls.LABEL))
|
||||
base_obj.put()
|
||||
|
||||
|
|
|
@ -487,7 +487,7 @@ class ATProtoTest(TestCase):
|
|||
mock_create_task.assert_called()
|
||||
|
||||
@patch.object(tasks_client, 'create_task', return_value=Task(name='my task'))
|
||||
def test_send_existing_repo(self, mock_create_task):
|
||||
def test_send_note_existing_repo(self, mock_create_task):
|
||||
user = self.make_user_and_repo()
|
||||
obj = self.store_object(id='fake:post', source_protocol='fake', our_as1={
|
||||
**POST_AS,
|
||||
|
@ -507,6 +507,96 @@ class ATProtoTest(TestCase):
|
|||
|
||||
mock_create_task.assert_called()
|
||||
|
||||
@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()
|
||||
obj = self.store_object(id='fake:like', source_protocol='fake', our_as1={
|
||||
'objectType': 'activity',
|
||||
'verb': 'like',
|
||||
'id': 'fake:like',
|
||||
'actor': 'fake:user',
|
||||
'object': 'at://did/app.bsky.feed.post/tid',
|
||||
})
|
||||
self.assertTrue(ATProto.send(obj, 'https://atproto.brid.gy/'))
|
||||
|
||||
# check repo, record
|
||||
repo = self.storage.load_repo(user.atproto_did)
|
||||
last_tid = arroba.util.int_to_tid(arroba.util._tid_ts_last)
|
||||
record = repo.get_record('app.bsky.feed.like', last_tid)
|
||||
self.assertEqual({
|
||||
'$type': 'app.bsky.feed.like',
|
||||
'subject': {
|
||||
'uri': 'at://did/app.bsky.feed.post/tid',
|
||||
'cid': 'TODO',
|
||||
},
|
||||
'createdAt': '',
|
||||
}, record)
|
||||
|
||||
at_uri = f'at://{user.atproto_did}/app.bsky.feed.like/{last_tid}'
|
||||
self.assertEqual([Target(uri=at_uri, protocol='atproto')],
|
||||
Object.get_by_id(id='fake:like').copies)
|
||||
|
||||
mock_create_task.assert_called()
|
||||
|
||||
@patch.object(tasks_client, 'create_task', return_value=Task(name='my task'))
|
||||
def test_send_repost(self, mock_create_task):
|
||||
user = self.make_user_and_repo()
|
||||
obj = self.store_object(id='fake:repost', source_protocol='fake', our_as1={
|
||||
'objectType': 'activity',
|
||||
'verb': 'share',
|
||||
'id': 'fake:repost',
|
||||
'actor': 'fake:user',
|
||||
'object': 'at://did/app.bsky.feed.post/tid',
|
||||
})
|
||||
self.assertTrue(ATProto.send(obj, 'https://atproto.brid.gy/'))
|
||||
|
||||
# check repo, record
|
||||
repo = self.storage.load_repo(user.atproto_did)
|
||||
last_tid = arroba.util.int_to_tid(arroba.util._tid_ts_last)
|
||||
record = repo.get_record('app.bsky.feed.repost', last_tid)
|
||||
self.assertEqual({
|
||||
'$type': 'app.bsky.feed.repost',
|
||||
'subject': {
|
||||
'uri': 'at://did/app.bsky.feed.post/tid',
|
||||
'cid': 'TODO',
|
||||
},
|
||||
'createdAt': '',
|
||||
}, record)
|
||||
|
||||
at_uri = f'at://{user.atproto_did}/app.bsky.feed.repost/{last_tid}'
|
||||
self.assertEqual([Target(uri=at_uri, protocol='atproto')],
|
||||
Object.get_by_id(id='fake:repost').copies)
|
||||
|
||||
mock_create_task.assert_called()
|
||||
|
||||
@patch.object(tasks_client, 'create_task', return_value=Task(name='my task'))
|
||||
def test_send_follow(self, mock_create_task):
|
||||
user = self.make_user_and_repo()
|
||||
obj = self.store_object(id='fake:follow', source_protocol='fake', our_as1={
|
||||
'objectType': 'activity',
|
||||
'verb': 'follow',
|
||||
'id': 'fake:follow',
|
||||
'actor': 'fake:user',
|
||||
'object': 'did:plc:bob',
|
||||
})
|
||||
self.assertTrue(ATProto.send(obj, 'https://atproto.brid.gy/'))
|
||||
|
||||
# check repo, record
|
||||
repo = self.storage.load_repo(user.atproto_did)
|
||||
last_tid = arroba.util.int_to_tid(arroba.util._tid_ts_last)
|
||||
record = repo.get_record('app.bsky.graph.follow', last_tid)
|
||||
self.assertEqual({
|
||||
'$type': 'app.bsky.graph.follow',
|
||||
'subject': 'did:plc:bob',
|
||||
'createdAt': '',
|
||||
}, record)
|
||||
|
||||
at_uri = f'at://{user.atproto_did}/app.bsky.graph.follow/{last_tid}'
|
||||
self.assertEqual([Target(uri=at_uri, protocol='atproto')],
|
||||
Object.get_by_id(id='fake:follow').copies)
|
||||
|
||||
mock_create_task.assert_called()
|
||||
|
||||
@patch.object(tasks_client, 'create_task')
|
||||
def test_send_not_our_repo(self, mock_create_task):
|
||||
self.assertFalse(ATProto.send(Object(id='fake:post'), 'http://other.pds/'))
|
||||
|
|
Ładowanie…
Reference in New Issue