def edit_experiment(request, pk): experiment = Experiment.objects.get(pk=pk) form = ExperimentForm(request.POST or None, instance=experiment) if request.method == "POST" and form.is_valid(): if "cancel" in request.POST: return redirect("/lifespan/experiments/") with reversion.create_revision(): form.save() reversion.set_user(request.user) comment = request.POST["comment"] or "Changed experiment" reversion.set_comment(comment) log(request, experiment, comment) return redirect("/lifespan/experiment/%s" % pk) ctx = {"experiment": experiment, "form": form} return render_to_response("lifespan/edit_experiment.html", ctx, context_instance=RequestContext(request))
def edit_experiment(request, pk): experiment = Experiment.objects.get(pk=pk) form = ExperimentForm(request.POST or None, instance=experiment) if request.method == "POST" and form.is_valid(): if "cancel" in request.POST: return redirect('/lifespan/experiments/') with reversion.create_revision(): form.save() reversion.set_user(request.user) comment = request.POST['comment'] or "Changed experiment" reversion.set_comment(comment) log(request, experiment, comment) return redirect('/lifespan/experiment/%s' % pk) ctx = {'experiment': experiment, 'form': form} return render_to_response('lifespan/edit_experiment.html', ctx, context_instance=RequestContext(request))
def add_experiment(request, pk): form = ExperimentForm(request.POST or None, pk=pk) # A form bound to the POST data if request.method == "POST" and form.is_valid(): # All validation rules pass with reversion.create_revision(): experiment = form.save(commit=False) # print("Experiment id: %s" % experiment.id) # print form form.save() if isinstance(request.user, AnonymousUser): request.user = User.objects.get(username="******") reversion.set_user(request.user) comment = "Added experiment." reversion.set_comment(comment) log(request, experiment, comment) msg = "Successfully added experiment." messages.add_message(request, messages.SUCCESS, ugettext(msg)) return redirect("/lifespan/experiment/%s" % experiment.pk) return render_to_response("lifespan/add_experiment.html", {"form": form}, context_instance=RequestContext(request))
def add_experiment(request, pk): form = ExperimentForm(request.POST or None, pk=pk) # A form bound to the POST data if request.method == "POST" and form.is_valid( ): # All validation rules pass with reversion.create_revision(): experiment = form.save(commit=False) #print("Experiment id: %s" % experiment.id) #print form form.save() if isinstance(request.user, AnonymousUser): request.user = User.objects.get(username="******") reversion.set_user(request.user) comment = "Added experiment." reversion.set_comment(comment) log(request, experiment, comment) msg = "Successfully added experiment." messages.add_message(request, messages.SUCCESS, ugettext(msg)) return redirect('/lifespan/experiment/%s' % experiment.pk) return render_to_response('lifespan/add_experiment.html', {'form': form}, context_instance=RequestContext(request))
def new_exp(request, experiment_id=None): def generate_sample_name(sample): """ naming standard: CellLine.Library.TreatmentIfAny.shON/shOFF.time.A/B/C Example: A549.K1_2.EZH2_150nM.shON.T21.A """ sample_name = ".".join([sample.cell_model.CCLE_name, sample.shRNA_library.LibName]) # if sample.pool_number is not None: # pool_str = '_P' # tmp = '' # for p in sample.pool_number(): # tmp += '_'+p.description # pool_str += tmp[1:] # else: # pool_str = '_PNone' # sample_name = sample_name + pool_str if sample.treatment and sample.treatment_dose: treatment = "_".join([sample.treatment.compoundName, str(sample.treatment_dose)]) sample_name = ".".join([sample_name, treatment]) shrna = "shON" if not sample.shRNA_on: shrna = "shOFF" sample_name = ".".join([sample_name, shrna, "".join(["T", str(sample.time_in_days)]), sample.replicate]) if sample.other_tag: sample_name = sample_name + "." + sample.other_tag return sample_name if experiment_id: experiment = get_object_or_404(Experiment, experiment_id=experiment_id) expform = ExperimentForm(instance=experiment) samforms = SampleFormSet(instance=experiment) # if experiment.user != request.user: # return HttpResponseForbidden() else: experiment = Experiment() # (user=request.user) if request.POST: if "create_exp" in request.POST or "add_sample" in request.POST: expform = ExperimentForm(request.POST, instance=experiment) samforms = SampleFormSet(request.POST, instance=experiment) if expform.is_valid() and samforms.is_valid(): new_exp = expform.save(commit=False) # automatic generate or modify fields # save modified form new_exp.save() expform.save_m2m() # sample forms samforms.instance = new_exp if samforms.has_changed(): for samform in samforms: if samform.is_valid() and samform.has_changed() and (samform is not None): new_sam = samform.save(commit=False) # new_sam.pool_number = samform.cleaned_data['pool_number'] # new_sam.sample_id = experiment.sample_set.count() + 1 new_sam.sample_name = generate_sample_name(new_sam) # new_sam.save() # samform.save_m2m() new_sam = samforms.save() return HttpResponseRedirect("/virtual/new/confirm/%s/" % new_exp.experiment_id) elif "delete_exp" in request.POST: exp2delete = get_object_or_404(Experiment, experiment_id=experiment.experiment_id).delete() # return HttpResponseRedirect('/virtual/delete/%s/' % experiment.experiment_id) return HttpResponseRedirect("/virtual/new/confirm/%s/" % experiment.experiment_id) else: expform = ExperimentForm(instance=experiment) samforms = SampleFormSet(instance=experiment) args = {} args.update(csrf(request)) args["expform"] = expform args["samforms"] = samforms return render_to_response("newExpView/new.html", args)
def provision_detail(request, experimentid): if request.method == 'GET': #print request.data #print experimentid experiment = get_object_or_404(Experiment, experimentid = experimentid) experiment_serializer = ExperimentSerializer(experiment, many=False) #print experiment #ansbilenodes = get_list_or_404(AnsibleNode, experiment = experiment) ansiblenodes = list(AnsibleNode.objects.filter(experiment = experiment)) if not ansiblenodes: ansiblenodes = list() ansiblenodes_serializer = AnsibleNodeSerializer(ansiblenodes, many=True, show_experiment=False) #print experiment_serializer.update_node_details(ansbilenodes_serializer.data) #print experiment_serializer.data return Response(experiment_serializer.include_node_details(ansiblenodes_serializer.data)) elif request.method == 'POST': #print request.data #print request.FILES #print request.FILES['file'] #form = ExperimentForm(request.POST, request.FILES) #print form.errors #print "form" #print form #print "experimentid" #delete existing entry try: entry = Experiment.objects.get(pk=experimentid) entry.delete() entry = None except (KeyError, Experiment.DoesNotExist): entry = None #create new entry form = ExperimentForm(request.POST, request.FILES) if form.is_valid(): form.save() new_experiment = form.save() new_experiment.status = Experiment.unprovision new_experiment.save() else: return Response(request.POST, status=status.HTTP_400_BAD_REQUEST) entry = Experiment.objects.get(pk=experimentid) #start provision host_list = [x.strip() for x in entry.host_list.split(',')] #print host_list PlaybookHandler.run(experimentid, entry.playbook.path, host_list) return Response(request.POST, status=status.HTTP_201_CREATED) elif request.method == 'DELETE': #delete existing entry try: entry = Experiment.objects.get(pk=experimentid) #delete the corresponding log first try: print entry.display_log_path() os.remove(entry.display_log_path()) except OSError: pass entry.delete() entry = None except (KeyError, Experiment.DoesNotExist): entry = None return Response()