def convert(media_root, uploadedFiles, convert_file_save_loc, input_format, output_format, to_email): # Send begin job email content = "Hello,\n\n You requested the following files be converted:" for fn in uploadedFiles: content += "\n- " + os.path.basename(fn) content += "\n\nTo the following formats:" for fmt in output_format: content += "\n- " + fmt sendEmail(to_email, "Job launch Notification", content+"\n\n") # End Email junk err_msg = "" outfn = "" for fn in uploadedFiles: outfn, err_msg = convertTo.convert_graph(fn, input_format, convert_file_save_loc, *output_format) dwnld_loc = get_download_path(convert_file_save_loc) print "Download path: {0}".format(dwnld_loc) if (err_msg): err_msg = "Your job completed with errors. The result can be found at {}.\n\n"\ "Message: %s\n\n" % err_msg sendJobFailureEmail(to_email, err_msg, dwnld_loc) else: sendJobCompleteEmail(to_email,dwnld_loc)
def raw_upload(request): if request.method == "POST": form = RawUploadForm(request.POST, request.FILES) # instantiating form if form.is_valid(): # TODO: Alter save path data_dir = os.path.join(settings.MEDIA_ROOT, "c4", strftime("%a%d%b%Y_%H.%M.%S/", localtime()), "derivatives") dti = form.cleaned_data["dti"] mprage = form.cleaned_data["mprage"] bvalue = form.cleaned_data["bvalue"] bvector = form.cleaned_data["bvector"] # Save all derivatives for _file in dti, mprage, bvalue, bvector: saveFileToDisk(_file, os.path.join(data_dir, _file.name)) ru_model = RawUploadModel() ru_model.dtipath = os.path.join(data_dir, dti.name) ru_model.mpragepath = os.path.join(data_dir, mprage.name) ru_model.atlas = form.cleaned_data["atlas"] ru_model.graphsize = "big" if form.cleaned_data["graphsize"] == True else "small" ru_model.email = form.cleaned_data["email"] ru_model.save() # Sync to Db task_runc4.delay(ru_model.dtipath, ru_model.mpragepath, os.path.join(data_dir, bvalue.name), os.path.join(data_dir, bvector.name), form.cleaned_data["graphsize"], ru_model.atlas, form.cleaned_data["email"]) sendEmail(form.cleaned_data["email"], "MR Images to graphs job started", "Hello,\n\nYour job launched successfully. You will receive another email upon completion.\n\n") request.session["success_msg"] =\ """ Your job successfully launched. You should receive an email to confirm launch and another when it upon job completion. <br/> The process can take <i>several hours</i> in some cases. """ return HttpResponseRedirect(get_script_prefix()+"success") else: form = RawUploadForm() # An empty, unbound form return render_to_response( "c4.html", {"RawUploadForm": form}, context_instance=RequestContext(request) )
def download(request): MAX_NUM_GRAPH_DLS = 1 ATLASES = {"desikan": os.path.join(settings.ATLAS_DIR, "desikan_atlas.nii") , "slab": os.path.join(settings.ATLAS_DIR, "slab_atlas.nii")} if request.method == "POST": if request.POST.keys()[0] == "query_type": # Means we are doing a search form = DownloadQueryForm(request.POST) if form.is_valid(): gdmof = GraphDownloadModel.objects.filter # typedef st = str(".*"+ ".*".join(form.cleaned_data["query"].strip().split()) +".*") # Search Term if form.cleaned_data["query_type"] == "all": table = GraphTable( gdmof(genus__iregex=st) | gdmof(filepath__iregex=st) | gdmof(region__iregex=st) | gdmof(numvertex__iregex=st)| gdmof(numedge__iregex=st) | gdmof(graphattr__iregex=st)| gdmof(vertexattr__iregex=st) | gdmof(edgeattr__iregex=st)| gdmof(sensor__iregex=st) | gdmof(source__iregex=st) | gdmof(project__iregex=st) ) elif form.cleaned_data["query_type"] == "attribute": table = GraphTable( gdmof(graphattr__iregex=st)| gdmof(vertexattr__iregex=st)| gdmof(edgeattr__iregex=st) ) elif form.cleaned_data["query_type"] == "name": table = GraphTable( gdmof(filepath__iregex=st) ) elif form.cleaned_data["query_type"] == "genus": table = GraphTable( gdmof(genus__iregex=st) ) elif form.cleaned_data["query_type"] == "region": table = GraphTable( gdmof(region__iregex=st) ) elif form.cleaned_data["query_type"] == "project": table = GraphTable( gdmof(project__iregex=st) ) # NOTE: Or equal to as well elif form.cleaned_data["query_type"] == "numvertex_gt": table = GraphTable( gdmof(numvertex__gte=int(form.cleaned_data["query"])) ) elif form.cleaned_data["query_type"] == "numedge_gt": table = GraphTable( gdmof(numedge__gte=int(form.cleaned_data["query"])) ) elif form.cleaned_data["query_type"] == "numvertex_lt": table = GraphTable( gdmof(numvertex__lte=int(form.cleaned_data["query"])) ) elif form.cleaned_data["query_type"] == "numedge_lt": table = GraphTable( gdmof(numedge__lte=int(form.cleaned_data["query"])) ) elif form.cleaned_data["query_type"] == "sensor": table = GraphTable( gdmof(sensor__iregex=st) ) elif form.cleaned_data["query_type"] == "source": table = GraphTable( gdmof(source__iregex=st) ) if (len(table.rows) == 0): table = None # Get the no results message to show up else: table.set_html_name("Search Results") return render_to_response("downloadgraph.html", {"genera":[], "query_result":table}, context_instance=RequestContext(request)) else: return HttpResponseRedirect(get_script_prefix()+"download") else: # We just want to download specific files form = DownloadGraphsForm(request.POST) if form.is_valid(): selected_files = request.POST.getlist("selection") ds_factor = 0 if not request.POST.get("ds_factor") else request.POST.get("ds_factor") if ds_factor not in ATLASES.keys(): ds_factor = int(ds_factor) dl_format = form.cleaned_data["dl_format"] if not selected_files: return HttpResponseRedirect(get_script_prefix()+"download") # Something selected for dl/Convert+dl else: data_dir = os.path.join(settings.MEDIA_ROOT, "public", strftime("download_%a%d%b%Y_%H.%M.%S/", localtime())) dwnld_loc = get_download_path(data_dir) sendEmail(form.cleaned_data["Email"], "Job launch notification", "Your download request was received. You will receive an email when it completes.\n\n") # Testing only task_scale.delay(selected_files, dl_format, ds_factor, ATLASES, form.cleaned_data["Email"], dwnld_loc, os.path.join(data_dir, "archive.zip")) # Testing only request.session['success_msg'] = \ """ Your job successfully launched. You should receive an email when your job begins and another one when it completes.<br/> The process may take several hours (dependent on graph size). If your job fails you will receive an email notification as well.<br/> If you do not see an email in your <i>Inbox</i> check the <i>Spam</i> folder and add <code>[email protected]</code> to your safe list. """ return HttpResponseRedirect(get_script_prefix()+'success') else: return HttpResponseRedirect(get_script_prefix()+"download") else: tbls = [] for genus in settings.GENERA: table = GraphTable(GraphDownloadModel.objects.filter(genus=genus)) table.set_html_name(genus.capitalize()) # Set the html __repr__ # TODO: Alter per_page limit to +25 RequestConfig(request, paginate={"per_page":25}).configure(table) # Each table re-render given a request #table.columns["url"].header = "Download Link" dl_form = DownloadGraphsForm() dl_form.set_name(genus) tbls.append((table, dl_form)) return render_to_response("downloadgraph.html", {"genera":tbls, "query":DownloadQueryForm()}, context_instance=RequestContext(request))