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),
     }
Exemple #2
0
    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))
Exemple #4
0
 def get_queryset( self ):
     nodes = Node.where_is_admin_or_superadmin( self.request.user ).filter(
         parentnode__pk=self.kwargs['parentnode__pk']
     )
     return nodes
Exemple #5
0
 def get_queryset( self ):
     nodes = Node.where_is_admin_or_superadmin( self.request.user )
     nodes = nodes.exclude( parentnode__in=nodes )
     return nodes