kawaz.core.personas.activities.persona のソースコード

from django_comments.models import Comment
from activities.mediator import ActivityMediator
from ..models.persona import Persona


[ドキュメント]class PersonaActivityMediatorBase(ActivityMediator):
[ドキュメント] def serialize_snapshot(self, snapshot): serialized_snapshot = super().serialize_snapshot(snapshot) if isinstance(snapshot, Persona): # スナップショット対象がペルソナの場合対応するプロフィール状態 # もスナップショットとして保持しておく profile = getattr(snapshot, '_profile', None) profile = super().serialize_snapshot(profile) if profile else None serialized_snapshot['extra_fields'] = { '_profile': profile, } return serialized_snapshot
[ドキュメント]class PersonaActivityMediator(PersonaActivityMediatorBase): """ Note: Personaは3つのMediatorからさまざまなイベントが発行される activated: Profileの作成(ユーザーのアクティベート時にプロフィールが 作成されるため、プロフィールが生成されたときをアクティベート されたと判定している) profile_updated: プロフィールの更新 comment_added: コメントの追加 account_added: アカウントの追加 updatedイベントは初回更新時の前回との差分がないとき、`last_login`カラム が更新されるだけでも通知されてしまう問題があり対処が面倒なので、ユーザ の更新は一切通知されない仕様にする """
[ドキュメント] def alter(self, instance, activity, **kwargs): if activity.status in ('created', 'updated', 'deleted'): # 作成、更新、削除イベントは通知しない return None return activity
[ドキュメント] def prepare_context(self, activity, context, typename=None): context = super().prepare_context(activity, context, typename) if activity.status in ('updated', 'profile_updated'): # remarks に保存された変更状態を利便のためフラグ化 # また、プロフィールの更新についてもcontextを発行している for flag in activity.remarks.split(): context[flag] = True if activity.status == 'profile_updated': context['profile'] = activity.snapshot._profile elif activity.status == 'account_added': # アカウントが付いたとき、remarksにaccountのpkが入ってるはずなので # 取得してcontextに渡す # ついでにserviceも渡している try: from ..models import Account account = Account.objects.get(pk=int(activity.remarks)) context['account'] = account context['service'] = account.service except: pass elif activity.status == 'comment_added': # コメントが付いたとき、remarksにcommentのpkが入ってるはずなので # 取得してcontextに渡す try: comment = Comment.objects.get(pk=int(activity.remarks)) context['comment'] = comment except: pass return context