def get(self, request, user_id, **kwargs): # # Hack to force json return. # request.META['HTTP_ACCEPT'] = 'application/json' try: userobj = User.objects.get(id=user_id) except User.DoesNotExist: return None, 404 devilry_qualifiesforexam_enabled = 'devilry_qualifiesforexam' in settings.INSTALLED_APPS adminuserobj = self.request.user candidates = Candidate.objects.filter(student=userobj) if not adminuserobj.is_superuser: nodepks_where_is_admin = Node._get_nodepks_where_isadmin(adminuserobj) candidates = candidates.filter( Q(assignment_group__parentnode__admins=adminuserobj) | \ Q(assignment_group__parentnode__parentnode__admins=adminuserobj) | \ Q(assignment_group__parentnode__parentnode__parentnode__admins=adminuserobj) | \ Q(assignment_group__parentnode__parentnode__parentnode__parentnode__pk__in=nodepks_where_is_admin)) candidates = candidates.order_by( 'assignment_group__parentnode__parentnode__parentnode__short_name', '-assignment_group__parentnode__parentnode__start_time', 'assignment_group__parentnode__publishing_time', 'assignment_group__parentnode__short_name', ) return { 'user': serialize_user(userobj), 'grouped_by_hierarky': self._group_candidates_by_hierarky(candidates, userobj, devilry_qualifiesforexam_enabled), }
def path(self, instance): PATH_MAX_LENGTH = 8 path = [] counter = 1 candidate = instance candidates = Node.where_is_admin_or_superadmin(self.view.request.user) while candidate in candidates and counter < PATH_MAX_LENGTH: path.append(candidate) candidate = candidate.parentnode counter += 1 path.reverse() serializer = PathElementResource() return serializer.serialize_iter(path)
class Command(RecordSaveModCommand): args = '<node path> <short_name>' help = "Create new node. To create a root node (with no parent), use 'None' as <node path>." option_list = BaseCommand.option_list + ( make_option('--admins', dest='admins', default=None, help='Administrator usernames separated by comma (,).'), make_option('--long-name', dest='long_name', default=None, help='Long name (Required)')) def handle(self, *args, **options): if len(args) != 2: raise CommandError( 'Node path and short name is required. See --help.') if options['long_name'] == None: raise CommandError('Long name is required. See --help.') verbosity = int(options.get('verbosity', '1')) node_path = args[0] short_name = args[1] if node_path == "None": node = None else: try: node = get_by_path(node_path) except Node.DoesNotExist, e: raise CommandError('Invalid node path.') if Node.objects.filter(short_name=short_name).count() == 0: long_name = options['long_name'] record = Node(short_name=short_name, long_name=long_name, parentnode=node) self.save_record(record, verbosity) else: raise CommandError('Node "{0}" already exists.'.format(short_name))
def get_queryset( self ): nodes = Node.where_is_admin_or_superadmin( self.request.user ).filter( parentnode__pk=self.kwargs['parentnode__pk'] ) return nodes
def get_queryset( self ): nodes = Node.where_is_admin_or_superadmin( self.request.user ) nodes = nodes.exclude( parentnode__in=nodes ) return nodes