summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py40
1 files changed, 24 insertions, 16 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index c1edc13c6..fa2b348bf 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -649,27 +649,34 @@ class GeneralType(Cached, models.Model):
self.generate_key(force=True)
return obj
- def add_key(self, key, force=False):
+ def add_key(self, key, force=False, importer=None):
content_type = ContentType.objects.get_for_model(self.__class__)
- if not force and ItemKey.objects.filter(
+ if not importer and not force and ItemKey.objects.filter(
key=key, content_type=content_type).count():
return
if force:
- ItemKey.objects.filter(key=key, content_type=content_type)\
+ ItemKey.objects.filter(key=key, content_type=content_type,
+ importer=importer)\
.exclude(object_id=self.pk).delete()
- ItemKey.objects.get_or_create(object_id=self.pk, key=key,
- content_type=content_type)
+ ItemKey.objects.get_or_create(
+ object_id=self.pk, key=key, content_type=content_type,
+ importer=importer
+ )
def generate_key(self, force=False):
for key in (slugify(self.label), self.txt_idx):
self.add_key(key)
- def get_keys(self):
+ def get_keys(self, importer_id=None):
keys = [self.txt_idx]
content_type = ContentType.objects.get_for_model(self.__class__)
- for ik in ItemKey.objects.filter(
- content_type=content_type, object_id=self.pk).exclude(
- key=self.txt_idx).all():
+ query = Q(content_type=content_type, object_id=self.pk,
+ importer__isnull=True)
+ if importer_id:
+ query |= Q(content_type=content_type, object_id=self.pk,
+ importer__pk=importer_id)
+ q = ItemKey.objects.filter(query)
+ for ik in q.exclude(key=self.txt_idx).all():
keys.append(ik.key)
return keys
@@ -1783,7 +1790,7 @@ class ImporterType(models.Model):
def __unicode__(self):
return self.name
- def get_importer_class(self):
+ def get_importer_class(self, import_instance=None):
if self.slug and self.slug in IMPORTER_CLASSES:
cls = import_class(IMPORTER_CLASSES[self.slug])
return cls
@@ -1806,7 +1813,8 @@ class ImporterType(models.Model):
force_news = []
concat_str = []
for target in column.targets.all():
- ft = target.formater_type.get_formater_type(target)
+ ft = target.formater_type.get_formater_type(
+ target, import_instance=import_instance)
if not ft:
continue
formater_types.append(ft)
@@ -2107,10 +2115,10 @@ class TargetKey(models.Model):
try:
v = self.target.associated_model.objects.get(
txt_idx=unicode(self.value))
- except (self.target.associated_model.DoesNotExist):
+ except self.target.associated_model.DoesNotExist:
pass
if v:
- v.add_key(self.key)
+ v.add_key(self.key, importer=self.associated_import)
return obj
TARGET_MODELS = [
@@ -2204,10 +2212,10 @@ class FormaterType(models.Model):
if self.format_type in IMPORTER_TYPES_CHOICES:
return IMPORTER_TYPES_CHOICES[self.format_type]
- def get_formater_type(self, target):
+ def get_formater_type(self, target, import_instance=None):
if self.formater_type not in IMPORTER_TYPES_DCT.keys():
return
- kwargs = {'db_target': target}
+ kwargs = {'db_target': target, 'import_instance': import_instance}
if self.many_split:
kwargs['many_split'] = self.many_split
if self.formater_type == 'TypeFormater':
@@ -2346,7 +2354,7 @@ class Import(models.Model):
return IMPORT_STATE_DCT[self.state]
def get_importer_instance(self):
- return self.importer_type.get_importer_class()(
+ return self.importer_type.get_importer_class(import_instance=self)(
skip_lines=self.skip_lines, import_instance=self,
conservative_import=self.conservative_import)