def handle(self, *args, **options): """calls the parsing and insertion functions""" required = ['username', 'title', 'file_name', 'source_column_index', 'data_file_column'] for arg in required: if not options[arg]: raise CommandError("%s was not provided" % arg) source_columns = \ [x.strip() for x in options['source_column_index'].split(",")] try: with open(options['file_name']) as metadata_file: dataset_uuid = process_metadata_table( username=options['username'], title=options['title'], metadata_file=metadata_file, source_columns=source_columns, data_file_column=options['data_file_column'], auxiliary_file_column=options['auxiliary_file_column'], base_path=options['base_path'], data_file_permanent=options['data_file_permanent'], species_column=options['species_column'], genome_build_column=options['genome_build_column'], annotation_column=options['annotation_column'], slug=options['slug'], is_public=options['is_public']) except IOError as exc: raise CommandError("Could not open file '%s': %s" % options['file_name'], exc) except ValueError as exc: raise CommandError(exc) self.stdout.write("Created dataset with UUID '%s'" % dataset_uuid)
def post(self, request, *args, **kwargs): # get required params try: metadata_file = request.FILES['file'] title = request.POST['title'] data_file_column = request.POST['data_file_column'] except (KeyError, ValueError): error = {'error_message': 'Import failed because required parameters are missing'} return render(request, self.template_name, error) source_column_index = request.POST.getlist('source_column_index') if not source_column_index: error = {'error_message': 'Import failed because no source columns were selected'} return render(request, self.template_name, error) # workaround for breaking change in Angular # https://github.com/angular/angular.js/commit/7fda214c4f65a6a06b25cf5d5aff013a364e9cef source_column_index = [column.replace("string:", "") for column in source_column_index] try: dataset_uuid = process_metadata_table( username=request.user.username, title=title, metadata_file=metadata_file, source_columns=source_column_index, data_file_column=data_file_column, auxiliary_file_column=request.POST.get('aux_file_column', None), base_path=request.POST.get('base_path', ""), data_file_permanent=request.POST.get('data_file_permanent', False), species_column=request.POST.get('species_column', None), genome_build_column=request.POST.get('genome_build_column', None), annotation_column=request.POST.get('annotation_column', None), slug=request.POST.get('slug', None), is_public=request.POST.get('is_public', False)) except ValueError as exc: error = {'error_message': exc} return render(request, self.template_name, error) return HttpResponseRedirect( reverse(self.success_view_name, args=(dataset_uuid,)))