Example #1
0
def add(actor, type_desc, **kwargs):
    type, subtype = type_desc
    action = Action(actor=actor, type=type, subtype=subtype, **kwargs)

    # can this be DRY-ed somehow?
    # ----- global -----
    if action.action_object:
        if hasattr(action.action_object, "name"):
            action.action_object_cache = action.action_object.name
        elif hasattr(action.action_object, "username"):
            action.action_object_cache = action.action_object.username
        elif hasattr(action.action_object, "value"):    # rating
            action.action_object_cache = str(action.action_object.value)

    if action.target:
        if hasattr(action.target, "name"):
            action.target_cache = action.target.name
        elif hasattr(action.target, "username"):
            action.target_cache = action.target.username
        elif action.target._meta.app_label == 'solution' and action.target._meta.module_name == 'solution':
            data = [
                action.target.author_id,
                action.target.author.username,
                action.target.task_id,
                action.target.task.name,
                action.target.task.author_id,
            ]
            # 250 chars should be enough for this
            action.target_cache = POST_SEND_CACHE_SEPARATOR.join([xss.escape(unicode(x)) for x in data])

    # ----- type specific -----
    if type == POST_SEND:
        T = action.action_object.content.text
        action.action_object_cache = T[:78] + '...' if len(T) > 80 else T

    action.save()