summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2016-07-14 00:38:00 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2016-07-14 00:39:45 +0200
commite97485cc82e186e9467d0bcbe01e06dcc31b7f18 (patch)
tree5e2c6037eb42a917445766e0525ee2705fe88edf
parentfa93b0528bbaaf79fc78cae32c4e625102ec8eb8 (diff)
downloadIshtar-e97485cc82e186e9467d0bcbe01e06dcc31b7f18.tar.bz2
Ishtar-e97485cc82e186e9467d0bcbe01e06dcc31b7f18.zip
Imports: remove File from uniqueness detection of instances - forced new are created only one time
-rw-r--r--archaeological_finds/tests.py7
-rw-r--r--archaeological_finds/tests/MCC-finds-example.csv2
-rw-r--r--ishtar_common/data_importer.py24
3 files changed, 29 insertions, 4 deletions
diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py
index f75e9cfa3..9102a8c1a 100644
--- a/archaeological_finds/tests.py
+++ b/archaeological_finds/tests.py
@@ -42,6 +42,7 @@ class ImportFindTest(ImportContextRecordTest):
self.testMCCImportContextRecords(test=False)
old_nb = models.BaseFind.objects.count()
+ old_nb_find = models.Find.objects.count()
MCC = ImporterType.objects.get(name=u"MCC - Mobilier")
mcc_file = open(
settings.ROOT_PATH +
@@ -60,15 +61,21 @@ class ImportFindTest(ImportContextRecordTest):
# doing manual connections
ceram = models.MaterialType.objects.get(txt_idx='ceramic').pk
+ glass = models.MaterialType.objects.get(txt_idx='glass').pk
self.setTargetKey('find__material_types', 'terre-cuite', ceram)
+ self.setTargetKey('find__material_types', 'verre', glass)
impt.importation()
if not test:
return
# new finds has now been imported
current_nb = models.BaseFind.objects.count()
self.assertTrue(current_nb == (old_nb + 4))
+ current_nb = models.Find.objects.count()
+ self.assertTrue(current_nb == (old_nb_find + 4))
self.assertEqual(
models.Find.objects.filter(material_types__pk=ceram).count(), 4)
+ self.assertEqual(
+ models.Find.objects.filter(material_types__pk=glass).count(), 1)
class FindInit(ContextRecordInit):
diff --git a/archaeological_finds/tests/MCC-finds-example.csv b/archaeological_finds/tests/MCC-finds-example.csv
index 13340b9aa..f2cb58407 100644
--- a/archaeological_finds/tests/MCC-finds-example.csv
+++ b/archaeological_finds/tests/MCC-finds-example.csv
@@ -2,4 +2,4 @@ code OA,numero INSEE commune,identifiant parcelle,identifiant UE,identifiant mat
4200,75101,XXXX,HC,1,lot,non,,terre cuite,céramique,sfq,1,76,4040,g,,sais pas,,Blah,med,,,,
4200,75101,XXXX,H.-C.,1,lot,non,,terre cuite,céramique,qsdfsqfd,1,56,2280,g,,,,,med,,,,
4200,59350,YY55,US17,1,lot,non,,terre cuite,céramique,sqfdsq,2,44,5210,g,,stable,,,GR,,,,
-4200,59350,YY55,US17,2,lot,non,,terre cuite,céramique,sqfdsq,45,43,1500,g,,,,,,,,,
+4200,59350,YY55,US17,2,lot,non,,terre cuite & verre,céramique,sqfdsq,45,43,1500,g,,,,,,,,,
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index 834ba0ed9..908aa84c4 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -1164,7 +1164,7 @@ class Importer(object):
concat_str=concat_str[idx])
c_row.append(u" ; ".join([v for v in c_values]))
- def get_field(self, cls, attribute, data, m2ms, c_path):
+ def get_field(self, cls, attribute, data, m2ms, c_path, new_created):
field_object, model, direct, m2m = \
cls._meta.get_field_by_name(attribute)
if m2m:
@@ -1229,8 +1229,13 @@ class Importer(object):
for k in v.keys():
if k not in field_names:
continue
- self.get_field(model, k, v, m2m_m2ms, c_c_path)
+ self.get_field(model, k, v, m2m_m2ms, c_c_path,
+ new_created)
if '__force_new' in v:
+ # only one forced creation
+ if attribute in new_created:
+ continue
+ new_created.append(attribute)
created = v.pop('__force_new')
has_values = bool([1 for k in v if v[k]])
if has_values:
@@ -1239,8 +1244,19 @@ class Importer(object):
continue
else:
v['defaults'] = v.get('defaults', {})
+ extra_fields = {}
+ # "File" type is a temp object and can be different
+ # for the same filename - it must be treated
+ # separatly
+ for k in v.keys():
+ if type(v[k]) == File:
+ extra_fields[k] = v.pop(k)
v, created = model.objects.get_or_create(
**v)
+ for k in extra_fields.keys():
+ setattr(v, k, extra_fields[k])
+ if extra_fields:
+ v.save()
for att, objs in m2m_m2ms:
if type(objs) not in (list, tuple):
objs = [objs]
@@ -1273,6 +1289,7 @@ class Importer(object):
c_path = path[:]
# get all related fields
+ new_created = []
for attribute in list(data.keys()):
c_c_path = c_path[:]
if not attribute:
@@ -1281,7 +1298,8 @@ class Importer(object):
if not data[attribute]:
continue
if attribute != '__force_new':
- self.get_field(cls, attribute, data, m2ms, c_c_path)
+ self.get_field(cls, attribute, data, m2ms, c_c_path,
+ new_created)
# filter uncessary default values
create_dict = copy.deepcopy(data)