示例#1
0
def update_cached_actor(actor: ap.BaseActivity) -> None:
    actor_hash = _actor_hash(actor)
    update_many_activities(
        {
            **flag(MetaKey.ACTOR_ID, actor.id),
            **flag(MetaKey.ACTOR_HASH, {"$ne": actor_hash}),
        },
        upsert({
            MetaKey.ACTOR: actor.to_dict(embed=True),
            MetaKey.ACTOR_HASH: actor_hash
        }),
    )
    update_many_activities(
        {
            **flag(MetaKey.OBJECT_ACTOR_ID, actor.id),
            **flag(MetaKey.OBJECT_ACTOR_HASH, {"$ne": actor_hash}),
        },
        upsert({
            MetaKey.OBJECT_ACTOR: actor.to_dict(embed=True),
            MetaKey.OBJECT_ACTOR_HASH: actor_hash,
        }),
    )
    # TODO(tsileo): Also update following (it's in the object)
    # DB.activities.update_many(
    #     {"meta.object_id": actor.id}, {"$set": {"meta.object": actor.to_dict(embed=True)}}
    # )
    _cache_actor_icon(actor)
示例#2
0
def _delete_process_outbox(delete: ap.Delete, new_meta: _NewMeta) -> None:
    _logger.info(f"process_outbox activity={delete!r}")
    obj_id = delete.get_object_id()

    # Flag everything referencing the deleted object as deleted (except the Delete activity itself)
    update_many_activities(
        {
            **by_object_id(obj_id), "remote_id": {
                "$ne": delete.id
            }
        },
        upsert({
            MetaKey.DELETED: True,
            MetaKey.UNDO: True
        }),
    )

    # If the deleted activity was in DB, decrease some threads-related counter
    data = find_one_activity({
        **by_object_id(obj_id),
        **by_type(ap.ActivityType.CREATE)
    })
    _logger.info(f"found local copy of deleted activity: {data}")
    if data:
        obj = ap.parse_activity(data["activity"]).get_object()
        _logger.info(f"obj={obj!r}")
        in_reply_to = obj.get_in_reply_to()
        if in_reply_to:
            update_one_activity(
                {
                    **by_type(ap.ActivityType.CREATE),
                    **by_object_id(in_reply_to)
                },
                {
                    "$inc": {
                        "meta.count_reply": -1,
                        "meta.count_direct_reply": -1
                    }
                },
            )