Пример #1
0
    def get(self, request, project_uuid, format=None):
        try:
            project = Project.objects.get(uuid=project_uuid)
        except Project.DoesNotExist:
            raise ValidationError(_('Project does not exist.'))

        is_administrator(request, self, project)

        checklists = []
        for checklist in models.Checklist.objects.all():
            users = project.get_users()
            qs = models.Answer.objects.filter(user__in=users,
                                              question__checklist=checklist)
            total = checklist.questions.count() * users.count()
            positive_count = qs.filter(
                value=F('question__correct_answer')).count()
            negative_count = (qs.exclude(value__isnull=True).exclude(
                value=F('question__correct_answer')).count())
            unknown_count = total - positive_count - negative_count
            checklists.append(
                dict(
                    name=checklist.name,
                    uuid=checklist.uuid,
                    positive_count=positive_count,
                    negative_count=negative_count,
                    unknown_count=unknown_count,
                    score=get_score(positive_count, total) if total > 0 else
                    100,  # consider empty lists as fully compliant
                ))
        return Response(checklists)
Пример #2
0
    def get(self, request, project_uuid, format=None):
        try:
            project = Project.objects.get(uuid=project_uuid)
        except Project.DoesNotExist:
            raise ValidationError(_('Project does not exist.'))

        is_administrator(request, self, project)

        checklists = []
        for checklist in models.Checklist.objects.all():
            qs = models.Answer.objects.filter(project=project,
                                              question__checklist=checklist)
            total = checklist.questions.count()
            positive_count = qs.filter(value=True).count()
            negative_count = qs.filter(value=False).count()
            unknown_count = total - positive_count - negative_count
            checklists.append(
                dict(
                    name=checklist.name,
                    uuid=checklist.uuid,
                    positive_count=positive_count,
                    negative_count=negative_count,
                    unknown_count=unknown_count,
                    score=round(100 * positive_count / total, 2) if total > 0
                    else 100,  # consider empty lists as fully compliant
                ))
        return Response(checklists)
Пример #3
0
 def check_catalog_permissions(self, scope):
     if isinstance(scope,
                   ServiceSettings) and not self.request.user.is_staff:
         raise ValidationError(
             _('Only staff is allowed to manage global catalogs.'))
     if isinstance(scope, models.Cluster):
         is_administrator(self.request.user, scope.project)
Пример #4
0
 def delete_permission_check(request, view, obj=None):
     if not obj:
         return
     if obj.service_project_link.service.settings.shared:
         if settings.WALDUR_OPENSTACK['MANAGER_CAN_MANAGE_TENANTS']:
             structure_permissions.is_manager(request, view, obj)
         else:
             structure_permissions.is_owner(request, view, obj)
     else:
         structure_permissions.is_administrator(request, view, obj)
Пример #5
0
    def check_permissions_for_console(request, view, instance=None):
        if not instance:
            return

        if request.user.is_staff:
            return

        if settings.WALDUR_OPENSTACK_TENANT['ALLOW_CUSTOMER_USERS_OPENSTACK_CONSOLE_ACCESS']:
            structure_permissions.is_administrator(request, view, instance)
        else:
            raise exceptions.PermissionDenied()
Пример #6
0
    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data, many=True)
        serializer.is_valid(raise_exception=True)

        try:
            project = Project.objects.get(uuid=self.kwargs['project_uuid'])
        except Project.DoesNotExist:
            raise ValidationError(_('Project does not exist.'))

        is_administrator(request, self, project)

        try:
            checklist = models.Checklist.objects.get(
                uuid=self.kwargs['checklist_uuid'])
        except models.Checklist.DoesNotExist:
            raise ValidationError(_('Checklist does not exist.'))

        for answer in serializer.validated_data:
            try:
                question = checklist.questions.get(
                    uuid=answer['question_uuid'])
            except models.Question.DoesNotExist:
                raise ValidationError(_('Question does not exist.'))

            models.Answer.objects.update_or_create(
                question=question,
                project=project,
                defaults={
                    'user': request.user,
                    'value': answer['value'],
                },
            )

        headers = self.get_success_headers(serializer.data)
        return Response(serializer.data,
                        status=status.HTTP_201_CREATED,
                        headers=headers)
Пример #7
0
    def check_permissions_for_resource_actions(request, view, resource=None):
        if not resource:
            return

        structure_permissions.is_administrator(request, view, resource)
Пример #8
0
 def validate_project(self, project):
     structure_permissions.is_administrator(self.context['request'],
                                            self.context['view'], project)
     return project