summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-11-06 18:38:30 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-11-06 18:38:30 +0100
commit9ab03b9fd3f0d9804d6d753d09e4358c6ea9d16a (patch)
tree98e6023a2562efb9d8da113d93940b76e7870483
parent305f2770421e165776b1ac1f92c69c474fbe918f (diff)
downloadIshtar-9ab03b9fd3f0d9804d6d753d09e4358c6ea9d16a.tar.bz2
Ishtar-9ab03b9fd3f0d9804d6d753d09e4358c6ea9d16a.zip
Fix import of new JSON fields (refs #4292)
-rw-r--r--archaeological_operations/tests.py20
-rw-r--r--archaeological_operations/tests/operations-with-json-fields.csv6
-rw-r--r--ishtar_common/data_importer.py8
3 files changed, 28 insertions, 6 deletions
diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py
index 02635a05c..4edf62e22 100644
--- a/archaeological_operations/tests.py
+++ b/archaeological_operations/tests.py
@@ -466,7 +466,7 @@ class ImportOperationTest(ImportTest, TestCase):
col_number=11)
formater_type = FormaterType.objects.get(
formater_type='IntegerFormater')
- ImportTarget.objects.create(
+ it = ImportTarget.objects.create(
column=col, target='data__autre_refs__arbitraire',
formater_type=formater_type)
impt = form.save(self.ishtar_user)
@@ -478,6 +478,24 @@ class ImportOperationTest(ImportTest, TestCase):
ope2 = models.Operation.objects.get(code_patriarche='4201')
self.assertEqual(ope2.data, {u'autre_refs': {u'arbitraire': 456}})
+ # #4292: Import of new JSON fields erase all precedent JSON fields
+ it.delete()
+ col2 = ImporterColumn.objects.create(importer_type=importer,
+ col_number=12)
+ ImportTarget.objects.create(
+ column=col2, target='data__autre',
+ formater_type=formater_type)
+ impt = form.save(self.ishtar_user)
+ impt.initialize()
+ self.init_ope_targetkey(imp=impt)
+ impt.importation()
+ ope1 = models.Operation.objects.get(code_patriarche='4200')
+ self.assertEqual(ope1.data, {u'autre_refs': {u'arbitraire': 789},
+ u"autre": 666})
+ ope2 = models.Operation.objects.get(code_patriarche='4201')
+ self.assertEqual(ope2.data, {u'autre_refs': {u'arbitraire': 456},
+ u"autre": 333})
+
class ImportStepByStepTest(ImportTest, TestCase):
fixtures = OPERATION_TOWNS_FIXTURES
diff --git a/archaeological_operations/tests/operations-with-json-fields.csv b/archaeological_operations/tests/operations-with-json-fields.csv
index 015497b4c..128bb00fd 100644
--- a/archaeological_operations/tests/operations-with-json-fields.csv
+++ b/archaeological_operations/tests/operations-with-json-fields.csv
@@ -1,3 +1,3 @@
-code OA,region,type operation,intitule operation,operateur,responsable operation,date debut terrain,date fin terrain,chronologie generale,identifiant document georeferencement,notice scientifique,numéro arbitraire
-4201,Bourgogne,Fouille programmée,Oppìdum de Paris 2,L'opérateur,,2000/01/31,2002/12/31,Age du Fer,,456
-4200,Bourgogne,Fouille programmée,Oppìdum de Paris,L'opérateur,Jean Sui-Resp'on Sablé,2000/01/22,2002/12/31,Age du Fer & Gallo-Romain & Néolithik & Moderne,,789
+code OA,region,type operation,intitule operation,operateur,responsable operation,date debut terrain,date fin terrain,chronologie generale,identifiant document georeferencement,notice scientifique,numéro arbitraire,autre
+4201,Bourgogne,Fouille programmée,Oppìdum de Paris 2,L'opérateur,,2000/01/31,2002/12/31,Age du Fer,,456,333
+4200,Bourgogne,Fouille programmée,Oppìdum de Paris,L'opérateur,Jean Sui-Resp'on Sablé,2000/01/22,2002/12/31,Age du Fer & Gallo-Romain & Néolithik & Moderne,,789,666
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index af8cc461e..5df845571 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -35,7 +35,7 @@ from django.db.models import Q
from django.template.defaultfilters import slugify
from django.utils.translation import ugettext_lazy as _
-from ishtar_common.utils import get_all_field_names
+from ishtar_common.utils import get_all_field_names, update_data
NEW_LINE_BREAK = '#####@@@#####'
@@ -1774,7 +1774,11 @@ class Importer(object):
new_val = dct['defaults'][k]
if new_val is None or new_val == '':
continue
- updated_dct[k] = new_val
+ if k == 'data':
+ updated_dct[k] = update_data(obj.data,
+ new_val)
+ else:
+ updated_dct[k] = new_val
if updated_dct:
if self.simulate:
self.updated_objects[-1][-1] = updated_dct