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: | 
