Пример #1
0
def convertFiles(uploadedFiles, fileType , toFormat, convertFileSaveLoc):
  '''
  Helper method to call convertTo module for invariant and graph format conversion

  @param uploadedFiles: array with all file names of uploaded files
  @param fileType
  @param toFormat -
  @param convertFileSaveLoc -
  @return isCorrectFileFormat - check if at least one file has the correct format
  @return isCorrectFileType - check if file type is legal
  '''
  isCorrectFileFormat = False # Guilty until proven innocent
  isCorrectFileType = False # Guilty until proven innocent

  for file_fn in uploadedFiles:
    # determine type of the file
    if (os.path.splitext(file_fn)[1] in ['.mat','.csv','.npy']):
      isCorrectFileFormat = True
      if (fileType == 'fg' or fileType == 'fibergraph'):
        isCorrectFileType = True
        pass # TODO : DM
      elif( fileType == 'lcc' or fileType == 'lrgstConnComp'):
        isCorrectFileType = True
        pass # TODO : DM
      elif (fileType in settings.VALID_FILE_TYPES.keys() or fileType in settings.VALID_FILE_TYPES.values()):
        isCorrectFileType = True

        # Check if file format is the same as the toFormat
        if (os.path.splitext(file_fn)[1] in toFormat):
          toFormat.remove(os.path.splitext(file_fn)[1])
        if (len(toFormat) == 0):
          pass # No work to be done here
        else:
          convertTo.convertAndSave(file_fn, toFormat, convertFileSaveLoc, fileType) # toFormat is a list
  return isCorrectFileFormat, isCorrectFileType
Пример #2
0
def asyncInvCompute(request):

  for graph_fn in request.session['uploaded_graphs']:
    lcc_fn = os.path.join(os.path.dirname(graph_fn), (os.path.basename(graph_fn).split('_')[0]+ '_concomp.npy'))

    try:
      invariant_fns = runInvariants(request.session['invariants'], graph_fn,
                          request.session['graphInvariants'], lcc_fn,
                          request.session['graphsize'])
    except:
      msg = "Hello,\n\nYour most recent job failed possibly because:%s\n" % (" "*randint(0,10))
      if not os.path.exists(lcc_fn):
        msg += "- the lcc file %s does not exists\n" % os.path.basename(lcc_fn)
      msg += "- the graph you uploaded does not match any accepted type %s\n\n" % (" "*randint(0,10))
      msg += "Please check these and try again. %s\n\n" % (" "*randint(0,10))
      sendJobFailureEmail(request.session['email'], msg)


    print 'Invariants for annoymous project %s complete...' % graph_fn

    # TODO: Make function for this. Duplicate of buildgraph code
    for fileFormat in request.session['invConvertToFormats'] :
      # Conversion of all files
      for inv in invariant_fns.keys():
        if isinstance(invariant_fns[inv], list): # Case of eigs
          for fn in invariant_fns[inv]:
            convertTo.convertAndSave(fn, fileFormat, os.path.dirname(fn), inv)
        else: # case of all other invariants
          convertTo.convertAndSave(invariant_fns[inv], fileFormat, \
                              os.path.dirname(invariant_fns[inv]), inv)

  # Email user of job finished
  sendJobCompleteEmail(request.session['email'], "http://mrbrain.cs.jhu.edu"+ request.session['dataDir'].replace(' ','%20'))
Пример #3
0
def confirmDownload(request):

    if request.method == 'POST':
        form = DownloadForm(request.POST)  # instantiating form
        if form.is_valid():
            invConvertToFormats = form.cleaned_data[
                'Select_Invariant_conversion_format']  # Which form to convert to
            grConvertToFormats = form.cleaned_data[
                'Select_Graph_conversion_format']
            dataReturn = form.cleaned_data['Select_output_type']

            for fileFormat in invConvertToFormats:
                if fileFormat == '.mat':
                    convertTo.convertLCCNpyToMat(request.session['lccfn'])
                    convertTo.convertSVDNpyToMat(request.session['SVDfn'])

                # Conversion of all files
                for inv in request.session['invariant_fns'].keys():
                    if isinstance(request.session['invariant_fns'][inv],
                                  list):  # Case of eigs
                        for fn in request.session['invariant_fns'][inv]:
                            convertTo.convertAndSave(fn, fileFormat,
                                                     getDirFromFilename(fn),
                                                     inv)
                            # TODO replace getDirFromFilename with os.path.dirname
                    else:  # case of all other invariants
                        convertTo.convertAndSave(request.session['invariant_fns'][inv], fileFormat, \
                                            getDirFromFilename(request.session['invariant_fns'][inv]) , inv)
                        # TODO replace getDirFromFilename with os.path.dirname

            for fileFormat in grConvertToFormats:
                if request.session['graphsize'] == 'big':
                    convertTo.convertGraph(request.session['bgGrfn'],
                                           fileFormat)
                elif request.session['graphsize'] == 'small':
                    convertTo.convertGraph(request.session['smGrfn'],
                                           fileFormat)

            if dataReturn == 'vd':  # View data directory
                dataUrlTail = request.session['usrDefProjDir']

                # baseurl = request.META['HTTP_HOST']
                # host = request.META['wsgi.url_scheme']
                # rooturl = host + '://' + baseurl # Originally was: 'http://mrbrain.cs.jhu.edu' # Done for http & https

                return HttpResponseRedirect('http://mrbrain.cs.jhu.edu' +
                                            dataUrlTail.replace(' ', '%20'))

            elif dataReturn == 'dz':  #Download all as zip
                return HttpResponseRedirect(get_script_prefix() + 'zipoutput')

    else:
        form = DownloadForm()

    return render_to_response('confirmDownload.html',{'downloadForm': form},\
                    context_instance=RequestContext(request))
Пример #4
0
def confirmDownload(request):

  if request.method == 'POST':
    form = DownloadForm(request.POST) # instantiating form
    if form.is_valid():
      invConvertToFormats = form.cleaned_data['Select_Invariant_conversion_format'] # Which form to convert to
      grConvertToFormats = form.cleaned_data['Select_Graph_conversion_format']
      dataReturn = form.cleaned_data['Select_output_type']

      for fileFormat in invConvertToFormats:
        if fileFormat == '.mat':
          convertTo.convertLCCNpyToMat(request.session['lccfn'])
          convertTo.convertSVDNpyToMat(request.session['SVDfn'])

        # Conversion of all files
        for inv in request.session['invariant_fns'].keys():
          if isinstance(request.session['invariant_fns'][inv], list): # Case of eigs
            for fn in request.session['invariant_fns'][inv]:
              convertTo.convertAndSave(fn, fileFormat, getDirFromFilename(fn), inv)
              # TODO replace getDirFromFilename with os.path.dirname
          else: # case of all other invariants
            convertTo.convertAndSave(request.session['invariant_fns'][inv], fileFormat, \
                                getDirFromFilename(request.session['invariant_fns'][inv]) , inv)
            # TODO replace getDirFromFilename with os.path.dirname

      for fileFormat in grConvertToFormats:
        if request.session['graphsize'] == 'big':
          convertTo.convertGraph(request.session['bgGrfn'], fileFormat)
        elif request.session['graphsize'] == 'small':
          convertTo.convertGraph(request.session['smGrfn'], fileFormat)

      if dataReturn == 'vd': # View data directory
        dataUrlTail = request.session['usrDefProjDir']

        # baseurl = request.META['HTTP_HOST']
        # host = request.META['wsgi.url_scheme']
        # rooturl = host + '://' + baseurl # Originally was: 'http://mrbrain.cs.jhu.edu' # Done for http & https

        return HttpResponseRedirect('http://mrbrain.cs.jhu.edu' + dataUrlTail.replace(' ','%20'))

      elif dataReturn == 'dz': #Download all as zip
        return HttpResponseRedirect(get_script_prefix()+'zipoutput')

  else:
    form = DownloadForm()

  return render_to_response('confirmDownload.html',{'downloadForm': form},\
                  context_instance=RequestContext(request))
Пример #5
0
def graphLoadInv(request, webargs=None):
  ''' Form '''
  from glob import glob # Move

  if request.method == 'POST' and not webargs:
    form = GraphUploadForm(request.POST, request.FILES) # instantiating form
    if form.is_valid():

      request.session['graphsize'] = form.cleaned_data['Select_graph_size']
      request.session['graphsize'] = 'small' if not request.session['graphsize'] else request.session['graphsize']

      data = form.files['fileObj'] # get data
      request.session['invariants'] = form.cleaned_data['Select_Invariants_you_want_computed']

      dataDir = os.path.join(settings.MEDIA_ROOT, 'tmp', strftime("projectStamp%a%d%b%Y_%H.%M.%S/", localtime()))
      request.session['graphInvariants'] = os.path.join(dataDir, 'graphInvariants')

      makeDirIfNone([dataDir])

      # We got a zip
      if os.path.splitext(data.name)[1] == '.zip':

        writeBodyToDisk(data.read(), dataDir)
        # Get all graphs in the directory
        graphs = glob(os.path.join(dataDir,'*_fiber.mat'))
        graphs.extend(glob(os.path.join(dataDir,'*_bggr.mat')))
        graphs.extend(glob(os.path.join(dataDir,'*_smgr.mat')))

      else: # View only accepts .mat & zip as regulated by template
        graphs = [os.path.join(dataDir, data.name)]
        saveFileToDisk(data, graphs[0])

      request.session['uploaded_graphs'] = graphs
      request.session['invConvertToFormats'] = form.cleaned_data['Convert_result']
      request.session['dataDir'] = dataDir

      if request.session['graphsize'] == 'big':
        # Launch thread for big graphs & email user
        request.session['email'] = form.cleaned_data['Email']
        sendJobBeginEmail(request.session['email'], request.session['invariants'], genGraph=False)

        thr = threading.Thread(target=asyncInvCompute, args=(request,))
        thr.start()
        #asyncInvCompute(request)

        request.session['success_msg'] = "Your job was successfully launched. You should receive an email when your "
        request.session['success_msg'] += "job begins and another one when it completes. The process may take ~3hrs if you selected to compute all invariants"
        return HttpResponseRedirect(get_script_prefix()+'success')

      else:
        for graph_fn in graphs:
          graph_fn = request.session['smGrfn'] = graph_fn
          lcc_fn = None

          invariant_fns = runInvariants(request.session['invariants'], graph_fn,
                          request.session['graphInvariants'], lcc_fn,
                          request.session['graphsize'])

          print 'Invariants for annoymous project %s complete...' % graph_fn

          invConvertToFormats =  form.cleaned_data['Convert_result']

          # TODO: Make function for this. Duplicate of buildgraph code
          for fileFormat in invConvertToFormats:
            # Conversion of all files
            for inv in invariant_fns.keys():
              if isinstance(invariant_fns[inv], list): # Case of eigs
                for fn in invariant_fns[inv]:
                  convertTo.convertAndSave(fn, fileFormat, os.path.dirname(fn), inv)
              else: # case of all other invariants
                convertTo.convertAndSave(invariant_fns[inv], fileFormat, \
                                    os.path.dirname(invariant_fns[inv]), inv)

      return HttpResponseRedirect("http://mrbrain.cs.jhu.edu"+ dataDir.replace(' ','%20')) # All spaces are replaced with %20 for urls

  elif request.method == 'POST' and webargs:
    if (re.match(re.compile('(b|big)', re.IGNORECASE), webargs.split('/')[0])):
      request.session['graphsize'] = 'big'
    elif (re.match(re.compile('(s|small)', re.IGNORECASE), webargs.split('/')[0])):
       request.session['graphsize'] = 'small'
    else:
      return django.http.HttpResponseBadRequest("The graph size is required as a web argument")

    dataDir = os.path.join(settings.MEDIA_ROOT, 'tmp', strftime("projectStamp%a%d%b%Y_%H.%M.%S/", localtime()))
    makeDirIfNone([dataDir])

    uploadedZip = writeBodyToDisk(request.body, dataDir)[0]

    zipper.unzip(uploadedZip, dataDir) # Unzip the zip
    os.remove(uploadedZip) # Delete the zip)

    request.session['invariants'] = webargs.split('/')[1].split(',')

    graphs = glob(os.path.join(dataDir,'*_fiber.mat'))
    graphs.extend(glob(os.path.join(dataDir,'*_bggr.mat')))
    graphs.extend(glob(os.path.join(dataDir,'*_smgr.mat')))

    request.session['graphInvariants'] = os.path.join(dataDir, 'graphInvariants')

    for graph_fn in graphs:
      if request.session['graphsize'] == 'big':
        request.session['bgGrfn'] = graph_fn
        lcc_fn = graph_fn.split('_')[0] + '_concomp.mat'

      elif request.session['graphsize'] == 'small':
        request.session['smGrfn'] = graph_fn
        lcc_fn = None

      runInvariants(request.session['invariants'], graph_fn,
                        request.session['graphInvariants'], lcc_fn,
                        request.session['graphsize'])
      print 'Invariants for annoymous project %s complete...' % graph_fn

    # request.session.clear()
    dwnldLoc = "http://mrbrain.cs.jhu.edu"+ dataDir.replace(' ','%20')
    return HttpResponse("View Data at: " + dwnldLoc)

  else:
    form = GraphUploadForm() # An empty, unbound form

  # Render the form
  return render_to_response(
      'graphupload.html',
      {'graphUploadForm': form},
      context_instance=RequestContext(request) # Some failure to input data & returns a key signaling what is requested
  )