summaryrefslogtreecommitdiff
path: root/ishtar_common/data_importer.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/data_importer.py')
-rw-r--r--ishtar_common/data_importer.py35
1 files changed, 19 insertions, 16 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index 194a9a5fa..cef98789e 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -21,7 +21,7 @@ import copy, csv, datetime, logging, re, sys
from tempfile import NamedTemporaryFile
from django.contrib.auth.models import User
-from django.db import DatabaseError, IntegrityError
+from django.db import DatabaseError, IntegrityError, transaction
from django.template.defaultfilters import slugify
from django.utils.translation import ugettext_lazy as _
@@ -275,12 +275,16 @@ class StrChoiceFormater(Formater):
else:
self.equiv_dict[value] = None
if output == 'db' and self.db_target:
- for missing in missings:
- try:
- q = {'target':self.db_target, 'value':missing}
- models.TargetKey.objects.create(**q)
- except IntegrityError:
- pass
+ from ishtar_common.models import TargetKey
+ for missing in self.missings:
+ q = {'target':self.db_target, 'value':missing}
+ if TargetKey.objects.filter(**q).count():
+ continue
+ with transaction.commit_on_success():
+ try:
+ TargetKey.objects.create(**q)
+ except IntegrityError:
+ pass
def new(self, value):
return
@@ -402,7 +406,8 @@ class StrToBoolean(Formater):
else:
self.dct[value] = None
if output == 'db' and self.db_target:
- for missing in missings:
+ from ishtar_common.models import TargetKey
+ for missing in self.missings:
try:
q = {'target':self.db_target, 'value':missing}
models.TargetKey.objects.create(**q)
@@ -439,7 +444,7 @@ class Importer(object):
def __init__(self, skip_lines=0, reference_header=None,
check_col_num=False, test=False, check_validity=True,
history_modifier=None, output='silent',
- importer_instance=None):
+ import_instance=None):
"""
* skip_line must be set if the data provided has got headers lines.
* a reference_header can be provided to perform a data compliance
@@ -458,14 +463,13 @@ class Importer(object):
self.check_col_num = check_col_num
self.check_validity = check_validity
self.line_format = copy.copy(self.LINE_FORMAT)
- self.importer_instance = importer_instance
- self._initialized = False
+ self.import_instance = import_instance
self._defaults = self.DEFAULTS.copy()
self.history_modifier = history_modifier
self.output = output
if not self.history_modifier:
- if self.importer_instance:
- self.history_modifier = self.importer_instance.user
+ if self.import_instance:
+ self.history_modifier = self.import_instance.user
else:
# import made by the CLI: get the first admin
self.history_modifier = User.objects.filter(
@@ -494,11 +498,10 @@ class Importer(object):
for idx, formater in enumerate(self.line_format):
if formater:
formater.init(vals[idx], output)
- self._initialized = True
- def importation(self, table):
+ def importation(self, table, initialize=True):
self.validity_file = None
- if not self._initialized:
+ if initialize:
self.initialize(table, self.output)
if self.check_validity:
with NamedTemporaryFile(delete=False) as validity_file: