diff options
Diffstat (limited to 'ishtar_common/models.py')
| -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): | 
