From dcbf16db6ee4da01d49c642e322db1ae0a16ac0a Mon Sep 17 00:00:00 2001 From: Ryan Barrett Date: Mon, 18 Sep 2023 11:52:17 -0700 Subject: [PATCH] Object.as1 conversion from bsky, injecting actor/author prefer user id to profile object id, default to AT URI repo DID --- models.py | 11 ++++++++--- tests/test_models.py | 23 ++++++++++------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/models.py b/models.py index 173883b..bb9ba39 100644 --- a/models.py +++ b/models.py @@ -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, diff --git a/tests/test_models.py b/tests/test_models.py index 5c4e0cb..a628de2 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -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)