예제 #1
0
    def wrapper(cls):
        arg_decs = []
        if cls.select_for_update is not None:  # pragma: no branch
            arg_decs = [arg.contexts(transaction.atomic)]

        arg_decs += [
            arg.defaults(
                **{
                    cls.objects_arg:
                    arg.first(
                        'objects',
                        daf.contrib.single_list('object'),
                        cls.objects_arg,
                    )
                }),
            arg.defaults(
                **{
                    cls.objects_arg:
                    djarg.qset(
                        cls.objects_arg,
                        qset=cls.queryset,
                        select_for_update=cls.select_for_update,
                    )
                }),
            super().wrapper,
        ]

        return arg.s(*arg_decs)
예제 #2
0
def test_qset(qset_kwargs, expected_error):
    """Tests the djarg.qset utility for coercing querysets"""

    with expected_error:

        @arg.defaults(
            users=djarg.qset('users', **qset_kwargs).prefetch_related('groups')
        )
        def get_user_groups(users):
            return {group for user in users for group in user.groups.all()}

        users = ddf.G(auth_models.User, n=3)
        groups = ddf.G(auth_models.Group, n=3)

        users[0].groups.add(groups[0], groups[1])
        users[1].groups.add(groups[1], groups[2])
        users[2].groups.add(groups[2])

        assert get_user_groups(None) == set()
        assert get_user_groups([]) == set()
        assert get_user_groups([users[0].id]) == {groups[0], groups[1]}
        assert get_user_groups([users[0].id, users[1].id]) == set(groups)
        assert get_user_groups([users[0], users[1]]) == set(groups)
        assert get_user_groups(users[0]) == {groups[0], groups[1]}
        assert get_user_groups(
            auth_models.User.objects.filter(id=users[0].id)
        ) == {groups[0], groups[1]}
 def wrapper(cls):
     return arg.s(
         arg.contexts(trapped_errors=daf.contrib.raise_trapped_errors),
         arg.defaults(
             objects=arg.first(
                 'objects',
                 daf.contrib.single_list('object'),
                 daf.contrib.single_list(cls.object_arg),
             )
         ),
         arg.defaults(objects=djarg.qset('objects', qset=cls.queryset)),
         arg.parametrize(**{cls.object_arg: arg.val('objects')}),
         arg.contexts(daf.contrib.trap_errors),
         super().wrapper,
     )
 def wrapper(cls):
     return arg.s(
         arg.defaults(
             **{
                 cls.objects_arg: arg.first(
                     'objects',
                     daf.contrib.single_list('object'),
                     cls.objects_arg,
                 )
             }
         ),
         arg.defaults(
             **{
                 cls.objects_arg: djarg.qset(
                     cls.objects_arg, qset=cls.queryset
                 )
             }
         ),
         super().wrapper,
     )
예제 #5
0
    def wrapper(cls):
        arg_decs = []
        if cls.select_for_update is not None:  # pragma: no branch
            arg_decs = [arg.contexts(transaction.atomic)]

        arg_decs += [
            arg.contexts(trapped_errors=daf.contrib.raise_trapped_errors),
            arg.defaults(objects=arg.first(
                'objects',
                daf.contrib.single_list('object'),
                daf.contrib.single_list(cls.object_arg),
            )),
            arg.defaults(objects=djarg.qset(
                'objects',
                qset=cls.queryset,
                select_for_update=cls.select_for_update,
            )),
            arg.parametrize(**{cls.object_arg: arg.val('objects')}),
            arg.contexts(daf.contrib.trap_errors),
            super().wrapper,
        ]

        return arg.s(*arg_decs)
예제 #6
0
"""A basic action for granting staff access to a user. For integration tests"""
import arg
from django import forms
import django.contrib.auth.models as auth_models
import djarg
import djarg.views

from daf import actions
from daf import views


@arg.defaults(
    users=djarg.qset('objects', model=auth_models.User),
    actor=arg.first('actor', arg.val('request').user),
)
@arg.parametrize(user=arg.val('users'))
def bulk_grant_staff_access(actor, user, is_staff):
    """
    Grant staff access to a user via an actor.
    """
    user.is_staff = is_staff
    user.save()
    return user


class BulkGrantStaffAccess(actions.ModelAction):
    """Grants staff access to a user"""

    app_label = 'tests'
    name = 'bulk_grant_staff_access'
    callable = bulk_grant_staff_access