From 1a4606529b2a67ffc21f299fe218492888a5347d Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Tue, 30 Nov 2021 18:21:47 +0100 Subject: Syndication - fix duplicate on match document - fix many updates from match document --- ishtar_common/models_rest.py | 60 +++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 29 deletions(-) (limited to 'ishtar_common/models_rest.py') diff --git a/ishtar_common/models_rest.py b/ishtar_common/models_rest.py index f2b060bef..40398bca7 100644 --- a/ishtar_common/models_rest.py +++ b/ishtar_common/models_rest.py @@ -187,9 +187,7 @@ class ApiExternalSource(models.Model): if not q.count(): return sm = q.all()[0].search_model - sheet.Name = ( - f"{sm.app_label}.{sm.model}-{model._meta.app_label}.{model.__name__.lower()}" - ) + sheet.Name = f"{sm.app_label}.{sm.model}-{model._meta.app_label}.{model.__name__.lower()}" for col_number, column in enumerate( (_("Distant key"), _("Distant label"), _("Local")) ): @@ -198,8 +196,12 @@ class ApiExternalSource(models.Model): cell.CharWeight = 150 cell.setString(str(column)) + current_list = [] for idx, match in enumerate(q.all()): cell = sheet.getCellByPosition(0, idx + 1) + if match.distant_slug in current_list: + continue + current_list.append(match.distant_slug) cell.setString(match.distant_slug) cell = sheet.getCellByPosition(1, idx + 1) cell.setString(match.distant_label) @@ -252,9 +254,7 @@ class ApiExternalSource(models.Model): errors.append(str(_(f"{sheet_name} is not a correct sheet name."))) continue data = uno.sheet_get_data(sheet) - base_q = ApiKeyMatch.objects.filter( - source=self, search_model=search_model, associated_type=ct - ) + base_q = ApiKeyMatch.objects.filter(source=self, associated_type=ct) model = ct.model_class() for idx_line, line in enumerate(data): if not idx_line: # header @@ -262,36 +262,38 @@ class ApiExternalSource(models.Model): distant_key, distant_label, local_name = line q = base_q.filter(distant_slug=distant_key, distant_label=distant_label) if not q.count(): - errors.append( - str( - _( - f"{ctype} - {distant_key}, {distant_label} not referenced in the database." + if distant_key: + errors.append( + str( + _( + f"{ctype} - {distant_key}, {distant_label} not referenced in the database." + ) ) ) - ) continue if q.filter(local_label=local_name).count(): # no change continue - api_key = q.all()[0] - key_name = "slug" - if hasattr(model, "txt_idx"): - key_name = "txt_idx" - q = model.objects.filter(label=local_name) - if not q.count(): - errors.append( - str( - _( - f"{ctype} - {local_name} do not exists in local database." + for api_key in q.all(): + key_name = "slug" + if hasattr(model, "txt_idx"): + key_name = "txt_idx" + q = model.objects.filter(label=local_name) + if not q.count(): + if local_name: + errors.append( + str( + _( + f"{ctype} - {local_name} do not exists in local database." + ) + ) ) - ) - ) - continue - tpe = q.all()[0] - api_key.local_slug = getattr(tpe, key_name) - api_key.local_label = local_name - api_key.save() - updated += 1 + continue + tpe = q.all()[0] + api_key.local_slug = getattr(tpe, key_name) + api_key.local_label = local_name + api_key.save() + updated += 1 return {"errors": errors, "updated": updated} -- cgit v1.2.3