kopia lustrzana https://github.com/snarfed/bridgy-fed
Protocol.translate_ids: handle multiply valued fields like inReplyTo
rodzic
bfbd7494bb
commit
8d67e79f8f
23
protocol.py
23
protocol.py
|
@ -696,15 +696,20 @@ class Protocol:
|
|||
inner_objs = outer_obj['object'] = as1.get_objects(outer_obj)
|
||||
|
||||
def translate(elem, field, fn):
|
||||
elem[field] = as1.get_object(elem, field)
|
||||
if id := elem[field].get('id'):
|
||||
from_cls = Protocol.for_id(id)
|
||||
# TODO: what if from_cls is None? relax translate_object_id,
|
||||
# make it a noop if we don't know enough about from/to?
|
||||
if from_cls and from_cls != to_cls:
|
||||
elem[field]['id'] = fn(id=id, from_=from_cls, to=to_cls)
|
||||
if elem[field].keys() == {'id'}:
|
||||
elem[field] = elem[field]['id']
|
||||
elem[field] = as1.get_objects(elem, field)
|
||||
for obj in elem[field]:
|
||||
if id := obj.get('id'):
|
||||
from_cls = Protocol.for_id(id)
|
||||
# TODO: what if from_cls is None? relax translate_object_id,
|
||||
# make it a noop if we don't know enough about from/to?
|
||||
if from_cls and from_cls != to_cls:
|
||||
obj['id'] = fn(id=id, from_=from_cls, to=to_cls)
|
||||
|
||||
elem[field] = [o['id'] if o.keys() == {'id'} else o
|
||||
for o in elem[field]]
|
||||
|
||||
if len(elem[field]) == 1:
|
||||
elem[field] = elem[field][0]
|
||||
|
||||
type = as1.object_type(outer_obj)
|
||||
translate(outer_obj, 'id',
|
||||
|
|
|
@ -792,6 +792,18 @@ class ProtocolTest(TestCase):
|
|||
OtherFake.bot_dm(user, 'nope')
|
||||
self.assertEqual([], OtherFake.sent)
|
||||
|
||||
# TODO: translate_ids tests that actually test translation
|
||||
def test_translate_ids_empty(self):
|
||||
self.assertEqual({}, Fake.translate_ids({}))
|
||||
|
||||
def test_translate_ids_single_inReplyTo(self):
|
||||
obj = {'inReplyTo': 'foo'}
|
||||
self.assertEqual(obj, Fake.translate_ids(obj))
|
||||
|
||||
def test_translate_ids_multiple_inReplyTo(self):
|
||||
obj = {'inReplyTo': ['foo', 'bar']}
|
||||
self.assertEqual(obj, Fake.translate_ids(obj))
|
||||
|
||||
|
||||
class ProtocolReceiveTest(TestCase):
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue