Object.as1 conversion from bsky, injecting actor/author

prefer user id to profile object id, default to AT URI repo DID
pull/642/head
Ryan Barrett 2023-09-18 11:52:17 -07:00
rodzic 5b16386fbc
commit dcbf16db6e
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 6BE31FDF4776E9D4
2 zmienionych plików z 18 dodań i 16 usunięć

Wyświetl plik

@ -494,14 +494,19 @@ class Object(StringIdModel):
else None)
if field:
repo, _, _ = arroba.util.parse_at_uri(self.key.id())
obj.setdefault(field, repo)
# load matching user. prefer bridged non-ATProto user
# to ATProto user
user = User.get_by_atproto_did(repo)
if user:
logger.debug(f'Filling in {field} from {user}')
user_as1 = (user.obj.as1 if user.obj and user.obj.as1
else user.key.id())
obj.setdefault(field, user_as1)
if user.obj and user.obj.as1:
obj[field] = {
**user.obj.as1,
'id': user.key.id(),
}
else:
obj[field] = user.key.id()
elif self.mf2:
obj = microformats2.json_to_object(self.mf2,

Wyświetl plik

@ -431,6 +431,7 @@ class ObjectTest(TestCase):
'objectType': 'activity',
'verb': 'like',
'id': 'at://did:plc:foo/co.ll/123',
'actor': 'did:plc:foo',
'object': 'http://example.com/original/post',
}
@ -439,33 +440,29 @@ class ObjectTest(TestCase):
self.assert_equals(like_as1, obj.as1)
# ATProto user without Object
user = self.make_user(id='did:plc:foo', cls=ATProto)
obj = Object(id='at://did:plc:foo/co.ll/123', bsky=like_bsky)
self.assertEqual({
**like_as1,
'actor': 'did:plc:foo',
}, obj.as1)
user = ATProto(id='did:plc:foo')
user.put()
self.assertEqual(like_as1, obj.as1)
# ATProto user with Object
user.obj = self.store_object(id='fake:profile', our_as1={'foo': 'bar'})
user.obj = self.store_object(id='at://did:plc:foo/profile/self',
our_as1={'foo': 'bar'})
user.put()
obj = Object(id='at://did:plc:foo/co.ll/123', bsky=like_bsky)
self.assertEqual({
**like_as1,
'actor': {
'id': 'fake:profile',
'id': 'did:plc:foo',
'foo': 'bar',
},
}, obj.as1)
# Fake user, should prefer to ATProto user
user.obj = self.store_object(id='fake:profile', our_as1={'baz': 'biff'})
user.put()
obj = Object(id='at://did:plc:foo/co.ll/123', bsky=like_bsky)
user = self.make_user(id='fake:user', cls=Fake, atproto_did='did:plc:foo',
obj_as1={'baz': 'biff'})
self.assertEqual({
**like_as1,
'actor': {
'id': 'fake:profile',
'id': 'fake:user',
'baz': 'biff',
},
}, obj.as1)