kopia lustrzana https://github.com/tsileo/little-boxes
Make Like work again
rodzic
24e50b4fac
commit
31b9b40b35
|
@ -378,7 +378,7 @@ class BaseActivity(object, metaclass=_ActivityMeta):
|
|||
) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
def _undo_outbox(self) -> None:
|
||||
def _undo_outbox(self, as_actor: "Person") -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
def _pre_process_from_inbox(self, as_actor: "Person") -> None:
|
||||
|
@ -599,11 +599,11 @@ class Follow(BaseActivity):
|
|||
|
||||
BACKEND.undo_new_follower(as_actor, self)
|
||||
|
||||
def _undo_outbox(self) -> None:
|
||||
def _undo_outbox(self, as_actor: "Person") -> None:
|
||||
if BACKEND is None:
|
||||
raise UninitializedBackendError
|
||||
|
||||
BACKEND.undo_new_following(self.get_actor(), self)
|
||||
BACKEND.undo_new_following(as_actor, self)
|
||||
|
||||
def build_accept(self) -> BaseActivity:
|
||||
return self._build_reply(ActivityType.ACCEPT)
|
||||
|
@ -694,7 +694,7 @@ class Undo(BaseActivity):
|
|||
# DB.outbox.update_one({'remote_id': obj.id}, {'$set': {'meta.undo': True}})
|
||||
|
||||
try:
|
||||
obj._undo_outbox()
|
||||
obj._undo_outbox(as_actor)
|
||||
logger.debug(f"_undo_outbox called for {obj}")
|
||||
except NotImplementedError:
|
||||
logger.debug(f"_undo_outbox not implemented for {obj}")
|
||||
|
@ -711,12 +711,16 @@ class Like(BaseActivity):
|
|||
return [self.get_object().get_actor().id]
|
||||
|
||||
def _process_from_inbox(self, as_actor: "Person") -> None:
|
||||
# ABC
|
||||
self.inbox_like(self)
|
||||
if BACKEND is None:
|
||||
raise UninitializedBackendError
|
||||
|
||||
BACKEND.inbox_like(as_actor, self)
|
||||
|
||||
def _undo_inbox(self, as_actor: "Person") -> None:
|
||||
# ABC
|
||||
self.inbox_undo_like(as_actor, self)
|
||||
if BACKEND is None:
|
||||
raise UninitializedBackendError
|
||||
|
||||
BACKEND.inbox_undo_like(as_actor, self)
|
||||
|
||||
def _post_to_outbox(
|
||||
self,
|
||||
|
@ -725,12 +729,16 @@ class Like(BaseActivity):
|
|||
activity: ObjectType,
|
||||
recipients: List[str],
|
||||
):
|
||||
# ABC
|
||||
self.outbox_like(self)
|
||||
if BACKEND is None:
|
||||
raise UninitializedBackendError
|
||||
|
||||
def _undo_outbox(self) -> None:
|
||||
# ABC
|
||||
self.outbox_undo_like(self)
|
||||
BACKEND.outbox_like(as_actor, self)
|
||||
|
||||
def _undo_outbox(self, as_actor: "Person") -> None:
|
||||
if BACKEND is None:
|
||||
raise UninitializedBackendError
|
||||
|
||||
BACKEND.outbox_undo_like(as_actor, self)
|
||||
|
||||
def build_undo(self) -> BaseActivity:
|
||||
return Undo(
|
||||
|
@ -783,11 +791,11 @@ class Announce(BaseActivity):
|
|||
# ABC
|
||||
self.outbox_announce(self)
|
||||
|
||||
def _undo_outbox(self) -> None:
|
||||
def _undo_outbox(self, as_actor: "Person") -> None:
|
||||
if BACKEND is None:
|
||||
raise UninitializedBackendError
|
||||
|
||||
BACKEND.outbox_undo_announce(self)
|
||||
BACKEND.outbox_undo_announce(as_actor, self)
|
||||
|
||||
def build_undo(self) -> BaseActivity:
|
||||
return Undo(object=self.to_dict(embed=True))
|
||||
|
|
|
@ -61,3 +61,19 @@ class Backend(abc.ABC):
|
|||
@abc.abstractmethod
|
||||
def inbox_update(self, as_actor: "ap.Person", activity: "ap.Update") -> None:
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def inbox_like(self, as_actor: "ap.Person", activity: "ap.Like") -> None:
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def inbox_undo_like(self, as_actor: "ap.Person", activity: "ap.Like") -> None:
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def outbox_like(self, as_actor: "ap.Person", activity: "ap.Like") -> None:
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def outbox_undo_like(self, as_actor: "ap.Person", activity: "ap.Like") -> None:
|
||||
pass
|
||||
|
|
|
@ -195,16 +195,20 @@ class InMemBackend(Backend):
|
|||
# return as_actor.id == activity.get_actor().id
|
||||
return True # FIXME(tsileo): implement this
|
||||
|
||||
def inbox_like(self, activity: ap.Like) -> None:
|
||||
@track_call
|
||||
def inbox_like(self, as_actor: ap.Person, activity: ap.Like) -> None:
|
||||
pass
|
||||
|
||||
def inbox_undo_like(self, activity: ap.Like) -> None:
|
||||
@track_call
|
||||
def inbox_undo_like(self, as_actor: ap.Person, activity: ap.Like) -> None:
|
||||
pass
|
||||
|
||||
def outbox_like(self, activity: ap.Like) -> None:
|
||||
@track_call
|
||||
def outbox_like(self, as_actor: ap.Person, activity: ap.Like) -> None:
|
||||
pass
|
||||
|
||||
def outbox_undo_like(self, activity: ap.Like) -> None:
|
||||
@track_call
|
||||
def outbox_undo_like(self, as_actor: ap.Person, activity: ap.Like) -> None:
|
||||
pass
|
||||
|
||||
def inbox_announce(self, activity: ap.Announce) -> None:
|
||||
|
|
|
@ -494,3 +494,60 @@ def test_little_boxes_follow_and_new_create_note_and_delete():
|
|||
lambda _delete: _assert_eq(_delete.id, delete.id),
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def test_little_boxes_follow_and_new_create_note_and_like():
|
||||
back, create = test_little_boxes_follow_and_new_create_note()
|
||||
|
||||
me = back.get_user("tom")
|
||||
other = back.get_user("tom2")
|
||||
|
||||
outbox = ap.Outbox(me)
|
||||
|
||||
like = ap.Like(actor=me.id, object=create.get_object().id)
|
||||
outbox.post(like)
|
||||
|
||||
back.assert_called_methods(
|
||||
me,
|
||||
(
|
||||
"a Like activity is published",
|
||||
"outbox_new",
|
||||
lambda as_actor: _assert_eq(as_actor.id, me.id),
|
||||
lambda activity: _assert_eq(activity.id, like.id),
|
||||
),
|
||||
(
|
||||
'"outbox_create" hook is called',
|
||||
"outbox_like",
|
||||
lambda as_actor: _assert_eq(as_actor.id, me.id),
|
||||
lambda _like: _assert_eq(_like.id, like.id),
|
||||
),
|
||||
(
|
||||
"the Delete activity is posted to the note creator",
|
||||
"post_to_remote_inbox",
|
||||
lambda as_actor: _assert_eq(as_actor.id, me.id),
|
||||
lambda payload: None,
|
||||
lambda recipient: _assert_eq(recipient, other.inbox),
|
||||
),
|
||||
)
|
||||
|
||||
back.assert_called_methods(
|
||||
other,
|
||||
(
|
||||
"receiving the Like, ensure we check the actor is not blocked",
|
||||
"outbox_is_blocked",
|
||||
lambda as_actor: _assert_eq(as_actor.id, other.id),
|
||||
lambda remote_actor: _assert_eq(remote_actor, me.id),
|
||||
),
|
||||
(
|
||||
"receiving the Delete activity",
|
||||
"inbox_new",
|
||||
lambda as_actor: _assert_eq(as_actor.id, other.id),
|
||||
lambda activity: _assert_eq(activity.id, like.id),
|
||||
),
|
||||
(
|
||||
'"inbox_like" hook is called',
|
||||
"inbox_like",
|
||||
lambda as_actor: _assert_eq(as_actor.id, other.id),
|
||||
lambda _like: _assert_eq(_like.id, like.id),
|
||||
),
|
||||
)
|
||||
|
|
Ładowanie…
Reference in New Issue