summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2020-05-07 12:19:11 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2020-05-07 12:20:03 +0200
commiteb0f7d6c72487a9bdaa92f7f80b2231d1d3716f0 (patch)
tree47ceaecb0d5be660c95e8f97d7186cd2fbe69294
parent9d3b66a1ad4cb58def1d76084da58dc0c706cdba (diff)
downloadIshtar-eb0f7d6c72487a9bdaa92f7f80b2231d1d3716f0.tar.bz2
Ishtar-eb0f7d6c72487a9bdaa92f7f80b2231d1d3716f0.zip
Import conf: manage match for data__
-rw-r--r--ishtar_common/data_importer.py13
-rw-r--r--ishtar_common/forms_common.py8
-rw-r--r--ishtar_common/models_imports.py20
3 files changed, 29 insertions, 12 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index b500baa3f..179dfc329 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -373,7 +373,7 @@ class StrChoiceFormater(Formater, ChoiceChecker):
q = self.get_db_target_query(user)
- for target_key in q.all():
+ for target_key in list(q.all()):
key = target_key.key
if not self.strict:
key = slugify(key)
@@ -381,10 +381,13 @@ class StrChoiceFormater(Formater, ChoiceChecker):
continue
v = target_key.value
if self.model and v and type(v) in (int, str):
- try:
- v = self.model.objects.get(txt_idx=v)
- except:
- v = self.model.objects.get(pk=v)
+ q = self.model.objects.filter(txt_idx=v)
+ if not q.count():
+ q = self.model.objects.filter(pk=v)
+ if not q.count():
+ target_key.delete()
+ continue
+ v = q.all()[0]
self.equiv_dict[key] = v
def prepare(self, value):
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index 2df825594..242607732 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -48,6 +48,7 @@ from .forms import FinalForm, FormSet, reverse_lazy, name_validator, \
FormSetWithDeleteSwitches, BSForm, get_data_from_formset, \
file_size_validator, HistorySelect, CustomFormSearch, QAForm, IshtarForm, \
MultiSearchForm, LockForm
+from ishtar_common.data_importer import ImporterError
from ishtar_common.utils import is_downloadable, clean_session_cache, \
max_size_help
@@ -230,7 +231,7 @@ class TargetKeyForm(forms.ModelForm):
self.fields['value'].choices = list(
instance.target.get_choices())
self.fields['value'].choices.insert(
- 1, (self.NULL_VALUE, _(u"Set to NULL")))
+ 1, (self.NULL_VALUE, _("Set to NULL")))
self.fields['key'].required = False
self.fields['target'].required = False
@@ -267,7 +268,10 @@ class TargetKeyForm(forms.ModelForm):
return self.cleaned_data['key']
def save(self, commit=True):
- super(TargetKeyForm, self).save(commit)
+ try:
+ super(TargetKeyForm, self).save(commit)
+ except ImporterError:
+ return
if not self.cleaned_data.get('value') or not self.user:
return
if self.cleaned_data['value'] == self.NULL_VALUE:
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py
index b4749fc2c..d64b8441c 100644
--- a/ishtar_common/models_imports.py
+++ b/ishtar_common/models_imports.py
@@ -271,7 +271,7 @@ def get_associated_model(parent_model, keys):
OBJECT_CLS = parent_model
fields = get_model_fields(OBJECT_CLS)
for idx, item in enumerate(keys):
- if item in (u"-", u""):
+ if item in ("-", ""):
model = None
elif not idx:
if item not in fields:
@@ -287,6 +287,14 @@ def get_associated_model(parent_model, keys):
if type(field) == ModelBase:
model = field
else:
+ if not model:
+ raise ImporterError(
+ str(_("Importer configuration error: "
+ "\"{}\" is not available for \"{}\"."
+ " Check your default and column "
+ "configuration")).format(
+ "__".join(keys[1:]),
+ OBJECT_CLS.__name__))
return get_associated_model(model, keys[1:])
return model
@@ -576,6 +584,8 @@ class ImportTarget(models.Model):
@property
def associated_model(self):
+ if self.target.startswith("data__"):
+ return
try:
return get_associated_model(
self.column.importer_type.associated_models.klass,
@@ -631,9 +641,9 @@ class TargetKey(models.Model):
(associated_import, associated_user and associated_group are empty).
"""
target = models.ForeignKey(ImportTarget, related_name='keys')
- key = models.TextField(_(u"Key"))
- value = models.TextField(_(u"Value"), blank=True, null=True)
- is_set = models.BooleanField(_(u"Is set"), default=False)
+ key = models.TextField(_("Key"))
+ value = models.TextField(_("Value"), blank=True, null=True)
+ is_set = models.BooleanField(_("Is set"), default=False)
associated_import = models.ForeignKey('Import', blank=True, null=True)
associated_user = models.ForeignKey('IshtarUser', blank=True, null=True)
associated_group = models.ForeignKey(TargetKeyGroup, blank=True, null=True)
@@ -671,10 +681,10 @@ class TargetKey(models.Model):
obj = super(TargetKey, self).save(*args, **kwargs)
if not self.value:
return obj
+ v = None
associated_model = self.target.associated_model
if associated_model and hasattr(self.target.associated_model,
"add_key"):
- v = None
# pk is given
try:
v = self.target.associated_model.objects.get(