From 98b200c630474559eb13e48c173473bab7b3735b Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 18 Oct 2021 12:11:10 +0200 Subject: ID generation: fix custom filters for jinja format --- archaeological_finds/tests.py | 18 ++++++++++++++++++ ishtar_common/utils.py | 24 ++++++++++++------------ 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index d0adc766a..c2979d074 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -958,6 +958,24 @@ class FindTest(FindInit, TestCase): find.save() find = models.Find.objects.get(pk=find.pk) self.assertEqual(find.external_id, "pat-12345-a1-new-label-too-hop") + # jinja 2 + profile.find_external_id = ( + "{{get_first_base_find__context_record__external_id}}-{{label}}-" + "{{label}}" + ) + profile.save() + find.save() + find = models.Find.objects.get(pk=find.pk) + self.assertEqual(find.external_id, "PAT-12345-A1-new-label-too-hop-hop") + # jinja 2 + custom filters + profile.find_external_id = ( + "{{get_first_base_find__context_record__external_id}}-{{label}}-" + "{{label}}||lower||deduplicate" + ) + profile.save() + find.save() + find = models.Find.objects.get(pk=find.pk) + self.assertEqual(find.external_id, "pat-12345-a1-new-label-too-hop") def testIndex(self): profile = get_current_profile() diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index ed183e4d1..e6283ae5e 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -2002,18 +2002,18 @@ def get_generated_id(key, item): for key in set(key_list): _update_gen_id_dct(item, dct, key) tpl = Template(formula) - return tpl.render(dct) - - for fkey in PARSE_FORMULA.findall(formula): - filtered = fkey.split("|") - initial_key = fkey[:] - fkey = filtered[0] - filters = [] - for filtr in filtered[1:]: - if filtr in FORMULA_FILTERS: - filters.append(FORMULA_FILTERS[filtr]) - _update_gen_id_dct(item, dct, initial_key, fkey, filters=filters) - values = formula.format(**dct).split("||") + values = tpl.render(dct).split("||") + else: + for fkey in PARSE_FORMULA.findall(formula): + filtered = fkey.split("|") + initial_key = fkey[:] + fkey = filtered[0] + filters = [] + for filtr in filtered[1:]: + if filtr in FORMULA_FILTERS: + filters.append(FORMULA_FILTERS[filtr]) + _update_gen_id_dct(item, dct, initial_key, fkey, filters=filters) + values = formula.format(**dct).split("||") value = values[0] for filtr in values[1:]: if filtr not in FORMULA_FILTERS: -- cgit v1.2.3