Tweak queries
This commit is contained in:
parent
77d7dba417
commit
77e4f00171
2 changed files with 31 additions and 11 deletions
|
@ -10,7 +10,13 @@ import config
|
||||||
from core.activitypub import _answer_key
|
from core.activitypub import _answer_key
|
||||||
from core.activitypub import post_to_outbox
|
from core.activitypub import post_to_outbox
|
||||||
from core.db import DB
|
from core.db import DB
|
||||||
|
from core.meta import by_remote_id
|
||||||
|
from core.meta import MetaKey
|
||||||
|
from core.meta import inc
|
||||||
from core.meta import Box
|
from core.meta import Box
|
||||||
|
from core.meta import in_outbox
|
||||||
|
from core.meta import by_object_id
|
||||||
|
from core.meta import by_type
|
||||||
from core.shared import MY_PERSON
|
from core.shared import MY_PERSON
|
||||||
from core.shared import back
|
from core.shared import back
|
||||||
from core.tasks import Tasks
|
from core.tasks import Tasks
|
||||||
|
@ -48,7 +54,8 @@ def _delete_process_inbox(delete: ap.Delete, new_meta: _NewMeta) -> None:
|
||||||
_logger.exception(f"failed to handle delete replies for {obj_id}")
|
_logger.exception(f"failed to handle delete replies for {obj_id}")
|
||||||
|
|
||||||
DB.activities.update_one(
|
DB.activities.update_one(
|
||||||
{"meta.object_id": obj_id, "type": "Create"}, {"$set": {"meta.deleted": True}}
|
{**by_object_id(obj_id), **by_type(ap.ActivityType.CREATE)},
|
||||||
|
{"$set": {"meta.deleted": True}},
|
||||||
)
|
)
|
||||||
|
|
||||||
# Foce undo other related activities
|
# Foce undo other related activities
|
||||||
|
@ -80,7 +87,7 @@ def _update_process_inbox(update: ap.Update, new_meta: _NewMeta) -> None:
|
||||||
)
|
)
|
||||||
# Also update the cached copies of the question (like Announce and Like)
|
# Also update the cached copies of the question (like Announce and Like)
|
||||||
DB.activities.update_many(
|
DB.activities.update_many(
|
||||||
{"meta.object.id": obj.id}, {"$set": {"meta.object": obj.to_dict()}}
|
by_object_id(obj.id), {"$set": {"meta.object": obj.to_dict()}}
|
||||||
)
|
)
|
||||||
|
|
||||||
# FIXME(tsileo): handle update actor amd inbox_update_note/inbox_update_actor
|
# FIXME(tsileo): handle update actor amd inbox_update_note/inbox_update_actor
|
||||||
|
@ -115,7 +122,7 @@ def _announce_process_inbox(announce: ap.Announce, new_meta: _NewMeta) -> None:
|
||||||
Tasks.fetch_remote_question(obj)
|
Tasks.fetch_remote_question(obj)
|
||||||
|
|
||||||
DB.activities.update_one(
|
DB.activities.update_one(
|
||||||
{"remote_id": announce.id},
|
by_remote_id(announce.id),
|
||||||
{
|
{
|
||||||
"$set": {
|
"$set": {
|
||||||
"meta.object": obj.to_dict(embed=True),
|
"meta.object": obj.to_dict(embed=True),
|
||||||
|
@ -124,7 +131,8 @@ def _announce_process_inbox(announce: ap.Announce, new_meta: _NewMeta) -> None:
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
DB.activities.update_one(
|
DB.activities.update_one(
|
||||||
{"activity.object.id": obj.id}, {"$inc": {"meta.count_boost": 1}}
|
{**by_type(ap.ActivityType.CREATE), **by_object_id(obj.id)},
|
||||||
|
inc(MetaKey.COUNT_BOOST, 1),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -134,8 +142,7 @@ def _like_process_inbox(like: ap.Like, new_meta: _NewMeta) -> None:
|
||||||
obj = like.get_object()
|
obj = like.get_object()
|
||||||
# Update the meta counter if the object is published by the server
|
# Update the meta counter if the object is published by the server
|
||||||
DB.activities.update_one(
|
DB.activities.update_one(
|
||||||
{"box": Box.OUTBOX.value, "activity.object.id": obj.id},
|
{**in_outbox(), **by_object_id(obj.id)}, inc(MetaKey.COUNT_LIKE, 1)
|
||||||
{"$inc": {"meta.count_like": 1}},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -167,15 +174,16 @@ def _undo_process_inbox(activity: ap.Undo, new_meta: _NewMeta) -> None:
|
||||||
# Update the meta counter if the object is published by the server
|
# Update the meta counter if the object is published by the server
|
||||||
DB.activities.update_one(
|
DB.activities.update_one(
|
||||||
{
|
{
|
||||||
"box": Box.OUTBOX.value,
|
**in_outbox(),
|
||||||
"meta.object_id": obj.get_object_id(),
|
**by_object_id(obj.get_object_id()),
|
||||||
"type": ap.ActivityType.CREATE.value,
|
**by_type(ap.ActivityType.CREATE),
|
||||||
},
|
},
|
||||||
{"$inc": {"meta.count_like": -1}},
|
inc(MetaKey.COUNT_LIKE, -1),
|
||||||
)
|
)
|
||||||
elif obj.has_type(ap.ActivityType.ANNOUNCE):
|
elif obj.has_type(ap.ActivityType.ANNOUNCE):
|
||||||
announced = obj.get_object()
|
announced = obj.get_object()
|
||||||
# Update the meta counter if the object is published by the server
|
# Update the meta counter if the object is published by the server
|
||||||
DB.activities.update_one(
|
DB.activities.update_one(
|
||||||
{"activity.object.id": announced.id}, {"$inc": {"meta.count_boost": -1}}
|
{**by_type(ap.ActivityType.CREATE), **by_object_id(announced.id)},
|
||||||
|
inc(MetaKey.COUNT_BOOST, -1),
|
||||||
)
|
)
|
||||||
|
|
12
core/meta.py
12
core/meta.py
|
@ -27,9 +27,13 @@ class MetaKey(Enum):
|
||||||
PUBLISHED = "published"
|
PUBLISHED = "published"
|
||||||
GC_KEEP = "gc_keep"
|
GC_KEEP = "gc_keep"
|
||||||
OBJECT = "object"
|
OBJECT = "object"
|
||||||
|
OBJECT_ID = "object_id"
|
||||||
OBJECT_ACTOR = "object_actor"
|
OBJECT_ACTOR = "object_actor"
|
||||||
PUBLIC = "public"
|
PUBLIC = "public"
|
||||||
|
|
||||||
|
COUNT_LIKE = "count_like"
|
||||||
|
COUNT_BOOST = "count_boost"
|
||||||
|
|
||||||
|
|
||||||
def _meta(mk: MetaKey) -> str:
|
def _meta(mk: MetaKey) -> str:
|
||||||
return f"meta.{mk.value}"
|
return f"meta.{mk.value}"
|
||||||
|
@ -59,5 +63,13 @@ def by_actor(actor: ap.BaseActivity) -> _SubQuery:
|
||||||
return {_meta(MetaKey.ACTOR_ID): actor.id}
|
return {_meta(MetaKey.ACTOR_ID): actor.id}
|
||||||
|
|
||||||
|
|
||||||
|
def by_object_id(object_id: str) -> _SubQuery:
|
||||||
|
return {_meta(MetaKey.OBJECT_ID): object_id}
|
||||||
|
|
||||||
|
|
||||||
def is_public() -> _SubQuery:
|
def is_public() -> _SubQuery:
|
||||||
return {_meta(MetaKey.PUBLIC): True}
|
return {_meta(MetaKey.PUBLIC): True}
|
||||||
|
|
||||||
|
|
||||||
|
def inc(mk: MetaKey, val: int) -> _SubQuery:
|
||||||
|
return {"$inc": {_meta(mk): val}}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue