Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
    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
Exemple #4
0
    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
Exemple #5
0
    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