From 2bf2a77584e230db4787044b43e03a7e0d3dbdeb Mon Sep 17 00:00:00 2001 From: Ryan Barrett Date: Thu, 12 Jan 2023 18:05:07 -0800 Subject: [PATCH] punt on getRepostedBy for now --- tests/test_xrpc_feed.py | 44 +++++++++++++++++++++------------- xrpc_feed.py | 53 +++++++++++++++++++++++++++++++++-------- 2 files changed, 70 insertions(+), 27 deletions(-) diff --git a/tests/test_xrpc_feed.py b/tests/test_xrpc_feed.py index 293d304..4aae3b8 100644 --- a/tests/test_xrpc_feed.py +++ b/tests/test_xrpc_feed.py @@ -1,5 +1,6 @@ """Unit tests for feed.py.""" import copy +from unittest import skip from unittest.mock import patch from granary.tests.test_bluesky import ( @@ -32,10 +33,10 @@ POST_THREAD_HTML = copy.deepcopy(POST_HTML).replace('', """

Uh huh

-
+
Eve -

Nuh uh

- +

This

+
""") @@ -137,17 +138,27 @@ class XrpcFeedTest(testutil.TestCase): query_string={'uri': 'http://a/post'}) self.assertEqual(400, resp.status_code, resp.get_data(as_text=True)) -# def test_getRepostedBy(self, mock_get): -# mock_get.return_value = requests_response(""" -# -# -# """, url='https://foo.com/') - -# got = self.client.get('/xrpc/app.bsky.feed.getRepostedBy', -# query_string={'actor': 'foo.com'}, -# ).json -# self.assertEqual({ -# }, got) + @skip + def test_getRepostedBy(self, mock_get): + mock_get.return_value = requests_response(POST_THREAD_HTML, + url='http://orig/post') + got = self.client.get('/xrpc/app.bsky.feed.getRepostedBy', + query_string={'uri': 'http://a/post'}) + self.assertEqual({ + 'uri': 'http://orig/post', + 'repostBy': [{ + '$type': 'app.bsky.feed.getRepostedBy#repostedBy', + 'did': 'did:web:eve.net', + 'declaration': { + '$type': 'app.bsky.system.declRef', + 'cid': 'TODO', + 'actorType': 'app.bsky.system.actorUser', + }, + 'handle': 'eve.net', + 'displayName': 'Eve', + 'indexedAt': '2022-01-02T03:04:05+00:00', + }], + }, got.json) # def test_getTimeline(self, mock_get): # mock_get.return_value = requests_response(""" @@ -156,10 +167,9 @@ class XrpcFeedTest(testutil.TestCase): # """, url='https://foo.com/') # got = self.client.get('/xrpc/app.bsky.feed.getTimeline', -# query_string={'actor': 'foo.com'}, -# ).json +# query_string={'actor': 'foo.com'}) # self.assertEqual({ -# }, got) +# }, got.json) def test_getVotes(self, mock_get): resp = self.client.get('/xrpc/app.bsky.feed.getVotes', diff --git a/xrpc_feed.py b/xrpc_feed.py index d8ee46f..00d5f88 100644 --- a/xrpc_feed.py +++ b/xrpc_feed.py @@ -76,17 +76,50 @@ def getPostThread(input, uri=None, depth=None): } -@xrpc_server.method('app.bsky.feed.getRepostedBy') -def getRepostedBy(input, uri=None, cid=None, limit=None, before=None): - """ - lexicons/app/bsky/feed/getRepostedBy.json - """ +# TODO +# what's the mf2 for repost children of an h-entry? u-repost, like u-comment? +# nothing about markup on https://indieweb.org/reposts +# based on https://indieweb.org/comments-display , it would be u-repost +# @xrpc_server.method('app.bsky.feed.getRepostedBy') +# def getRepostedBy(input, uri=None, cid=None, limit=None, before=None): +# """ +# lexicons/app/bsky/feed/getRepostedBy.json +# """ +# mf2 = util.fetch_mf2(uri, gateway=True) +# logger.info(f'Got mf2: {json.dumps(mf2, indent=2)}') + +# entry = mf2util.find_first_entry(mf2, ['h-entry']) +# logger.info(f'Entry: {json.dumps(entry, indent=2)}') +# if not entry: +# raise ValueError(f"No h-entry on {uri}") + +# obj = microformats2.json_to_object(entry) +# logger.info(f'AS1: {json.dumps(obj, indent=2)}') + +# return { +# 'uri': 'http://orig/post', +# 'repostBy': [{ +# '$type': 'app.bsky.feed.getRepostedBy#repostedBy', +# 'did': 'did:web:eve.net', +# 'declaration': { +# '$type': 'app.bsky.system.declRef', +# 'cid': 'TODO', +# 'actorType': 'app.bsky.system.actorUser', +# }, +# 'handle': 'eve.net', +# 'displayName': 'Eve', +# 'indexedAt': '2022-01-02T03:04:05+00:00', +# }], +# } + + +# TODO based on datastore +# @xrpc_server.method('app.bsky.feed.getTimeline') +# def getTimeline(input): +# """ +# lexicons/app/bsky/feed/getTimeline.json +# """ -@xrpc_server.method('app.bsky.feed.getTimeline') -def getTimeline(input): - """ - lexicons/app/bsky/feed/getTimeline.json - """ # TODO: use likes as votes? @xrpc_server.method('app.bsky.feed.getVotes')