diff options
| 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 | 
| commit | f5a48939e9d7484600f9f1d9df32f1cdc43866d0 (patch) | |
| tree | 5e2c6037eb42a917445766e0525ee2705fe88edf | |
| parent | 6b2a418e48e838b67a6a4ef3559b5c3ab2936272 (diff) | |
| download | Ishtar-f5a48939e9d7484600f9f1d9df32f1cdc43866d0.tar.bz2 Ishtar-f5a48939e9d7484600f9f1d9df32f1cdc43866d0.zip  | |
Imports: remove File from uniqueness detection of instances - forced new are created only one time
| -rw-r--r-- | archaeological_finds/tests.py | 7 | ||||
| -rw-r--r-- | archaeological_finds/tests/MCC-finds-example.csv | 2 | ||||
| -rw-r--r-- | ishtar_common/data_importer.py | 24 | 
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)  | 
