Exemplo n.º 1
0
def sniff_dialect(path, encoding='utf-8'):
    with codecs.open(path, 'r', encoding=encoding) as f:
        try:
            csv_dialect = csvkit_sniff(f.read(settings.PANDA_SNIFFER_MAX_SAMPLE_SIZE))
        except UnicodeDecodeError:
            raise DataSamplingError(_('This CSV file contains characters that are not %s encoded. You need to input the correct encoding in order to import data from this file. Read our documentation about <a href="http://pandaproject.net/docs/determining-the-encoding-of-a-csv-file.html">determining the encoding of a CSV file</a>.') % (encoding))

        if not csv_dialect:
            raise NotSniffableError(_('CSV dialect could not be automatically inferred.')) 

        return {
            'lineterminator': csv_dialect.lineterminator,
            'skipinitialspace': csv_dialect.skipinitialspace,
            'quoting': csv_dialect.quoting,
            'delimiter': csv_dialect.delimiter,
            'quotechar': csv_dialect.quotechar,
            'doublequote': csv_dialect.doublequote
        }
Exemplo n.º 2
0
def sniff_dialect(path, encoding='utf-8'):
    with codecs.open(path, 'r', encoding=encoding) as f:
        try:
            csv_dialect = csvkit_sniff(f.read(settings.PANDA_SNIFFER_MAX_SAMPLE_SIZE))
        except UnicodeDecodeError:
            raise DataSamplingError('This CSV file contains characters that are not %s encoded. You need to input the correct encoding in order to import data from this file.' % (encoding))

        if not csv_dialect:
            raise NotSniffableError('CSV dialect could not be automatically inferred.') 

        return {
            'lineterminator': csv_dialect.lineterminator,
            'skipinitialspace': csv_dialect.skipinitialspace,
            'quoting': csv_dialect.quoting,
            'delimiter': csv_dialect.delimiter,
            'quotechar': csv_dialect.quotechar,
            'doublequote': csv_dialect.doublequote
        }
Exemplo n.º 3
0
def sniff_dialect(path, encoding='utf-8'):
    with codecs.open(path, 'r', encoding=encoding) as f:
        try:
            csv_dialect = csvkit_sniff(
                f.read(settings.PANDA_SNIFFER_MAX_SAMPLE_SIZE))
        except UnicodeDecodeError:
            raise DataSamplingError(
                'This CSV file contains characters that are not %s encoded. You need to input the correct encoding in order to import data from this file. Read our documentation about <a href="http://pandaproject.net/docs/determining-the-encoding-of-a-csv-file.html">determining the encoding of a CSV file</a>.'
                % (encoding))

        if not csv_dialect:
            raise NotSniffableError(
                'CSV dialect could not be automatically inferred.')

        return {
            'lineterminator': csv_dialect.lineterminator,
            'skipinitialspace': csv_dialect.skipinitialspace,
            'quoting': csv_dialect.quoting,
            'delimiter': csv_dialect.delimiter,
            'quotechar': csv_dialect.quotechar,
            'doublequote': csv_dialect.doublequote
        }
Exemplo n.º 4
0
    def add_many(self, request, extra_context=None):
        model = self.model
        opts = model._meta

        context = RequestContext(request, {
            'opts': opts,
            'title': _('Add %s') % force_unicode(opts.verbose_name_plural),
            'media': self.media,
            'error': [],
            'app_label': opts.app_label,
            'email_enabled': config_value('EMAIL', 'EMAIL_ENABLED')
        })
        
        context.update(extra_context or {})

        if request.method == 'POST':
            try:
                user_data = request.POST.get('user-data', '') 

                if not user_data:
                    raise Exception(_('No user data provided.'))

                context['user_data'] = user_data

                try:
                    csv_dialect = csvkit_sniff(user_data)
                except UnicodeDecodeError:
                    raise Exception(_('Only UTF-8 data is supported.'))

                if not csv_dialect:
                    raise Exception(_('Unable to determine the format of the data you entered. Please ensure it is valid CSV data.'))

                reader = CSVKitReader(StringIO(user_data), dialect=csv_dialect)

                emails = 0

                for i, row in enumerate(reader):
                    if len(row) < 4:
                        raise Exception(_('Row %i has less than 4 columns.') % i)
                    if len(row) > 4:
                        raise Exception(_('Row %i has more than 4 columns.') % i)

                    if UserProxy.objects.filter(email=row[0]).count():
                        raise Exception(_('User "%s" already exists')  % row[0])

                    user = UserProxy.objects.create_user(row[0], row[0], row[1] or None)
                    user.is_active = bool(row[1]) # active if a password is provided
                    user.first_name = row[2]
                    user.last_name = row[3]
                    user.save()

                    ApiKey.objects.get_or_create(user=user)

                    if not row[1] and config_value('EMAIL', 'EMAIL_ENABLED'):
                        emails += 1

                self.message_user(request, _('Successfully created %i user(s)') % (i + 1))

                if emails:
                    self.message_user(request, _('Sent %i activation email(s)') % emails)
            except Exception, e:
                context['error'] = e.message
Exemplo n.º 5
0
    def add_many(self, request, extra_context=None):
        model = self.model
        opts = model._meta

        context = RequestContext(
            request, {
                'opts': opts,
                'title': _('Add %s') % force_unicode(opts.verbose_name_plural),
                'media': self.media,
                'error': [],
                'app_label': opts.app_label,
                'email_enabled': config_value('EMAIL', 'EMAIL_ENABLED')
            })

        context.update(extra_context or {})

        if request.method == 'POST':
            try:
                user_data = request.POST.get('user-data', '')

                if not user_data:
                    raise Exception('No user data provided.')

                context['user_data'] = user_data

                try:
                    csv_dialect = csvkit_sniff(user_data)
                except UnicodeDecodeError:
                    raise Exception('Only UTF-8 data is supported.')

                if not csv_dialect:
                    raise Exception(
                        'Unable to determine the format of the data you entered. Please ensure it is valid CSV data.'
                    )

                reader = CSVKitReader(StringIO(user_data), dialect=csv_dialect)

                emails = 0

                for i, row in enumerate(reader):
                    if len(row) < 4:
                        raise Exception('Row %i has less than 4 columns.' % i)
                    if len(row) > 4:
                        raise Exception('Row %i has more than 4 columns.' % i)

                    if UserProxy.objects.filter(email=row[0]).count():
                        raise Exception('User "%s" already exists' % row[0])

                    user = UserProxy.objects.create_user(
                        row[0], row[0], row[1] or None)
                    user.is_active = bool(
                        row[1])  # active if a password is provided
                    user.first_name = row[2]
                    user.last_name = row[3]
                    user.save()

                    ApiKey.objects.get_or_create(user=user)

                    if not row[1] and config_value('EMAIL', 'EMAIL_ENABLED'):
                        emails += 1

                self.message_user(request,
                                  'Successfully created %i user(s)' % (i + 1))

                if emails:
                    self.message_user(request,
                                      'Sent %i activation email(s)' % emails)
            except Exception, e:
                context['error'] = e.message