summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_operations/tests.py21
-rw-r--r--ishtar_common/data_importer.py84
-rw-r--r--ishtar_common/fixtures/test_towns.json26
3 files changed, 88 insertions, 43 deletions
diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py
index 9111c9ffe..9807e1b87 100644
--- a/archaeological_operations/tests.py
+++ b/archaeological_operations/tests.py
@@ -44,7 +44,7 @@ class ImportOperationTest(TestCase):
settings.ROOT_PATH +
'../ishtar_common/fixtures/initial_data-fr.json',
settings.ROOT_PATH +
- '../ishtar_common/fixtures/initial_towns-fr.json',
+ '../ishtar_common/fixtures/test_towns.json',
settings.ROOT_PATH +
'../ishtar_common/fixtures/initial_importtypes-fr.json',
settings.ROOT_PATH +
@@ -80,14 +80,25 @@ class ImportOperationTest(TestCase):
# operation_type value
self.assertTrue(current_ope_nb == first_ope_nb)
- # doing manualy the connection assuming that the last 'operation_type'
- # target is the one we need
+ # doing manualy connections
tg = TargetKey.objects.filter(target__target='operation_type'
).order_by('-pk').all()[0]
tg.value = models.OperationType.objects.get(txt_idx='prog_excavation').pk
tg.is_set = True
tg.save()
+ target = TargetKey.objects.get(key='gallo-romain')
+ gallo = models.Period.objects.get(txt_idx='gallo-roman')
+ target.value = gallo.pk
+ target.is_set = True
+ target.save()
+
+ target = TargetKey.objects.get(key='age-du-fer')
+ iron = models.Period.objects.get(txt_idx='iron_age')
+ target.value = iron.pk
+ target.is_set = True
+ target.save()
+
impt.importation()
# a new operation has now been imported
current_ope_nb = models.Operation.objects.count()
@@ -96,6 +107,10 @@ class ImportOperationTest(TestCase):
last_ope = models.Operation.objects.order_by('-pk').all()[0]
self.assertTrue(last_ope.code_patriarche == 4000)
self.assertTrue(last_ope.operation_type.txt_idx == 'prog_excavation')
+ self.assertEqual(last_ope.periods.count(), 2)
+ periods = last_ope.periods.all()
+ self.assertTrue(iron in periods and gallo in periods)
+
# a second importation will be not possible: no two same patriarche code
impt.importation()
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index 0ec579b4f..19382c4aa 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -837,51 +837,55 @@ class Importer(object):
field_object, model, direct, m2m = \
cls._meta.get_field_by_name(attribute)
if m2m:
- val = data.pop(attribute)
+ many_values = data.pop(attribute)
if hasattr(field_object, 'rel'):
model = field_object.rel.to
elif hasattr(field_object, 'to'):
model = field_object.to
- if val.__class__ == model:
- m2ms.append((attribute, val))
- elif val.__class__ != model and type(val) == dict:
- vals = []
-
- # contruct many dict for each values
- default_dict = {}
- ## init with simple values that will be duplicated
- for key in val.keys():
- if type(val[key]) not in (list, tuple):
- default_dict[key] = val[key]
- ## manage multiple values
- for key in val.keys():
- if type(val[key]) in (list, tuple):
- for idx, v in enumerate(val[key]):
- if len(vals) <= idx:
- vals.append(default_dict.copy())
- vals[idx][key] = v
-
- # check that m2m are not empty
- notempty = False
- for dct in vals:
- for k in dct:
- if dct[k] not in ("", None):
- notempty = True
- break
- if not notempty:
- continue
-
- for v in vals:
- v['defaults'] = v.get('defaults', {})
- if 'history_modifier' in \
- model._meta.get_all_field_names():
- v['defaults']['history_modifier'] = \
+ if type(many_values) not in (list, tuple):
+ many_values = [many_values]
+ for val in many_values:
+ if val.__class__ == model:
+ m2ms.append((attribute, val))
+ elif val.__class__ != model and type(val) == dict:
+ vals = []
+
+ # contruct many dict for each values
+ default_dict = {}
+ ## init with simple values that will be duplicated
+ for key in val.keys():
+ if type(val[key]) not in (list, tuple):
+ default_dict[key] = val[key]
+ ## manage multiple values
+ for key in val.keys():
+ if type(val[key]) in (list, tuple):
+ for idx, v in enumerate(val[key]):
+ if len(vals) <= idx:
+ vals.append(default_dict.copy())
+ vals[idx][key] = v
+
+ # check that m2m are not empty
+ notempty = False
+ for dct in vals:
+ for k in dct:
+ if dct[k] not in ("", None):
+ notempty = True
+ break
+ if not notempty:
+ continue
+
+ for v in vals:
+ v['defaults'] = v.get('defaults', {})
+ if 'history_modifier' in \
+ model._meta.get_all_field_names():
+ v['defaults']['history_modifier'] = \
self.history_modifier
- v, created = model.objects.get_or_create(**v)
- if self.import_instance \
- and hasattr(v, 'imports'):
- v.imports.add(self.import_instance)
- m2ms.append((attribute, v))
+ v, created = model.objects.get_or_create(
+ **v)
+ if self.import_instance \
+ and hasattr(v, 'imports'):
+ v.imports.add(self.import_instance)
+ m2ms.append((attribute, v))
elif hasattr(field_object, 'rel') and field_object.rel and \
type(data[attribute]) == dict:
c_path.append(attribute)
diff --git a/ishtar_common/fixtures/test_towns.json b/ishtar_common/fixtures/test_towns.json
new file mode 100644
index 000000000..a88ca6476
--- /dev/null
+++ b/ishtar_common/fixtures/test_towns.json
@@ -0,0 +1,26 @@
+[
+ {
+ "pk": 20816,
+ "model": "ishtar_common.town",
+ "fields": {
+ "departement": null,
+ "name": "PARIS-1ER-ARRONDISSEMENT",
+ "center": "POINT (599976.9837326267734170 2429351.2226647692732513)",
+ "surface": 1810000,
+ "canton": null,
+ "numero_insee": "75101"
+ }
+ },
+ {
+ "pk": 23920,
+ "model": "ishtar_common.town",
+ "fields": {
+ "departement": null,
+ "name": "LILLE",
+ "center": "POINT (650348.5204579939600080 2626592.6267738011665642)",
+ "surface": 34990000,
+ "canton": null,
+ "numero_insee": "59350"
+ }
+ }
+]