diff options
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 |
commit | fd90c3bfc1b06a807f5e3e9e3cddec1689ac378e (patch) | |
tree | b2d62c0689f9f98e408fe1a1b6050c596c2c7d0e /ishtar_common | |
parent | afd7c90db8139ddbc7c750dc926b6bb363c7dfc9 (diff) | |
download | Ishtar-fd90c3bfc1b06a807f5e3e9e3cddec1689ac378e.tar.bz2 Ishtar-fd90c3bfc1b06a807f5e3e9e3cddec1689ac378e.zip |
Imports: source file can now be zipped
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/models.py | 26 |
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): |