Esempio n. 1
0
 def post(self, request, *args, **kwargs):
     form = ImportISATabFileForm(request.POST, request.FILES)
     if form.is_valid():
         f = form.cleaned_data['isa_tab_file']
         url = form.cleaned_data['isa_tab_url']
         logger.debug("ISA-Tab URL: %s", url)
         context = RequestContext(request, {'form': form})
         if url:
             # TODO: replace with chain
             # http://docs.celeryproject.org/en/latest/userguide/tasks.html#task-synchronous-subtasks
             u = urlparse(url)
             file_name = u.path.split('/')[-1]
             temp_file_path = os.path.join(get_temp_dir(), file_name)
             try:
                 # TODO: refactor download_file to take file handle instead
                 # of path
                 download_file(url, temp_file_path)
             except DownloadError as e:
                 logger.error("Problem downloading ISA-Tab file. %s", e)
                 error = "Problem downloading ISA-Tab file from: " + url
                 context = RequestContext(request,
                                          {'form': form, 'error': error})
                 return render_to_response(self.template_name,
                                           context_instance=context)
         else:
             temp_file_path = os.path.join(get_temp_dir(), f.name)
             try:
                 handle_uploaded_file(f, temp_file_path)
             except IOError as e:
                 error_msg = "Error writing ISA-Tab file to disk."
                 error_msg += " IOError: %s, file name: %s, error: %s"
                 logger.error(error_msg, e.errno, e.filename, e.strerror)
                 error = "Error writing ISA-Tab file to disk"
                 context = RequestContext(request,
                                          {'form': form, 'error': error})
                 return render_to_response(self.template_name,
                                           context_instance=context)
         logger.debug("Temp file name: '%s'", temp_file_path)
         dataset_uuid = (parse_isatab.delay(
             request.user.username,
             False,
             temp_file_path
         ).get())[0]
         # TODO: exception handling (OSError)
         os.unlink(temp_file_path)
         if dataset_uuid:
             # TODO: redirect to the list of analysis samples for the given
             # UUID
             return HttpResponseRedirect(
                 reverse(self.success_view_name, args=(dataset_uuid,)))
         else:
             error = 'Problem parsing ISA-Tab file'
             context = RequestContext(request,
                                      {'form': form, 'error': error})
             return render_to_response(self.template_name,
                                       context_instance=context)
     else:  # submitted form is not valid
         context = RequestContext(request, {'form': form})
         return render_to_response(self.template_name,
                                   context_instance=context)
Esempio n. 2
0
 def get(self, request, *args, **kwargs):
     # a workaround for automatic ISA archive import after logging in
     try:
         url_from_cookie = request.COOKIES[self.isa_tab_cookie_name]
     except KeyError:
         logger.info("ISA-Tab URL was not provided")
         form = ImportISATabFileForm()
         context = RequestContext(request, {'form': form})
         return render_to_response(self.template_name,
                                   context_instance=context)
     form = ImportISATabFileForm({'isa_tab_url': url_from_cookie})
     if form.is_valid():
         url = form.cleaned_data['isa_tab_url']
     else:
         context = RequestContext(request, {'form': form})
         response = render_to_response(self.template_name,
                                       context_instance=context)
         response.delete_cookie(self.isa_tab_cookie_name)
         return response
     u = urlparse(url)
     file_name = u.path.split('/')[-1]
     temp_file_path = os.path.join(get_temp_dir(), file_name)
     try:
         # TODO: refactor download_file to take file handle instead of path
         download_file(url, temp_file_path)
     except DownloadError as e:
         logger.error("Problem downloading ISA-Tab file. %s", e)
         error = "Problem downloading ISA-Tab file from: '{}'".format(url)
         context = RequestContext(request, {'form': form, 'error': error})
         response = render_to_response(self.template_name,
                                       context_instance=context)
         response.delete_cookie(self.isa_tab_cookie_name)
         return response
     logger.debug("Temp file name: '%s'", temp_file_path)
     dataset_uuid = parse_isatab.delay(request.user.username, False,
                                       temp_file_path).get()[0]
     # TODO: exception handling
     os.unlink(temp_file_path)
     if dataset_uuid:
         # TODO: redirect to the list of analysis samples for the given UUID
         response = HttpResponseRedirect(
             reverse(self.success_view_name, args=(dataset_uuid,)))
         response.delete_cookie(self.isa_tab_cookie_name)
         return response
     else:
         error = "Problem parsing ISA-Tab file"
         context = RequestContext(request, {'form': form, 'error': error})
         response = render_to_response(self.template_name,
                                       context_instance=context)
         response.delete_cookie(self.isa_tab_cookie_name)
         return response
def import_isa_tab(request):
    '''Process imported ISA-Tab file sent via POST request

    '''
    #TODO: change implementation to a class-based view
    #TODO: change from hardcoded URLs to using reverse()
    if request.method == 'POST':
        form = ImportISATabFileForm(request.POST, request.FILES)
        if form.is_valid():
            f = form.cleaned_data['isa_tab_file']
            url = form.cleaned_data['isa_tab_url']
            if url:
                #TODO: replace with chain (http://docs.celeryproject.org/en/latest/userguide/tasks.html#task-synchronous-subtasks)
                u = urlparse(url)
                file_name = u.path.split('/')[-1]
                temp_file_name = os.path.join(get_temp_dir(), file_name)
                try:
                    download_file.delay(url, temp_file_name).get()
                except DownloadError as e:
                    logger.error("Problem downloading ISA-Tab file. %s", e)
                    error = "Problem downloading ISA-Tab file from: " + url
                    context = RequestContext(request, {'form': form, 'error': error})
                    return render_to_response('data_set_manager/import.html', context_instance=context)
            else:
                temp_file_name = os.path.join(get_temp_dir(), f.name)
                try:
                    handle_uploaded_file(f, temp_file_name)
                except IOError as e:
                    logger.error("Error writing ISA-Tab file to disk\nIOError: %s, file name: %s, error: %s",
                                 e.errno, e.filename, e.strerror)
                    error = "Error writing ISA-Tab file to disk"
                    context = RequestContext(request, {'form': form, 'error': error})
                    return render_to_response('data_set_manager/import.html', context_instance=context)
            logger.debug("Temp file name: '%s'", temp_file_name)
            dataset_uuid = parse_isatab.delay(request.user.username, False, temp_file_name).get()
            os.unlink(temp_file_name)
            if dataset_uuid:
                #TODO: redirect to the list of analysis samples for the given UUID
                return HttpResponseRedirect('/data_sets/' + dataset_uuid + '/')
            else:
                error = 'Problem parsing ISA-Tab file'
                context = RequestContext(request, {'form': form, 'error': error})
                return render_to_response('data_set_manager/import.html', context_instance=context)
        else:   # submitted form is not valid
            context = RequestContext(request, {'form': form})
    else:   # this was not a POST request
        form = ImportISATabFileForm()
        context = RequestContext(request, {'form': form})
    return render_to_response('data_set_manager/import.html', context_instance=context)
Esempio n. 4
0
def import_isa_tab(request):
    '''Process imported ISA-Tab file sent via POST request

    '''
    #TODO: change implementation to a class-based view
    #TODO: change from hardcoded URLs to using reverse()
    if request.method == 'POST':
        form = ImportISATabFileForm(request.POST, request.FILES)
        if form.is_valid():
            f = form.cleaned_data['isa_tab_file']
            url = form.cleaned_data['isa_tab_url']
            if url:
                #TODO: replace with chain (http://docs.celeryproject.org/en/latest/userguide/tasks.html#task-synchronous-subtasks)
                u = urlparse(url)
                file_name = u.path.split('/')[-1]
                temp_file_name = os.path.join(get_temp_dir(), file_name)
                try:
                    download_file.delay(url, temp_file_name).get()
                except DownloadError as e:
                    logger.error("Problem downloading ISA-Tab file. %s", e)
                    error = "Problem downloading ISA-Tab file from: " + url
                    context = RequestContext(request, {
                        'form': form,
                        'error': error
                    })
                    return render_to_response('data_set_manager/import.html',
                                              context_instance=context)
            else:
                temp_file_name = os.path.join(get_temp_dir(), f.name)
                try:
                    handle_uploaded_file(f, temp_file_name)
                except IOError as e:
                    logger.error(
                        "Error writing ISA-Tab file to disk\nIOError: %s, file name: %s, error: %s",
                        e.errno, e.filename, e.strerror)
                    error = "Error writing ISA-Tab file to disk"
                    context = RequestContext(request, {
                        'form': form,
                        'error': error
                    })
                    return render_to_response('data_set_manager/import.html',
                                              context_instance=context)
            logger.debug("Temp file name: '%s'", temp_file_name)
            dataset_uuid = parse_isatab.delay(request.user.username, False,
                                              temp_file_name).get()
            os.unlink(temp_file_name)
            if dataset_uuid:
                #TODO: redirect to the list of analysis samples for the given UUID
                return HttpResponseRedirect('/data_sets/' + dataset_uuid + '/')
            else:
                error = 'Problem parsing ISA-Tab file'
                context = RequestContext(request, {
                    'form': form,
                    'error': error
                })
                return render_to_response('data_set_manager/import.html',
                                          context_instance=context)
        else:  # submitted form is not valid
            context = RequestContext(request, {'form': form})
    else:  # this was not a POST request
        form = ImportISATabFileForm()
        context = RequestContext(request, {'form': form})
    return render_to_response('data_set_manager/import.html',
                              context_instance=context)