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)
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, )
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)
"""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