from tasks.models import TaskActivity from tasks.notifications import notify_task_activity_change def create_task_activity( task, actor, action, *, object_kind="", object_id=None, metadata=None, ): """Record a task activity and publish its notification side effect.""" authenticated_actor = ( actor if actor and getattr(actor, "is_authenticated", False) else None ) if authenticated_actor: task.participants.add(authenticated_actor) activity_metadata = metadata or {} activity = TaskActivity.objects.create( task=task, actor=authenticated_actor, action=action, object_kind=object_kind or "", object_id=object_id, metadata=activity_metadata, ) notify_task_activity_change( task, actor, action, object_kind=object_kind or "", metadata=activity_metadata, ) return activity