Ejemplo n.º 1
0
    def get_endpoints(self, request=None):
        qs = Endpoint.objects.none()
        filters = {"assessment_id": self.assessment_id}

        if self.visual_type == self.BIOASSAY_AGGREGATION:
            if request:
                ids = request.POST.getlist('endpoints')
            else:
                ids = self.endpoints.values_list('id', flat=True)

            filters["id__in"] = ids
            qs = Endpoint.objects.filter(**filters)

        elif self.visual_type == self.BIOASSAY_CROSSVIEW:

            if request:
                dose_id = tryParseInt(request.POST.get('dose_units'), -1)
                Prefilter.setFiltersFromForm(filters, request.POST,
                                             self.visual_type)

            else:
                dose_id = self.dose_units_id
                Prefilter.setFiltersFromObj(filters, self.prefilters)

            filters[
                "animal_group__dosing_regime__doses__dose_units_id"] = dose_id
            qs = Endpoint.objects.filter(**filters).distinct('id')

        return qs
Ejemplo n.º 2
0
    def get_endpoints(self, request=None):
        qs = Endpoint.objects.none()
        filters = {"assessment_id": self.assessment_id}

        if self.visual_type == self.BIOASSAY_AGGREGATION:
            if request:
                ids = request.POST.getlist('endpoints')
            else:
                ids = self.endpoints.values_list('id', flat=True)

            filters["id__in"] = ids
            qs = Endpoint.objects.filter(**filters)

        elif self.visual_type == self.BIOASSAY_CROSSVIEW:

            if request:
                dose_id = tryParseInt(request.POST.get('dose_units'), -1)
                Prefilter.setFiltersFromForm(filters, request.POST, self.visual_type)

            else:
                dose_id = self.dose_units_id
                Prefilter.setFiltersFromObj(filters, self.prefilters)

            filters["animal_group__dosing_regime__doses__dose_units_id"] = dose_id
            qs = Endpoint.objects.filter(**filters).distinct('id')

        return qs
Ejemplo n.º 3
0
    def clean(self):
        super(BaseGroupResultFormset, self).clean()

        # check that there is at least one result-group
        count = len(filter(lambda f: f.is_valid() and f.clean(), self.forms))
        if count < 1:
            raise forms.ValidationError("At least one group is required.")

        mfs = 0
        for form in self.forms:
            if form.cleaned_data['is_main_finding']:
                mfs += 1

        if mfs > 1:
            raise forms.ValidationError("Only one-group can be the main-finding.")

        if self.result:
            comparison_set_id = self.result.comparison_set_id
        else:
            comparison_set_id = tryParseInt(self.data['comparison_set'], -1)

        # Ensure all groups in group collection are accounted for,
        # and no other groups exist
        group_ids = [form.cleaned_data['group'].id for form in self.forms]
        selectedGroups = models.Group.objects\
            .filter(id__in=group_ids, comparison_set_id=comparison_set_id)
        allGroups = models.Group.objects\
            .filter(comparison_set_id=comparison_set_id)
        if selectedGroups.count() != allGroups.count():
            raise forms.ValidationError("Missing group(s) in this comparison set")
Ejemplo n.º 4
0
 def get_queryset(self):
     id_ = tryParseInt(self.request.GET.get('assessment_id'))
     queryset = self.model.objects\
         .filter(id=id_)\
         .annotate(endpoint_count=Count('baseendpoint__endpoint'))\
         .annotate(outcome_count=Count('baseendpoint__outcome'))\
         .annotate(ivendpoint_count=Count('baseendpoint__ivendpoint'))
     return queryset
Ejemplo n.º 5
0
 def get_queryset(self):
     id_ = tryParseInt(self.request.GET.get('assessment_id'))
     queryset = self.model.objects\
         .get_qs(id_)\
         .annotate(endpoint_count=Count('baseendpoint__endpoint'))\
         .annotate(outcome_count=Count('baseendpoint__outcome'))\
         .annotate(ivendpoint_count=Count('baseendpoint__ivendpoint'))
     return queryset
Ejemplo n.º 6
0
def get_assessment_from_query(request):
    """Returns assessment or None."""
    assessment_id = tryParseInt(request.GET.get('assessment_id'))
    if assessment_id is None:
        raise RequiresAssessmentID

    return models.Assessment.objects\
        .get_qs(assessment_id)\
        .first()
Ejemplo n.º 7
0
    def create(self, request, *args, **kwargs):
        # get an assessment
        assessment_id = tryParseInt(request.data.get('assessment_id'), -1)
        self.assessment = models.Assessment.objects\
                .get_qs(assessment_id)\
                .first()
        if self.assessment is None:
            raise RequiresAssessmentID

        self.check_editing_permission(request)

        return super().create(request, *args, **kwargs)
Ejemplo n.º 8
0
 def update_reference_tags(self):
     # find reference, check that the assessment is the same as the one we
     # have permissions-checked for, and if so, update reference-tags
     response = {"status": "fail"}
     pk = tryParseInt(self.request.POST.get("pk"), -1)
     ref = models.Reference.objects.filter(pk=pk, assessment=self.assessment).first()
     if ref:
         tag_pks = self.request.POST.getlist("tags[]", [])
         ref.tags.set(tag_pks)
         ref.last_updated = datetime.now()
         ref.save()
         response["status"] = "success"
     return response
Ejemplo n.º 9
0
    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()

        # check if we have a template to use
        pk = tryParseInt(self.request.GET.get('initial'), -1)

        if pk > 0:
            obj = self.model.objects.filter(pk=pk).first()
            permitted_assesments = Assessment.objects.get_viewable_assessments(
                self.request.user, exclusion_id=self.assessment.pk)
            if obj and obj.assessment in permitted_assesments:
                kwargs['initial'] = model_to_dict(obj)

        return kwargs
Ejemplo n.º 10
0
    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()

        # check if we have a template to use
        pk = tryParseInt(self.request.GET.get('initial'), -1)

        if pk > 0:
            obj = self.model.objects.filter(pk=pk).first()
            permitted_assesments = Assessment.objects.get_viewable_assessments(
                self.request.user, exclusion_id=self.assessment.pk)
            if obj and obj.assessment in permitted_assesments:
                kwargs['initial'] = model_to_dict(obj)

        return kwargs
Ejemplo n.º 11
0
 def update_reference_tags(self):
     # find reference, check that the assessment is the same as the one we
     # have permissions-checked for, and if so, update reference-tags
     response = {"status": "fail"}
     pk = tryParseInt(self.request.POST.get('pk'), -1)
     ref = models.Reference.objects\
         .filter(pk=pk, assessment=self.assessment).first()
     if ref:
         tag_pks = self.request.POST.getlist('tags[]', [])
         ref.tags.set(tag_pks)
         ref.last_updated = datetime.now()
         ref.save()
         response["status"] = "success"
     return response
Ejemplo n.º 12
0
    def has_permission(self, request, view):
        if view.action in self.list_actions:
            assessment_id = tryParseInt(request.GET.get('assessment_id'))
            if assessment_id is None:
                raise RequiresAssessmentID

            view.assessment = models.Assessment.objects\
                .filter(id=assessment_id)\
                .first()

            if view.assessment is None:
                return False

            return view.assessment.user_can_view_object(request.user)

        return True
Ejemplo n.º 13
0
    def setMaximumPercentControlChange(ep):
        """
        For each endpoint, return the maximum absolute-change percent control
        for that endpoint, or 0 if it cannot be calculated. Useful for
        ordering data-pivot results.
        """
        val = 0
        changes = [
            g['percentControlMean'] for g in ep['groups']
            if tryParseInt(g['percentControlMean'], default=False)
        ]
        if len(changes) > 0:
            min_ = min(changes)
            max_ = max(changes)
            val = min_ if abs(min_) > abs(max_) else max_

        ep['percentControlMaxChange'] = val
Ejemplo n.º 14
0
    def setMaximumPercentControlChange(cls, ep):
        """
        For each endpoint, return the maximum absolute-change percent control
        for that endpoint, or 0 if it cannot be calculated. Useful for
        ordering data-pivot results.
        """
        val = 0
        changes = [
            g['percentControlMean']
            for g in ep['groups']
            if tryParseInt(g['percentControlMean'], default=False)
        ]
        if len(changes) > 0:
            min_ = min(changes)
            max_ = max(changes)
            val = min_ if abs(min_) > abs(max_) else max_

        ep['percentControlMaxChange'] = val
Ejemplo n.º 15
0
    def rob_filter(self, request):
        params = self.request.query_params

        assessment_id = tryParseInt(params.get('assessment_id'), -1)
        query = Q(assessment_id=assessment_id)

        effects = params.get('effect[]')
        if effects:
            query &= Q(effect__in=effects.split(','))

        study_ids = params.get('study_id[]')
        if study_ids:
            query &= Q(animal_group__experiment__study__in=study_ids.split(','))

        qs = models.Endpoint.objects.filter(query)

        if qs.count() > 100:
            raise NotAcceptable("Must contain < 100 endpoints")

        serializer = self.get_serializer(qs, many=True)
        return Response(serializer.data)
Ejemplo n.º 16
0
    def rob_filter(self, request):
        params = self.request.query_params

        assessment_id = tryParseInt(params.get('assessment_id'), -1)
        query = Q(assessment_id=assessment_id)

        effects = params.get('effect[]')
        if effects:
            query &= Q(effect__in=effects.split(','))

        study_ids = params.get('study_id[]')
        if study_ids:
            query &= Q(animal_group__experiment__study__in=study_ids.split(','))

        qs = models.Endpoint.objects.filter(query)

        if qs.count() > 100:
            raise NotAcceptable("Must contain < 100 endpoints")

        serializer = self.get_serializer(qs, many=True)
        return Response(serializer.data)
Ejemplo n.º 17
0
 def post_update_ReferenceFilterTag(self, response):
     pk = tryParseInt(self.request.POST.get("pk"), -1)
     try:
         status = self.request.POST.get("status")
         if status == "add":
             parent_pk = self.request.POST.get("parent_pk", None)
             name = self.request.POST.get("name")
             response["node"] = models.ReferenceFilterTag.add_tag(self.assessment.pk, name, parent_pk)
         elif status == "remove":
             models.ReferenceFilterTag.remove_tag(self.assessment.pk, pk)
         elif status == "move":
             tag = get_object_or_404(models.ReferenceFilterTag, pk=pk)
             offset = int(self.request.POST.get("offset"))
             tag.move_within_parent(self.assessment.pk, offset)
         elif status == "rename":
             tag = get_object_or_404(models.ReferenceFilterTag, pk=pk)
             assert tag.id in models.ReferenceFilterTag.get_descendants_pks(self.object.id)
             tag.rename(self.request.POST.get("name"))
         else:
             raise Exception()
     except:
         response["status"] = "fail"
     return response
Ejemplo n.º 18
0
    def clean(self):
        super().clean()

        # check that there is at least one result-group
        count = len([f for f in self.forms if f.is_valid() and f.clean()])
        if count < 1:
            raise forms.ValidationError("At least one group is required.")

        mfs = 0
        for form in self.forms:
            if form.cleaned_data['is_main_finding']:
                mfs += 1

        if mfs > 1:
            raise forms.ValidationError(
                "Only one-group can be the main-finding.")

        if self.result:
            comparison_set_id = self.result.comparison_set_id
        else:
            comparison_set_id = tryParseInt(self.data['comparison_set'], -1)

        # exit early if any individual form is invalid
        if any([not form.is_valid() for form in self.forms]):
            return

        # Ensure all groups in group collection are accounted for,
        # and no other groups exist
        group_ids = [form.cleaned_data['group'].id for form in self.forms]
        selectedGroups = models.Group.objects\
            .filter(id__in=group_ids, comparison_set_id=comparison_set_id)
        allGroups = models.Group.objects\
            .filter(comparison_set_id=comparison_set_id)
        if selectedGroups.count() != allGroups.count():
            raise forms.ValidationError(
                "Missing group(s) in this comparison set")
Ejemplo n.º 19
0
 def rob_scores(self, request):
     assessment_id = tryParseInt(self.request.query_params.get('assessment_id'), -1)
     scores = self.model.objects.rob_scores(assessment_id)
     return Response(scores)
Ejemplo n.º 20
0
Archivo: api.py Proyecto: wschwab3/hawc
 def rob_scores(self, request):
     assessment_id = tryParseInt(
         self.request.query_params.get('assessment_id'), -1)
     scores = self.model.objects.rob_scores(assessment_id)
     return Response(scores)
Ejemplo n.º 21
0
 def get_object(self, **kwargs):
     pk = tryParseInt(self.request.GET.get('pk'), -1)
     obj = get_object_or_404(self.model, pk=pk)
     return super().get_object(object=obj)
Ejemplo n.º 22
0
Archivo: api.py Proyecto: wschwab3/hawc
 def effects(self, request):
     assessment_id = tryParseInt(
         self.request.query_params.get('assessment_id'), -1)
     effects = models.Endpoint.objects.get_effects(assessment_id)
     return Response(effects)
Ejemplo n.º 23
0
 def get_query(self, request, term):
     id_ = tryParseInt(request.GET.get('related'), -1)
     return self.model.objects.filter(
         protocol__study__assessment_id=id_,
         exposure_name__icontains=term)
Ejemplo n.º 24
0
 def get_object(self, **kwargs):
     pk = tryParseInt(self.request.GET.get('pk'), -1)
     obj = get_object_or_404(self.model, pk=pk)
     return super().get_object(object=obj)
Ejemplo n.º 25
0
 def effects(self, request):
     assessment_id = tryParseInt(self.request.query_params.get('assessment_id'), -1)
     effects = models.Endpoint.get_effects(assessment_id)
     return Response(effects)
Ejemplo n.º 26
0
 def get_object(self, **kwargs):
     pk = tryParseInt(self.request.GET.get("pk"), -1)
     obj = get_object_or_404(self.model, pk=pk)
     return super(TagsJSON, self).get_object(object=obj)