summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
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
commitf8ce8229c995cfe891927a368d35dc74f7c84d35 (patch)
treeec59521a9c454faef7bf4af91dc13ca4938596fd /ishtar_common
parent68c7adede80eeced7adac9423680fa1abe2c9ff9 (diff)
downloadIshtar-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.py2
-rw-r--r--ishtar_common/migrations/0089_import_csv_sep.py20
-rw-r--r--ishtar_common/models_imports.py16
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