From 3c20f955b08f8082ec624c8c12dc991e5069d420 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 7 May 2020 15:36:12 +0200 Subject: Imports: use the first formater for duplicates fields --- archaeological_finds/models_finds.py | 30 +++++++++++++++++------------- ishtar_common/data_importer.py | 24 +++++++++++++----------- ishtar_common/models.py | 4 ++-- ishtar_common/models_imports.py | 8 ++++---- 4 files changed, 36 insertions(+), 30 deletions(-) diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index b0c5a0332..68a7bfe51 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -408,11 +408,11 @@ class BaseFind(BulkUpdatedItem, BaseHistorizedItem, GeoItem, OwnPerms, :return: True if index has been changed. """ profile = get_current_profile() - if profile.find_index == u'O': + if profile.find_index == 'O': operation = self.context_record.operation q = BaseFind.objects \ .filter(context_record__operation=operation) - elif profile.find_index == u'CR': + elif profile.find_index == 'CR': cr = self.context_record q = BaseFind.objects \ .filter(context_record=cr) @@ -438,7 +438,7 @@ class BaseFind(BulkUpdatedItem, BaseHistorizedItem, GeoItem, OwnPerms, elif ope.year and ope.operation_code: c_id.append( profile.default_operation_prefix + - str(ope.year or '') + u"-" + + str(ope.year or '') + "-" + str(ope.operation_code or '')) else: c_id.append('') @@ -1732,19 +1732,19 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, @property def name(self): - return u" - ".join([base_find.name + return " - ".join([base_find.name for base_find in self.base_finds.all()]) @property def full_label(self): - lbl = u" - ".join([getattr(self, attr) + lbl = " - ".join([getattr(self, attr) for attr in ( 'label', 'denomination', 'administrative_index') if getattr(self, attr)]) - base = u" - ".join([base_find.complete_id() + base = " - ".join([base_find.complete_id() for base_find in self.base_finds.all()]) if base: - lbl += u' ({})'.format(base) + lbl += ' ({})'.format(base) return lbl def get_first_base_find(self): @@ -1811,10 +1811,10 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, if self.id: bf = self.get_first_base_find() if not bf: - return u"detached/{}".format(self.SLUG) + return "detached/{}".format(self.SLUG) ope = bf.context_record.operation - find_idx = u'{:0' + str(settings.ISHTAR_FINDS_INDEX_ZERO_LEN) + 'd}' - return (u"{}/{}/" + find_idx).format( + find_idx = '{:0' + str(settings.ISHTAR_FINDS_INDEX_ZERO_LEN) + 'd}' + return ("{}/{}/" + find_idx).format( ope._get_base_image_path(), self.SLUG, self.index) @property @@ -1831,7 +1831,7 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, self.index) def context_records_lbl(self): - return u" - ".join( + return " - ".join( [bf.context_record.cached_label for bf in self.base_finds.all()] ) context_records_lbl.short_description = _(u"Context record") @@ -1931,7 +1931,9 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, return bf.context_record.operation.get_town_label() @classmethod - def get_periods(cls, slice='year', fltr={}): + def get_periods(cls, slice='year', fltr=None): + if not fltr: + fltr = {} q = cls.objects if fltr: q = q.filter(**fltr) @@ -1949,7 +1951,9 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, return list(years) @classmethod - def get_by_year(cls, year, fltr={}): + def get_by_year(cls, year, fltr=None): + if not fltr: + fltr = {} q = cls.objects if fltr: q = q.filter(**fltr) diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index 179dfc329..847134085 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -1387,17 +1387,19 @@ class Importer(object): force_news = [force_new] concats = formater.concat concat_str = [concat_str] - for duplicate_field in formater.duplicate_fields: - if type(duplicate_field[0]) in (list, tuple): - duplicate_field, force_new, concat, conc_str = \ - duplicate_field[idx_v] - else: - duplicate_field, force_new, concat, conc_str = \ - duplicate_field - field_names += [duplicate_field] - force_news += [force_new] - concats += [concat] - concat_str += [conc_str] + if idx_fields == 0: + # duplicate fields are only for the first occurrence + for duplicate_field in formater.duplicate_fields: + if type(duplicate_field[0]) in (list, tuple): + duplicate_field, force_new, concat, conc_str = \ + duplicate_field[0] + else: + duplicate_field, force_new, concat, conc_str = \ + duplicate_field + field_names += [duplicate_field] + force_news += [force_new] + concats += [concat] + concat_str += [conc_str] if formater.through: self._throughs.append((formater, value)) diff --git a/ishtar_common/models.py b/ishtar_common/models.py index b804739ad..d0612d648 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -2706,7 +2706,7 @@ def get_external_id(key, item): formula = getattr(profile, key) dct = {} for fkey in PARSE_FORMULA.findall(formula): - filtered = fkey.split(u'|') + filtered = fkey.split('|') initial_key = fkey[:] fkey = filtered[0] filters = [] @@ -2740,7 +2740,7 @@ def get_external_id(key, item): value = values[0] for filtr in values[1:]: if filtr not in FORMULA_FILTERS: - value += u'||' + filtr + value += '||' + filtr continue value = FORMULA_FILTERS[filtr](value) return value diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index d64b8441c..4170ea1e2 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -206,7 +206,7 @@ class ImporterType(models.Model): force_news = [] concat_str = [] concat = [] - for target in column.targets.all(): + for target in column.targets.order_by("pk").all(): ft = target.formater_type.get_formater_type( target, import_instance=import_instance) if not ft: @@ -444,11 +444,11 @@ class ImporterColumn(models.Model): return self.importer_type.slug, self.col_number def targets_lbl(self): - return u', '.join([target.target for target in self.targets.all()]) + return ', '.join([target.target for target in self.targets.all()]) def duplicate_fields_lbl(self): - return u', '.join([dp.field_name or u"" - for dp in self.duplicate_fields.all()]) + return ', '.join([dp.field_name or "" + for dp in self.duplicate_fields.all()]) class ImporterDuplicateFieldManager(models.Manager): -- cgit v1.2.3