summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2015-10-24 20:03:46 +0200
committerÉtienne Loks <etienne.loks@proxience.com>2015-10-24 20:03:46 +0200
commitfd90c3bfc1b06a807f5e3e9e3cddec1689ac378e (patch)
treeb2d62c0689f9f98e408fe1a1b6050c596c2c7d0e /ishtar_common
parentafd7c90db8139ddbc7c750dc926b6bb363c7dfc9 (diff)
downloadIshtar-fd90c3bfc1b06a807f5e3e9e3cddec1689ac378e.tar.bz2
Ishtar-fd90c3bfc1b06a807f5e3e9e3cddec1689ac378e.zip
Imports: source file can now be zipped
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/models.py26
1 files changed, 24 insertions, 2 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 5384c160a..ddd1e5f9f 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -27,8 +27,10 @@ from PIL import Image
from importlib import import_module
import os
import re
+import shutil
import tempfile
import unicodecsv
+import zipfile
from django.conf import settings
from django.core.cache import cache
@@ -1672,17 +1674,37 @@ class Import(models.Model):
@property
def data_table(self):
- with open(self.imported_file.path) as csv_file:
+ imported_file = self.imported_file.path
+ tmpdir = None
+ if zipfile.is_zipfile(imported_file):
+ z = zipfile.ZipFile(imported_file)
+ filename = None
+ for name in z.namelist():
+ # get first CSV file found
+ if name.endswith('.csv'):
+ filename = name
+ break
+ if not filename:
+ return []
+ tmpdir = tempfile.mkdtemp(prefix='tmp-ishtar-')
+ imported_file = z.extract(filename, tmpdir)
+
+ with open(imported_file) as csv_file:
encodings = [self.encoding]
encodings += [coding for coding, c in ENCODINGS]
for encoding in encodings:
try:
- return [line
+ vals = [line
for line in unicodecsv.reader(csv_file,
encoding=encoding)]
+ if tmpdir:
+ shutil.rmtree(tmpdir)
+ return vals
except UnicodeDecodeError:
if encoding != encodings[-1]:
csv_file.seek(0)
+ if tmpdir:
+ shutil.rmtree(tmpdir)
return []
def initialize(self):