def buildGraph(request): error_msg = '' if request.method == 'POST': form = BuildGraphForm(request.POST, request.FILES) # instantiating form if form.is_valid(): # Acquire proj names userDefProjectName = form.cleaned_data['UserDefprojectName'] site = form.cleaned_data['site'] subject = form.cleaned_data['subject'] session = form.cleaned_data['session'] scanId = form.cleaned_data['scanId'] # Private project error checking if (form.cleaned_data['Project_Type'] == 'private'): if not request.user.is_authenticated(): error_msg = "You must be logged in to make/alter a private project! Please Login or make/alter a public project." ''' # Untested TODO: Add join to ensure it a private project elif BuildGraphModel.objects.filter(owner=request.user, project_name=userDefProjectName, \ site=site, subject=subject, session=session, scanId=scanId).exists(): error_msg = "The scanID you requested to create already exists in this project path. Please change any of the form values." ''' # TODO DM: Many unaccounted for scenarios here! if error_msg: return render_to_response( 'buildgraph.html', { 'buildGraphform': form, 'error_msg': error_msg }, context_instance=RequestContext(request)) print "Uploading files..." # If a user is logged in associate the project with thier directory if form.cleaned_data['Project_Type'] == 'private': userDefProjectName = os.path.join(request.user.username, userDefProjectName) else: userDefProjectName = os.path.join('public', userDefProjectName) # Adapt project name if necesary on disk userDefProjectName = adaptProjNameIfReq( os.path.join(settings.MEDIA_ROOT, userDefProjectName) ) # Fully qualify AND handle identical projects request.session['usrDefProjDir'] = os.path.join( userDefProjectName, site, subject, session, scanId) request.session['scanId'] = scanId ''' Define data directory paths ''' request.session['derivatives'], request.session['rawdata'], request.session['graphs'],\ request.session['graphInvariants'],request.session['images']= defDataDirs(request.session['usrDefProjDir']) # Create a model object to save data to DB grModObj = BuildGraphModel( project_name=form.cleaned_data['UserDefprojectName']) grModObj.location = request.session[ 'usrDefProjDir'] # Where the particular scan location is grModObj.site = form.cleaned_data['site'] # set the site grModObj.subject = form.cleaned_data['subject'] # set the subject grModObj.session = form.cleaned_data['session'] # set the session grModObj.scanId = form.cleaned_data['scanId'] # set the scanId if request.user.is_authenticated(): grModObj.owner = request.user # Who created the project request.session['invariants'] = form.cleaned_data[ 'Select_Invariants_you_want_computed'] request.session['graphsize'] = form.cleaned_data[ 'Select_graph_size'] ''' Acquire fileNames ''' fiber_fn = form.cleaned_data[ 'fiber_file'].name # get the name of the file input by user roi_raw_fn = form.cleaned_data['roi_raw_file'].name roi_xml_fn = form.cleaned_data['roi_xml_file'].name print "Uploading files..." ''' Save files in appropriate location ''' saveFileToDisk( form.cleaned_data['fiber_file'], os.path.join(request.session['derivatives'], fiber_fn)) saveFileToDisk( form.cleaned_data['roi_raw_file'], os.path.join(request.session['derivatives'], roi_raw_fn)) saveFileToDisk( form.cleaned_data['roi_xml_file'], os.path.join(request.session['derivatives'], roi_xml_fn)) grModObj.save() # Save project data to DB after file upload # add entry to owned project if request.user.is_authenticated(): ownedProjModObj = OwnedProjects(project_name=grModObj.project_name, \ owner=grModObj.owner, is_private=form.cleaned_data['Project_Type'] == 'private') ownedProjModObj.save() print '\nSaving all files complete...' ''' Make appropriate dirs if they dont already exist ''' createDirStruct.createDirStruct([request.session['derivatives'], request.session['rawdata'],\ request.session['graphs'], request.session['graphInvariants'], request.session['images']]) # Redirect to Processing page return HttpResponseRedirect(get_script_prefix() + 'processinput') else: form = BuildGraphForm() # An empty, unbound form # Render the form return render_to_response( 'buildgraph.html', {'buildGraphform': form}, context_instance=RequestContext( request ) # Some failure to input data & returns a key signaling what is requested )
def buildGraph(request): error_msg = '' if request.method == 'POST': form = BuildGraphForm(request.POST, request.FILES) # instantiating form if form.is_valid(): # Acquire proj names userDefProjectName = form.cleaned_data['UserDefprojectName'] site = form.cleaned_data['site'] subject = form.cleaned_data['subject'] session = form.cleaned_data['session'] scanId = form.cleaned_data['scanId'] # Private project error checking if (form.cleaned_data['Project_Type'] == 'private'): if not request.user.is_authenticated(): error_msg = "You must be logged in to make/alter a private project! Please Login or make/alter a public project." ''' # Untested TODO: Add join to ensure it a private project elif BuildGraphModel.objects.filter(owner=request.user, project_name=userDefProjectName, \ site=site, subject=subject, session=session, scanId=scanId).exists(): error_msg = "The scanID you requested to create already exists in this project path. Please change any of the form values." ''' # TODO DM: Many unaccounted for scenarios here! if error_msg: return render_to_response( 'buildgraph.html', {'buildGraphform': form, 'error_msg': error_msg}, context_instance=RequestContext(request) ) print "Uploading files..." # If a user is logged in associate the project with thier directory if form.cleaned_data['Project_Type'] == 'private': userDefProjectName = os.path.join(request.user.username, userDefProjectName) else: userDefProjectName = os.path.join('public', userDefProjectName) # Adapt project name if necesary on disk userDefProjectName = adaptProjNameIfReq(os.path.join(settings.MEDIA_ROOT, userDefProjectName)) # Fully qualify AND handle identical projects request.session['usrDefProjDir'] = os.path.join(userDefProjectName, site, subject, session, scanId) request.session['scanId'] = scanId ''' Define data directory paths ''' request.session['derivatives'], request.session['rawdata'], request.session['graphs'],\ request.session['graphInvariants'],request.session['images']= defDataDirs(request.session['usrDefProjDir']) # Create a model object to save data to DB grModObj = BuildGraphModel(project_name = form.cleaned_data['UserDefprojectName']) grModObj.location = request.session['usrDefProjDir'] # Where the particular scan location is grModObj.site = form.cleaned_data['site']# set the site grModObj.subject = form.cleaned_data['subject']# set the subject grModObj.session = form.cleaned_data['session']# set the session grModObj.scanId = form.cleaned_data['scanId']# set the scanId if request.user.is_authenticated(): grModObj.owner = request.user # Who created the project request.session['invariants'] = form.cleaned_data['Select_Invariants_you_want_computed'] request.session['graphsize'] = form.cleaned_data['Select_graph_size'] ''' Acquire fileNames ''' fiber_fn = form.cleaned_data['fiber_file'].name # get the name of the file input by user roi_raw_fn = form.cleaned_data['roi_raw_file'].name roi_xml_fn = form.cleaned_data['roi_xml_file'].name print "Uploading files..." ''' Save files in appropriate location ''' saveFileToDisk(form.cleaned_data['fiber_file'], os.path.join(request.session['derivatives'], fiber_fn)) saveFileToDisk(form.cleaned_data['roi_raw_file'], os.path.join(request.session['derivatives'], roi_raw_fn)) saveFileToDisk(form.cleaned_data['roi_xml_file'], os.path.join(request.session['derivatives'], roi_xml_fn)) grModObj.save() # Save project data to DB after file upload # add entry to owned project if request.user.is_authenticated(): ownedProjModObj = OwnedProjects(project_name=grModObj.project_name, \ owner=grModObj.owner, is_private=form.cleaned_data['Project_Type'] == 'private') ownedProjModObj.save() print '\nSaving all files complete...' ''' Make appropriate dirs if they dont already exist ''' createDirStruct.createDirStruct([request.session['derivatives'], request.session['rawdata'],\ request.session['graphs'], request.session['graphInvariants'], request.session['images']]) # Redirect to Processing page return HttpResponseRedirect(get_script_prefix()+'processinput') else: form = BuildGraphForm() # An empty, unbound form # Render the form return render_to_response( 'buildgraph.html', {'buildGraphform': form}, context_instance=RequestContext(request) # Some failure to input data & returns a key signaling what is requested )
def upload(request, webargs=None): """ Programmatic interface for uploading data @param request: the request object @param webargs: POST data with userDefProjectName, site, subject, session, scanId, graphsize, [list of invariants to compute] info """ # request.session.clear() if (webargs and request.method == 'POST'): # Check for malformatted input webargs = webargs[1:] if webargs.startswith('/') else webargs webargs = webargs[:-1] if webargs.endswith('/') else webargs if len(webargs.split('/')) == 7: [ userDefProjectName, site, subject, session, scanId, graphsize, request.session['invariants'] ] = webargs.split('/') request.session['invariants'] = request.session[ 'invariants'].split(',') elif len(webargs.split('/')) == 6: [userDefProjectName, site, subject, session, scanId, graphsize] = webargs.split('/') userDefProjectDir = adaptProjNameIfReq( os.path.join(settings.MEDIA_ROOT, 'public', userDefProjectName, site, subject, session, scanId)) ''' Define data directory paths ''' derivatives, rawdata, graphs, request.session[ 'graphInvariants'], images = defDataDirs(userDefProjectDir) ''' Make appropriate dirs if they dont already exist ''' createDirStruct.createDirStruct([ derivatives, rawdata, graphs, request.session['graphInvariants'], images ]) print 'Directory structure created...' uploadFiles = writeBodyToDisk(request.body, derivatives) # Check which file is which roi_xml_fn, fiber_fn, roi_raw_fn = filesorter.checkFileExtGengraph( uploadFiles) # Check & sort files ''' Data Processing ''' if (re.match(re.compile('(b|big)', re.IGNORECASE), graphsize)): request.session['graphsize'] = 'big' request.session['smGrfn'], request.session['bgGrfn'], lccfn, SVDfn \ = processData(fiber_fn, roi_xml_fn, roi_raw_fn,graphs,\ request.session['graphInvariants'],\ request.session['graphsize'],True) elif (re.match(re.compile('(s|small)', re.IGNORECASE), graphsize)): request.session['graphsize'] = 'small' request.session['smGrfn'], request.session['bgGrfn'], lccfn, SVDfn \ = processData(fiber_fn, roi_xml_fn, roi_raw_fn,graphs, request.session['graphInvariants'], request.session['graphsize'],True) else: return django.http.HttpResponseBadRequest( "Missing graph size. Specify big or small") # Run invariants if len(request.session['invariants']) > 0: print "Computing invariants" if (request.session['graphsize'] == 'big'): graph_fn = request.session['bgGrfn'] lcc_fn = request.session['lccfn'] elif (request.session['graphsize'] == 'small'): graph_fn = request.session['smGrfn'] lcc_fn = None invariant_fns = runInvariants(request.session['invariants'],\ graph_fn, request.session['graphInvariants'],\ lcc_fn, request.session['graphsize']) #ret = rzfile.printdir() #ret = rzfile.testzip() #ret = rzfile.namelist() # request.session.clear() dwnldLoc = "http://mrbrain.cs.jhu.edu" + userDefProjectDir.replace( ' ', '%20') return HttpResponse( "Files available for download at " + dwnldLoc) # change to render of a page with a link to data result elif (not webargs): # request.session.clear() return django.http.HttpResponseBadRequest( "Expected web arguments to direct project correctly") else: # request.session.clear() return django.http.HttpResponseBadRequest( "Expected POST data, but none given")
def upload(request, webargs=None): """ Programmatic interface for uploading data @param request: the request object @param webargs: POST data with userDefProjectName, site, subject, session, scanId, graphsize, [list of invariants to compute] info """ # request.session.clear() if (webargs and request.method == 'POST'): # Check for malformatted input webargs = webargs[1:] if webargs.startswith('/') else webargs webargs = webargs[:-1] if webargs.endswith('/') else webargs if len(webargs.split('/')) == 7: [userDefProjectName, site, subject, session, scanId, graphsize, request.session['invariants'] ] = webargs.split('/') request.session['invariants'] = request.session['invariants'].split(',') elif len(webargs.split('/')) == 6: [userDefProjectName, site, subject, session, scanId, graphsize] = webargs.split('/') userDefProjectDir = adaptProjNameIfReq(os.path.join(settings.MEDIA_ROOT, 'public', userDefProjectName, site, subject, session, scanId)) ''' Define data directory paths ''' derivatives, rawdata, graphs, request.session['graphInvariants'], images = defDataDirs(userDefProjectDir) ''' Make appropriate dirs if they dont already exist ''' createDirStruct.createDirStruct([derivatives, rawdata, graphs, request.session['graphInvariants'], images]) print 'Directory structure created...' uploadFiles = writeBodyToDisk(request.body, derivatives) # Check which file is which roi_xml_fn, fiber_fn, roi_raw_fn = filesorter.checkFileExtGengraph(uploadFiles) # Check & sort files ''' Data Processing ''' if (re.match(re.compile('(b|big)', re.IGNORECASE), graphsize)): request.session['graphsize'] = 'big' request.session['smGrfn'], request.session['bgGrfn'], lccfn, SVDfn \ = processData(fiber_fn, roi_xml_fn, roi_raw_fn,graphs,\ request.session['graphInvariants'],\ request.session['graphsize'],True) elif(re.match(re.compile('(s|small)', re.IGNORECASE), graphsize)): request.session['graphsize'] = 'small' request.session['smGrfn'], request.session['bgGrfn'], lccfn, SVDfn \ = processData(fiber_fn, roi_xml_fn, roi_raw_fn,graphs, request.session['graphInvariants'], request.session['graphsize'],True) else: return django.http.HttpResponseBadRequest ("Missing graph size. Specify big or small") # Run invariants if len(request.session['invariants']) > 0: print "Computing invariants" if (request.session['graphsize'] == 'big'): graph_fn = request.session['bgGrfn'] lcc_fn = request.session['lccfn'] elif (request.session['graphsize'] == 'small'): graph_fn = request.session['smGrfn'] lcc_fn = None invariant_fns = runInvariants(request.session['invariants'],\ graph_fn, request.session['graphInvariants'],\ lcc_fn, request.session['graphsize']) #ret = rzfile.printdir() #ret = rzfile.testzip() #ret = rzfile.namelist() # request.session.clear() dwnldLoc = "http://mrbrain.cs.jhu.edu" + userDefProjectDir.replace(' ','%20') return HttpResponse ( "Files available for download at " + dwnldLoc) # change to render of a page with a link to data result elif(not webargs): # request.session.clear() return django.http.HttpResponseBadRequest ("Expected web arguments to direct project correctly") else: # request.session.clear() return django.http.HttpResponseBadRequest ("Expected POST data, but none given")