diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-03-27 16:17:07 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-04-24 19:41:37 +0200 |
commit | f8ce8229c995cfe891927a368d35dc74f7c84d35 (patch) | |
tree | ec59521a9c454faef7bf4af91dc13ca4938596fd /ishtar_common | |
parent | 68c7adede80eeced7adac9423680fa1abe2c9ff9 (diff) | |
download | Ishtar-f8ce8229c995cfe891927a368d35dc74f7c84d35.tar.bz2 Ishtar-f8ce8229c995cfe891927a368d35dc74f7c84d35.zip |
CSV import: manage semi-colon as separator
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/forms_common.py | 2 | ||||
-rw-r--r-- | ishtar_common/migrations/0089_import_csv_sep.py | 20 | ||||
-rw-r--r-- | ishtar_common/models_imports.py | 16 |
3 files changed, 33 insertions, 5 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index eb15445a4..b5423ca48 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -130,7 +130,7 @@ class NewImportForm(forms.ModelForm): model = models.Import fields = ( 'name', 'importer_type', 'imported_file', 'encoding', - 'imported_images', 'imported_images_link', + 'csv_sep', 'imported_images', 'imported_images_link', 'associated_group', 'conservative_import', 'skip_lines' ) diff --git a/ishtar_common/migrations/0089_import_csv_sep.py b/ishtar_common/migrations/0089_import_csv_sep.py new file mode 100644 index 000000000..c2cd4ac75 --- /dev/null +++ b/ishtar_common/migrations/0089_import_csv_sep.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2019-03-27 16:16 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0088_auto_20190218_1808'), + ] + + operations = [ + migrations.AddField( + model_name='import', + name='csv_sep', + field=models.CharField(choices=[(',', ','), (';', ';')], default=',', help_text='Separator for CSV file. Standard is comma but Microsoft Excel do not follow this standard and use semi-colon.', max_length=1, verbose_name='CSV separator'), + ), + ] diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index 380a582cf..a774cef6d 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -807,6 +807,9 @@ ENCODINGS = [(settings.ENCODING, settings.ENCODING), (settings.ALT_ENCODING, settings.ALT_ENCODING), ('utf-8', 'utf-8')] +CSV_SEPS = ((u",", u","), + (u";", u";"),) + delayed_import = None delayed_check = None @@ -848,6 +851,11 @@ class Import(models.Model): ) encoding = models.CharField(_(u"Encoding"), choices=ENCODINGS, default=u'utf-8', max_length=15) + csv_sep = models.CharField( + _(u"CSV separator"), choices=CSV_SEPS, default=u',', max_length=1, + help_text=_(u"Separator for CSV file. Standard is comma but Microsoft " + u"Excel do not follow this standard and use semi-colon.") + ) skip_lines = models.IntegerField( _(u"Skip lines"), default=1, help_text=_(u"Number of header lines in your file (can be 0).")) @@ -919,7 +927,7 @@ class Import(models.Model): filename = self.imported_file.path with open(filename, 'r') as f: reader = unicodecsv.reader( - f, encoding=self.encoding) + f, encoding=self.encoding, delimiter=str(self.csv_sep)) nb = sum(1 for row in reader) - self.skip_lines self.number_of_line = nb self.save() @@ -1040,9 +1048,9 @@ class Import(models.Model): for encoding in encodings: try: with open(imported_file) as csv_file: - vals = [line - for line in unicodecsv.reader(csv_file, - encoding=encoding)] + vals = [line for line in unicodecsv.reader( + csv_file, encoding=encoding, + delimiter=str(self.csv_sep))] if tmpdir: shutil.rmtree(tmpdir) return vals |