Beispiel #1
0
def action_handler(verb, **kwargs):
    """
    Handler function to create Action instance upon action signal call.
    """
    from actstream.models import Action

    kwargs.pop('signal', None)
    actor = kwargs.pop('sender')
    check_actionable_model(actor)
    newaction = Action(
        actor_content_type=ContentType.objects.get_for_model(actor),
        actor_object_id=actor.pk,
        verb=unicode(verb),
        public=bool(kwargs.pop('public', True)),
        description=kwargs.pop('description', None),
        timestamp=kwargs.pop('timestamp', now()))

    for opt in ('target', 'action_object'):
        obj = kwargs.pop(opt, None)
        if not obj is None:
            check_actionable_model(obj)
            setattr(newaction, '%s_object_id' % opt, obj.pk)
            setattr(newaction, '%s_content_type' % opt,
                    ContentType.objects.get_for_model(obj))
    if len(kwargs):
        newaction.data = kwargs
    newaction.save()
def action_handler(verb, **kwargs):
    """
    Handler function to create Action instance upon action signal call.
    """
    from actstream.models import Action

    kwargs.pop('signal', None)
    actor = kwargs.pop('sender')
    check_actionable_model(actor)

    # We must store the unstranslated string
    # If verb is an ugettext_lazyed string, fetch the original string
    if hasattr(verb, '_proxy____args'):
        verb = verb._proxy____args[0]

    newaction = Action(
        actor_content_type=ContentType.objects.get_for_model(actor),
        actor_object_id=actor.pk,
        verb=unicode(verb),
        public=bool(kwargs.pop('public', True)),
        description=kwargs.pop('description', None),
        timestamp=kwargs.pop('timestamp', now())
    )

    for opt in ('target', 'action_object'):
        obj = kwargs.pop(opt, None)
        if not obj is None:
            check_actionable_model(obj)
            setattr(newaction, '%s_object_id' % opt, obj.pk)
            setattr(newaction, '%s_content_type' % opt,
                    ContentType.objects.get_for_model(obj))
    if settings.USE_JSONFIELD and len(kwargs):
        newaction.data = kwargs
    newaction.save()
    return newaction
def action_handler(verb, **kwargs):
    """
    Handler function to create Action instance upon action signal call.
    """
    from actstream.models import Action

    kwargs.pop('signal', None)
    actor = kwargs.pop('sender')
    check_actionable_model(actor)
    newaction = Action(
        actor_content_type=ContentType.objects.get_for_model(actor),
        actor_object_id=actor.pk,
        verb=unicode(verb),
        public=bool(kwargs.pop('public', True)),
        description=kwargs.pop('description', None),
        timestamp=kwargs.pop('timestamp', now()),
        data=kwargs.pop('data', None),
    )

    for opt in ('target', 'action_object'):
        obj = kwargs.pop(opt, None)
        if not obj is None:
            check_actionable_model(obj)
            setattr(newaction, '%s_object_id' % opt, obj.pk)
            setattr(newaction, '%s_content_type' % opt,
                    ContentType.objects.get_for_model(obj))

    newaction.save()
Beispiel #4
0
def action_handler(verb, **kwargs):
    """
    Handler function to create Action instance upon action signal call.
    """
    from actstream.models import Action

    kwargs.pop('signal', None)
    actor = kwargs.pop('sender')
    check_actionable_model(actor)

    # We must store the unstranslated string
    # If verb is an ugettext_lazyed string, fetch the original string
    if hasattr(verb, '_proxy____args'):
        verb = verb._proxy____args[0]

    newaction = Action(
        actor_content_type=ContentType.objects.get_for_model(actor),
        actor_object_id=actor.pk,
        verb=unicode(verb),
        public=bool(kwargs.pop('public', True)),
        description=kwargs.pop('description', None),
        timestamp=kwargs.pop('timestamp', now())
    )

    for opt in ('target', 'action_object'):
        obj = kwargs.pop(opt, None)
        if not obj is None:
            check_actionable_model(obj)
            setattr(newaction, '%s_object_id' % opt, obj.pk)
            setattr(newaction, '%s_content_type' % opt,
                    ContentType.objects.get_for_model(obj))
    if settings.USE_JSONFIELD and len(kwargs):
        newaction.data = kwargs
    newaction.save()
Beispiel #5
0
def action_create(actor,
                  verb,
                  action_object,
                  target,
                  description=None,
                  public=True):
    """
    Handler function to create Action instance upon action signal call.
    """
    # Prevent AnonymousUser from not passing the checks
    if actor.is_anonymous():
        actor = User.objects.get(id=settings.ANONYMOUS_USER_ID)

    check_actionable_model(actor)
    check_actionable_model(action_object)
    check_actionable_model(target)

    newaction = Action(
        actor_content_type=ContentType.objects.get_for_model(actor),
        actor_object_id=actor.pk,
        verb=unicode(verb),
        target_object_id=target.id,
        target_content_type=ContentType.objects.get_for_model(target),
        action_object_object_id=action_object.id,
        action_object_content_type=ContentType.objects.get_for_model(
            action_object),
        public=bool(public),
        description=description,
        timestamp=datetime.datetime.now(),
    )

    newaction.save()

    return newaction
def action_create(actor, verb, action_object, target, description=None, public=True):
    """
    Handler function to create Action instance upon action signal call.
    """
    # Prevent AnonymousUser from not passing the checks
    if actor.is_anonymous():
        actor = User.objects.get(id=settings.ANONYMOUS_USER_ID)
    
    check_actionable_model(actor)
    check_actionable_model(action_object)
    check_actionable_model(target)
    
    newaction = Action(
        actor_content_type=ContentType.objects.get_for_model(actor),
        actor_object_id=actor.pk,
        verb=unicode(verb),
        target_object_id=target.id,
        target_content_type=ContentType.objects.get_for_model(target),
        action_object_object_id=action_object.id,
        action_object_content_type=ContentType.objects.get_for_model(action_object), 

        public=bool(public),
        description=description,
        timestamp=datetime.datetime.now(),
    )

    newaction.save()

    return newaction
def action_handler(verb, **kwargs):
    """
    Handler function to create Action instance upon action signal call.
    """
    from actstream.models import Action

    kwargs.pop("signal", None)
    actor = kwargs.pop("sender")
    if actor is None:
        ctype, oid = None, None
    else:
        check_actionable_model(actor)
        ctype = ContentType.objects.get_for_model(actor)
        oid = actor.pk
    newaction = Action(
        actor_content_type=ctype,
        actor_object_id=oid,
        verb=unicode(verb),
        public=bool(kwargs.pop("public", True)),
        description=kwargs.pop("description", None),
        timestamp=kwargs.pop("timestamp", datetime.now()),
    )

    for opt in ("target", "action_object"):
        obj = kwargs.pop(opt, None)
        if not obj is None:
            check_actionable_model(obj)
            setattr(newaction, "%s_object_id" % opt, obj.pk)
            setattr(newaction, "%s_content_type" % opt, ContentType.objects.get_for_model(obj))

    newaction.save()
Beispiel #8
0
def place_action_handler(verb, **kwargs):
    """
    Handler function to create Action instance upon action signal call.
    """
    kwargs.pop('signal', None)

    actor = kwargs.pop('sender', None)
    if not actor:
        actor = User.objects.get(pk=settings.ACTIVITY_STREAM_DEFAULT_ACTOR_PK)
    check_actionable_model(actor)

    newaction = Action(
        actor_content_type=ContentType.objects.get_for_model(actor),
        actor_object_id=actor.pk,
        verb=unicode(verb),
        place=kwargs.pop('place',
                         None),  # TODO get automatically from target obj?
        public=bool(kwargs.pop('public', True)),
        description=kwargs.pop('description', None),
        timestamp=kwargs.pop('timestamp', now()))

    for opt in ('target', 'action_object'):
        obj = kwargs.pop(opt, None)
        if not obj is None:
            check_actionable_model(obj)
            setattr(newaction, '%s_object_id' % opt, obj.pk)
            setattr(newaction, '%s_content_type' % opt,
                    ContentType.objects.get_for_model(obj))

    if actstream_settings.USE_JSONFIELD and len(kwargs):
        newaction.data = kwargs
    newaction.save()
Beispiel #9
0
def place_action_handler(verb, **kwargs):
    """
    Handler function to create Action instance upon action signal call.
    """
    kwargs.pop("signal", None)

    actor = kwargs.pop("sender", None)
    if not actor:
        actor = User.objects.get(pk=settings.ACTIVITY_STREAM_DEFAULT_ACTOR_PK)
    check_actionable_model(actor)

    newaction = Action(
        actor_content_type=ContentType.objects.get_for_model(actor),
        actor_object_id=actor.pk,
        verb=unicode(verb),
        place=kwargs.pop("place", None),  # TODO get automatically from target obj?
        public=bool(kwargs.pop("public", True)),
        description=kwargs.pop("description", None),
        timestamp=kwargs.pop("timestamp", now()),
    )

    for opt in ("target", "action_object"):
        obj = kwargs.pop(opt, None)
        if not obj is None:
            check_actionable_model(obj)
            setattr(newaction, "%s_object_id" % opt, obj.pk)
            setattr(newaction, "%s_content_type" % opt, ContentType.objects.get_for_model(obj))

    if actstream_settings.USE_JSONFIELD and len(kwargs):
        newaction.data = kwargs
    newaction.save()
Beispiel #10
0
 def setUp(self):
     self.user = self.create_user(data={'password': '******'})
     self.user1 = self.create_user(data={'password': '******'})
     self.user.actor_actions.add(Action())
     self.user.actor_actions.add(Action())
     self.user1.actor_actions.add(Action())
     self.url = reverse(self.url_name)
Beispiel #11
0
 def combine(self, stash):
     first = stash[0]
     if len(stash) == 1:
         return first
     else:
         action = Action(actor=first.actor, verb='added %d tasks to' % len(stash), action_object=self.object)
         action.timestamp = first.timestamp
         return action
Beispiel #12
0
 def test_sorted_active_users(self):
     user2 = self.create_user(data={'password': '******'})
     user2.actor_actions.add(Action())
     user2.actor_actions.add(Action())
     user2.actor_actions.add(Action())
     expected_active_users = [user2, self.user, self.user1]
     response = self.client.get(self.url)
     self.assertEqual(expected_active_users,
                      response.context['active_users'])
Beispiel #13
0
def add_action(actor, verb, action_object, description, target):
    """
    API to add Action to database:
    actor: Performer of Action
    verb: Action Performed
    action_object: object related to Action if any
    description: details on the action
    target: Who or what the action was done for or on.
    """

    new_action = Action(actor=actor,
                        verb=verb,
                        action_object=action_object,
                        description=description,
                        target=target)
    new_action.save()

    if isinstance(action_object, Task):
        items = TaggedItem.objects.filter(object_id=action_object.id)
        for item in items:
            follows = Follow.objects.filter(followed_skill=item.tag)
            for follow in follows:
                if follow.follower.username != actor.username:
                    if isinstance(target, UserProfile):
                        if follow.follower.username != target.username:
                            p['stream_' +
                              str(follow.follower.username)].trigger(
                                  'liveStream', {})
                    else:
                        p['stream_' + str(follow.follower.username)].trigger(
                            'liveStream', {})

    followers = Follow.objects.filter(followed__id=actor.id)
    for item in followers:
        if item.follower.username != actor.username:
            if isinstance(target, UserProfile):
                if item.follower.username != target.username:
                    p['stream_' + str(item.follower.username)].trigger(
                        'liveStream', {})
            else:
                p['stream_' + str(item.follower.username)].trigger(
                    'liveStream', {})

    p['stream_' + str(actor.username)].trigger('liveStream', {})
    if isinstance(target, UserProfile) and target.username != actor.username:
        p['stream_' + str(target.username)].trigger('liveStream', {})

    if verb == "task_post" or verb == "task_assigned":
        p['discover'].trigger('discover_shoghlanah', {})

    return new_action
Beispiel #14
0
 def test_messaging_backends_handler(self, call_backend_mock):
     """
     Test messaging backends handler function.
     """
     messaging_backends_handler(Action, instance=Action(id=9), created=True)
     self.assertTrue(call_backend_mock.called)
     call_backend_mock.assert_called_with(
         'onadata.apps.messaging.backends.base.BaseBackend', 9, None)
def action_handler(sender, verb, **kwargs):
    from actstream.models import Action

    target = kwargs.get('target', None)
    public = kwargs.get('public', True)
    description = kwargs.get('description', None)
    timestamp = kwargs.get('timestamp', datetime.now())
    action = Action(actor_content_type=ContentType.objects.get_for_model(sender),
                    actor_object_id=sender.pk,
                    verb=unicode(verb),
                    public=public,
                    timestamp = timestamp,
                    description = description)
    if target:
        action.target_object_id = target.pk
        action.target_content_type = ContentType.objects.get_for_model(target)

    action.save()
def add_action(actor, verb, action_object, description, target):
    """
    API to add Action to database:
    actor: Performer of Action
    verb: Action Performed
    action_object: object related to Action if any
    description: details on the action
    target: Who or what the action was done for or on.
    """

    new_action = Action(actor=actor, verb=verb, action_object=action_object, description=description, target=target)
    new_action.save()  
    
    if isinstance(action_object, Task):
        items = TaggedItem.objects.filter(object_id=action_object.id)
        for item in items:
            follows = Follow.objects.filter(followed_skill=item.tag)
            for follow in follows:
                if follow.follower.username != actor.username:
                    if isinstance(target, UserProfile):
                        if follow.follower.username != target.username:
                            p['stream_' + str(follow.follower.username)].trigger('liveStream', {})
                    else:
                        p['stream_' + str(follow.follower.username)].trigger('liveStream', {})

    followers = Follow.objects.filter(followed__id=actor.id)
    for item  in followers:
        if item.follower.username != actor.username:
            if isinstance(target, UserProfile):
                if item.follower.username != target.username:
                    p['stream_' + str(item.follower.username)].trigger('liveStream', {})
            else:            
                p['stream_' + str(item.follower.username)].trigger('liveStream', {})

    p['stream_' + str(actor.username)].trigger('liveStream', {})
    if isinstance(target, UserProfile) and target.username != actor.username:
        p['stream_' + str(target.username)].trigger('liveStream', {})
        

    if verb == "task_post" or verb == "task_assigned":
        p['discover'].trigger('discover_shoghlanah', {})

    return new_action
Beispiel #17
0
def action(actor, verb, action_object=None, target=None, public=True):
    '''using the signal api doesn't give us a ref to the new action...'''
    # this'll cause some circular dep problems...
    from actstream.models import Action
    newaction = Action(
        actor_content_type=ContentType.objects.get_for_model(actor),
        actor_object_id=actor.pk,
        verb=unicode(verb),
        public=public,
        timestamp=datetime.datetime.now())
    if action_object:
        newaction.action_object = action_object
        newaction.action_object_content_type = ContentType.objects.get_for_model(action_object)
    if target:
        newaction.target = target
        newaction.target_content_type = ContentType.objects.get_for_model(target)
    newaction.save()
    return newaction
Beispiel #18
0
def action(actor, verb, action_object=None, target=None, public=True):
    '''using the signal api doesn't give us a ref to the new action...'''
    # this'll cause some circular dep problems...
    from actstream.models import Action
    newaction = Action(
        actor_content_type=ContentType.objects.get_for_model(actor),
        actor_object_id=actor.pk,
        verb=unicode(verb),
        public=public,
        timestamp=datetime.datetime.now())
    if action_object:
        newaction.action_object = action_object
        newaction.action_object_content_type = ContentType.objects.get_for_model(action_object)
    if target:
        newaction.target = target
        newaction.target_content_type = ContentType.objects.get_for_model(target)
    newaction.save()
    return newaction
Beispiel #19
0
def resource_permissions(request, resource_id):
    try:
        resource = resolve_object(
            request, ResourceBase, {
                'id': resource_id}, 'base.change_resourcebase_permissions')
        resource_content_type = ContentType.objects.get_for_model(resource).id

    except PermissionDenied:
        # we are handling this in a non-standard way
        return HttpResponse(
            'You are not allowed to change permissions for this resource',
            status=401,
            mimetype='text/plain')

    if request.method == 'POST':
        permission_spec = json.loads(request.body)
        old_permission_spec = resource.get_all_level_info()

        for user in permission_spec['users']:
            user = get_user_model().objects.get(username=user)
            if user not in old_permission_spec['users']:
                action = Action(
                    actor=request.user, 
                    action_object_id=resource.id,
                    action_object_content_type_type=resource_content_type,
                    target=user,
                    verb='permission_granted')
                action.save()
            else:
                old_permission_spec['users'].pop(user)

        resource.set_permissions(permission_spec)

        for user in old_permission_spec['users']:
            action = Action(
                actor=request.user, 
                action_object_id=resource.id,
                action_object_content_type=resource_content_type,
                target=user,
                verb='permission_revoked')
            action.save()


        return HttpResponse(
            json.dumps({'success': True}),
            status=200,
            mimetype='text/plain'
        )

    elif request.method == 'GET':
        permission_spec = _perms_info_json(resource)
        return HttpResponse(
            json.dumps({'success': True, 'permissions': permission_spec}),
            status=200,
            mimetype='text/plain'
        )
    else:
        return HttpResponse(
            'No methods other than get and post are allowed',
            status=401,
            mimetype='text/plain')