def obj_create(self, bundle, request=None, **kwargs): """ Set creator and update full text. """ # Because users may have authenticated via headers the request.user may # not be a full User instance. To be sure, we fetch one. user = UserProxy.objects.get(id=request.user.id) bundle = super(DatasetResource, self).obj_create(bundle, request=request, creator=user, **kwargs) if "columns" in request.GET: columns = request.GET["columns"].split(",") else: columns = None if "typed_columns" in request.GET: if not columns: raise BadRequest(_('The "columns" argument must also be specified when specifying "typed_columns".')) typed_columns = [True if c.lower() == "true" else False for c in request.GET["typed_columns"].split(",")] if len(typed_columns) != len(columns): raise BadRequest( _( 'The "typed_columns" argument must be a comma-separated list of True/False values with the same number of values as the "columns" argument.' ) ) else: typed_columns = None if "column_types" in request.GET: if not columns: raise BadRequest(_('The "columns" argument must also be specified when specifying "column_types".')) column_types = [None if c.lower() == "" else c.lower() for c in request.GET["column_types"].split(",")] if len(column_types) != len(columns): raise BadRequest( _( 'The "column_types" argument must be a comma-separated list of types with the same number of values as the "columns" argument.' ) ) else: column_types = None if columns: bundle.obj.column_schema = make_column_schema(columns, typed_columns, column_types) bundle.obj.save() # After ALL changes have been made to the object and its relations, update its full text in Solr. bundle.obj.update_full_text() return bundle
def import_data(self, user, upload, external_id_field_index=None): """ Import data into this ``Dataset`` from a given ``DataUpload``. """ self.lock() try: if upload.imported: raise DataImportError( _('This file has already been imported.')) task_type = get_import_task_type_for_upload(upload) if not task_type: # This is normally caught on the client. raise DataImportError( _('This file type is not supported for data import.')) if self.column_schema: # This is normally caught on the client. if upload.columns != [c['name'] for c in self.column_schema]: raise DataImportError( _('The columns in this file do not match those in the dataset.' )) else: self.column_schema = make_column_schema( upload.columns, types=upload.guessed_types) if self.sample_data is None: self.sample_data = upload.sample_data # If this is the first import and the API hasn't been used, save that information if self.initial_upload is None and self.row_count is None: self.initial_upload = upload self.current_task = TaskStatus.objects.create( task_name=task_type.name, task_description=_('Import data from %(filename)s into %(slug)s.') \ % {'filename': upload.filename, 'slug': self.slug}, creator=user ) self.save() task_type.apply_async( args=[self.slug, upload.id], kwargs={'external_id_field_index': external_id_field_index}, task_id=self.current_task.id) except: self.unlock() raise
def import_data(self, user, upload, external_id_field_index=None, schema_overrides = {}): """ Import data into this ``Dataset`` from a given ``DataUpload``. """ self.lock() try: if upload.imported: raise DataImportError(_('This file has already been imported.')) task_type = get_import_task_type_for_upload(upload) if not task_type: # This is normally caught on the client. raise DataImportError(_('This file type is not supported for data import.')) if self.column_schema: # This is normally caught on the client. if upload.columns != [c['name'] for c in self.column_schema]: raise DataImportError(_('The columns in this file do not match those in the dataset.')) else: self.column_schema = make_column_schema(upload.columns, types=upload.guessed_types, overrides=schema_overrides) if self.sample_data is None: self.sample_data = upload.sample_data # If this is the first import and the API hasn't been used, save that information if self.initial_upload is None and self.row_count is None: self.initial_upload = upload self.current_task = TaskStatus.objects.create( task_name=task_type.name, task_description=_('Import data from %(filename)s into %(slug)s.') \ % {'filename': upload.filename, 'slug': self.slug}, creator=user ) self.save() task_type.apply_async( args=[self.slug, upload.id], kwargs={ 'external_id_field_index': external_id_field_index }, task_id=self.current_task.id ) except: self.unlock() raise
def obj_create(self, bundle, request=None, **kwargs): """ Set creator and update full text. """ bundle = super(DatasetResource, self).obj_create(bundle, request=request, creator=request.user, **kwargs) if 'columns' in request.GET: columns = request.GET['columns'].split(',') else: columns = None if 'typed_columns' in request.GET: if not columns: raise BadRequest('The "columns" argument must also be specified when specifying "typed_columns".') typed_columns = [True if c.lower() == 'true' else False for c in request.GET['typed_columns'].split(',')] if len(typed_columns) != len(columns): raise BadRequest('The "typed_columns" argument must be a comma-separated list of True/False values with the same number of values as the "columns" argument.') else: typed_columns = None if 'column_types' in request.GET: if not columns: raise BadRequest('The "columns" argument must also be specified when specifying "column_types".') column_types = [None if c.lower() == '' else c.lower() for c in request.GET['column_types'].split(',')] if len(column_types) != len(columns): raise BadRequest('The "column_types" argument must be a comma-separated list of types with the same number of values as the "columns" argument.') else: column_types = None if columns: bundle.obj.column_schema = make_column_schema(columns, typed_columns, column_types) bundle.obj.save() # After ALL changes have been made to the object and its relations, update its full text in Solr. bundle.obj.update_full_text() return bundle
def obj_create(self, bundle, request=None, **kwargs): """ Set creator and update full text. """ # Because users may have authenticated via headers the request.user may # not be a full User instance. To be sure, we fetch one. user = UserProxy.objects.get(id=request.user.id) bundle = super(DatasetResource, self).obj_create(bundle, request=request, creator=user, **kwargs) if 'columns' in request.GET: columns = request.GET['columns'].split(',') else: columns = None if 'typed_columns' in request.GET: if not columns: raise BadRequest( 'The "columns" argument must also be specified when specifying "typed_columns".' ) typed_columns = [ True if c.lower() == 'true' else False for c in request.GET['typed_columns'].split(',') ] if len(typed_columns) != len(columns): raise BadRequest( 'The "typed_columns" argument must be a comma-separated list of True/False values with the same number of values as the "columns" argument.' ) else: typed_columns = None if 'column_types' in request.GET: if not columns: raise BadRequest( 'The "columns" argument must also be specified when specifying "column_types".' ) column_types = [ None if c.lower() == '' else c.lower() for c in request.GET['column_types'].split(',') ] if len(column_types) != len(columns): raise BadRequest( 'The "column_types" argument must be a comma-separated list of types with the same number of values as the "columns" argument.' ) else: column_types = None if columns: bundle.obj.column_schema = make_column_schema( columns, typed_columns, column_types) bundle.obj.save() # After ALL changes have been made to the object and its relations, update its full text in Solr. bundle.obj.update_full_text() return bundle