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 }
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 }
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 }
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
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