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)
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)
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)