Exemple #1
0
 def handle_assay_confirm_delete(self, request, context, *args, **kwargs):
     self.check_write_permission(request)
     form = export_forms.ExportSelectionForm(data=request.POST,
                                             user=request.user,
                                             exclude_disabled=False)
     study = self.get_object()
     if form.is_valid():
         # cannot directly use form.selection.assays, as it will include parent assays
         #   for any selected measurements
         if "assayId" in form.cleaned_data:
             qs = form.cleaned_data["assayId"].filter(study_id=study.pk)
             assay_count = qs.update(active=False)
         else:
             # TODO: uncovered
             assay_count = 0
             # END uncovered
         # OK to directly use form.selection.measurements
         qs = form.selection.measurements.filter(study_id=study.pk)
         measurement_count = qs.update(active=False)
         messages.success(
             request,
             _("Deleted {assay} Assays and {measurement} Measurements.").
             format(assay=assay_count, measurement=measurement_count),
         )
         return True
     messages.error(request, _("Nothing selected to delete."))
     return False
Exemple #2
0
 def handle_assay_edit(self, request, context, *args, **kwargs):
     self.check_write_permission(request)
     study = self.get_object()
     selectForm = export_forms.ExportSelectionForm(data=request.POST,
                                                   user=request.user)
     if not selectForm.is_valid():
         messages.error(request,
                        _("Must select at least one Assay to edit."))
         return False
     total = selectForm.selection.assays.count()
     saved = 0
     for assay in selectForm.selection.assays:
         form = edd_forms.AssayForm(request.POST,
                                    instance=assay,
                                    prefix="assay",
                                    study=study)
         # removes fields having disabled bulk edit checkbox
         form.check_bulk_edit()
         if form.is_valid():
             form.save()
             saved += 1
         else:
             context["new_assay"] = form
             for error in form.errors.values():
                 messages.warning(request, error)
             break
     messages.success(
         request,
         _("Saved {saved} of {total} Assays").format(saved=saved,
                                                     total=total),
     )
     return saved > 0
Exemple #3
0
    def handle_enable_disable(self, request, active, **kwargs):
        self.check_write_permission(request)
        form = export_forms.ExportSelectionForm(data=request.POST,
                                                user=request.user,
                                                exclude_disabled=False)
        if form.is_valid():
            with transaction.atomic():
                if not active and form.selection.measurements.count() == 0:
                    # true deletion only if there are zero measurements!
                    count, details = form.selection.lines.delete()
                    count = details[edd_models.Line._meta.label]
                else:
                    count = form.selection.lines.update(active=active)
                    # cascade deactivation to assays and measurements
                    # NOTE: ExportSelectionForm already filters out deactivated elements,
                    #   so this will _NOT_ re-activate objects from previously
                    #   deactivated lines.
                    form.selection.assays.update(active=active)
                    form.selection.measurements.update(active=active)

            action = _("Restored") if active else _("Deleted")
            messages.success(
                request,
                _("{action} {count} Lines").format(action=action, count=count))
            return True
        messages.error(request, _("Failed to validate selection."))
        return False
Exemple #4
0
 def handle_clone(self, request, context, *args, **kwargs):
     self.check_write_permission(request)
     form = export_forms.ExportSelectionForm(data=request.POST,
                                             user=request.user)
     study = self.get_object()
     cloned = 0
     if not form.is_valid():
         messages.error(request,
                        _("Failed to validate selection for clone."))
         return False
     for line in form.selection.lines:
         # easy way to clone is just pretend to fill out add line form
         initial = edd_forms.LineForm.initial_from_model(line)
         # update name to indicate which is the clone
         initial["name"] = initial["name"] + " clone"
         clone = edd_forms.LineForm(initial, study=study)
         if clone.is_valid():
             clone.save()
             cloned += 1
     messages.success(
         request,
         _("Cloned {count} of {total} Lines").format(
             count=cloned, total=form.selection.lines.count()),
     )
     return True
Exemple #5
0
 def handle_unreplicate(self, request, context, *args, **kwargs):
     self.check_write_permission(request)
     study = self.get_object()
     selectForm = export_forms.ExportSelectionForm(data=request.POST,
                                                   user=request.user)
     replicate = edd_models.MetadataType.system("Replicate")
     if selectForm.is_valid():
         for line in selectForm.selection.lines.filter(study_id=study.pk):
             line.metadata_clear(replicate)
             line.save()
         return True
     return False
Exemple #6
0
 def get_context_data(self, **kwargs):
     context = super().get_context_data(**kwargs)
     request = kwargs.get("request")
     form = export_forms.ExportSelectionForm(data=request.POST,
                                             user=request.user,
                                             exclude_disabled=False)
     if form.is_valid():
         count = form.selection.measurements.count()
     else:
         count = 0
     context.update(cancel_link=request.path,
                    delete_select=form,
                    measurement_count=count)
     return context
Exemple #7
0
 def handle_measurement_edit(self, request, context, *args, **kwargs):
     self.check_write_permission(request)
     selectForm = export_forms.ExportSelectionForm(data=request.POST,
                                                   user=request.user)
     if not selectForm.is_valid():
         messages.error(request, _("Nothing selected for edit."))
         return False
     # only pass payload to MeasurementValueFormSet when update button is hit
     form_payload = None
     if request.POST.get("action", None) == "measurement_update":
         form_payload = request.POST
     # query the exact info needed to display
     measures = selectForm.selection.measurements.select_related(
         "assay__protocol", "assay__line",
         "measurement_type").order_by("assay__line_id")
     # invert the graph to traverse based on lines first
     inverted = collections.defaultdict(
         lambda: collections.defaultdict(list))
     # loop over measurements to add formset and to inverted structure
     show_edit = True
     with transaction.atomic():
         for m in measures:
             m.form = edd_forms.MeasurementValueFormSet(
                 form_payload,
                 instance=m,
                 prefix=str(m.id),
                 queryset=m.measurementvalue_set.order_by("x"),
             )
             # only try to save when data is there and valid
             save_form = m.form.is_bound and m.form.is_valid()
             # only show edit page if at least one form is not saved
             show_edit = show_edit and not save_form
             if save_form:
                 m.form.save()
             inverted[m.assay.line][m.assay].append(m)
     if show_edit:
         # template doing inverted.items is same as inverted["items"], so disable defaults
         inverted.default_factory = None
         for adict in inverted.values():
             adict.default_factory = None
         return render(
             request,
             "main/edit_measurement.html",
             context={
                 "inverted": inverted,
                 "measures": measures,
                 "study": self.get_object(),
             },
         )
     return True
Exemple #8
0
 def handle_line(self, request, context, *args, **kwargs):
     self.check_write_permission(request)
     study = self.get_object()
     selectForm = export_forms.ExportSelectionForm(data=request.POST,
                                                   user=request.user)
     if selectForm.is_valid():
         if selectForm.selection.lines.filter(study_id=study.id).exists():
             return self.handle_line_edit(request, context,
                                          selectForm.selection.lines)
     elif "lineId" in selectForm.cleaned_data:
         # no selection == new line
         return self.handle_line_new(request, context)
     messages.error(request, _("Failed to load line for editing."))
     return False
Exemple #9
0
 def handle_assay(self, request, context, *args, **kwargs):
     self.check_write_permission(request)
     study = self.get_object()
     selectForm = export_forms.ExportSelectionForm(data=request.POST,
                                                   user=request.user)
     if not selectForm.is_valid():
         messages.error(request,
                        _("Must select at least one Line to add Assay."))
         return False
     form = edd_forms.AssayForm(request.POST,
                                lines=selectForm.selection.lines,
                                prefix="assay",
                                study=study)
     if form.is_valid():
         form.save()
         return True
     context["new_assay"] = form
     return False
Exemple #10
0
 def handle_measurement_add(self, request, context, *args, **kwargs):
     self.check_write_permission(request)
     study = self.get_object()
     selectForm = export_forms.ExportSelectionForm(data=request.POST,
                                                   user=request.user)
     if not selectForm.is_valid():
         messages.error(
             request,
             _("Must select at least one Assay to add Measurement."))
         return False
     form = edd_forms.MeasurementForm(
         request.POST,
         assays=selectForm.selection.assays,
         prefix="measurement",
         study=study,
     )
     if form.is_valid():
         form.save()
         return True
     context["new_measurement"] = form
     return False