diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-09-19 11:37:42 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-09-19 11:37:42 +0200 |
commit | 782b857248435767cc4868a472ce27211596614a (patch) | |
tree | 8b0099c79567f3aa32a222a1ecbf6fd17e686b9a /ishtar_common/models.py | |
parent | 37ad2699ac330364895d58a5fcbf4300998f370c (diff) | |
download | Ishtar-782b857248435767cc4868a472ce27211596614a.tar.bz2 Ishtar-782b857248435767cc4868a472ce27211596614a.zip |
Importers: fix user target key management (refs #3725)
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index a4fe5af7f..53d5c85ac 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -717,33 +717,43 @@ class GeneralType(Cached, models.Model): self.generate_key(force=True) return obj - def add_key(self, key, force=False, importer=None): + def add_key(self, key, force=False, importer=None, group=None, + user=None): content_type = ContentType.objects.get_for_model(self.__class__) if not importer and not force and ItemKey.objects.filter( key=key, content_type=content_type).count(): return + filtr = {'key': key, 'content_type': content_type} + if group: + filtr['group'] = group + elif user: + filtr['user'] = user + else: + filtr['importer'] = importer if force: - 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, - importer=importer - ) + ItemKey.objects.filter(**filtr).exclude(object_id=self.pk).delete() + filtr['object_id'] = self.pk + ItemKey.objects.get_or_create(**filtr) def generate_key(self, force=False): for key in (slugify(self.label), self.txt_idx): self.add_key(key) - def get_keys(self, importer_id=None): + def get_keys(self, importer): keys = [self.txt_idx] content_type = ContentType.objects.get_for_model(self.__class__) - 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) + base_q = Q(content_type=content_type, object_id=self.pk) + subquery = Q(importer__isnull=True, user__isnull=True, + group__isnull=True) + subquery |= Q(user__isnull=True, group__isnull=True, + importer=importer) + if importer.user: + subquery |= Q(user=importer.user, group__isnull=True, + importer=importer) + if importer.associated_group: + subquery |= Q(user__isnull=True, group=importer.associated_group, + importer=importer) + q = ItemKey.objects.filter(base_q & subquery) for ik in q.exclude(key=self.txt_idx).all(): keys.append(ik.key) return keys @@ -763,6 +773,8 @@ class ItemKey(models.Model): importer = models.ForeignKey( Import, null=True, blank=True, help_text=_(u"Specific key to an import")) + user = models.ForeignKey('IshtarUser', blank=True, null=True) + group = models.ForeignKey(TargetKeyGroup, blank=True, null=True) def __unicode__(self): return self.key |