diff options
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/data_importer.py | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index e19c2dcc6..2325df11f 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -26,7 +26,9 @@ import re import sys import zipfile +from django.conf import settings from django.contrib.auth.models import User +from django.core.files import File from django.db import IntegrityError, transaction from django.template.defaultfilters import slugify from django.utils.translation import ugettext_lazy as _ @@ -410,9 +412,17 @@ class FileFormater(Formater): if not value: return zp = zipfile.ZipFile(archive) + value = value.strip().replace(u'\\', u'/') + items = value.replace(u'/', u'_').split(u'.') + filename = settings.MEDIA_ROOT + 'imported/' + \ + u".".join(items[:-1]) + u'.' + items[-1] try: - with zp.open(value.strip().replace(u'\\', u'/')) as z: - return z.read() + with open(filename, 'w') as f: + with zp.open(value) as z: + f.write(z.read()) + f = open(filename, 'r') + my_file = File(f) + return my_file except KeyError: raise ValueError(_(u"\"%(value)s\" is not a valid path for the " u"given archive") % {'value': value}) @@ -1026,6 +1036,8 @@ class Importer(object): dct = create_dict.copy() if '__force_new' in dct: created = dct.pop('__force_new') + if not [k for k in dct if dct[k] is not None]: + return None, created obj = cls.objects.create(**dct) else: dct['defaults'] = defaults @@ -1033,6 +1045,8 @@ class Importer(object): if self.import_instance and hasattr(obj, 'imports') \ and created: obj.imports.add(self.import_instance) + except ValueError as e: + raise IntegrityError(e.message) except IntegrityError as e: raise IntegrityError(e.message) except cls.MultipleObjectsReturned: |