Exemple #1
0
    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,)))