From 53888c24ca9dc156e5ffa0dc66e1bf36a00085a0 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Sat, 22 Oct 2016 09:47:33 +0200 Subject: Improve cached label regeneration when modifying parent items (refs #3341) --- ishtar_common/utils.py | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'ishtar_common/utils.py') diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 60c3ac7ef..82d4f2caa 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -56,10 +56,17 @@ def cached_label_changed(sender, **kwargs): if not kwargs.get('instance'): return instance = kwargs.get('instance') + if hasattr(instance, '_cached_label_checked'): + return + instance._cached_label_checked = True lbl = instance._generate_cached_label() if lbl != instance.cached_label: + instance.skip_history_when_saving = True instance.cached_label = lbl instance.save() + if hasattr(instance, '_get_associated_cached_labels'): + for item in instance._get_associated_cached_labels(): + cached_label_changed(item.__class__, instance=item) SHORTIFY_STR = ugettext(" (...)") -- cgit v1.2.3 From fce7d00537de1b1c7ff85e2c81581241494e7a04 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Sat, 22 Oct 2016 11:10:48 +0200 Subject: Fix random image choice (refs #3274) --- ishtar_common/utils.py | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) (limited to 'ishtar_common/utils.py') diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 82d4f2caa..6c1b70863 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -110,19 +110,22 @@ def get_random_item_image_link(request): from archaeological_finds.models import Find ope_image_nb, cr_image_nb, find_image_nb = 0, 0, 0 + q_ope = Operation.objects.filter( + thumbnail__isnull=False).exclude(thumbnail='') + q_cr = ContextRecord.objects.filter( + thumbnail__isnull=False).exclude(thumbnail='') + q_find = Find.objects.filter( + thumbnail__isnull=False).exclude(thumbnail='') if request.user.has_perm('archaeological_operations.view_operation', Operation): - ope_image_nb = Operation.objects.filter( - thumbnail__isnull=False).count() + ope_image_nb = q_ope.count() if request.user.has_perm( 'archaeological_context_records.view_contextrecord', ContextRecord): - cr_image_nb = ContextRecord.objects.filter( - thumbnail__isnull=False).count() + cr_image_nb = q_cr.count() if request.user.has_perm('archaeological_finds.view_find', Find): - find_image_nb = Find.objects.filter( - thumbnail__isnull=False).count() + find_image_nb = q_find.count() image_total = ope_image_nb + cr_image_nb + find_image_nb if not image_total: @@ -130,15 +133,11 @@ def get_random_item_image_link(request): image_nb = random.randint(0, image_total - 1) if image_nb >= 0 and image_nb < ope_image_nb: - return _get_image_link( - Operation.objects.filter(thumbnail__isnull=False).all()[image_nb]) + return _get_image_link(q_ope.all()[image_nb]) if image_nb >= ope_image_nb and image_nb < (cr_image_nb + ope_image_nb): - return _get_image_link( - ContextRecord.objects.filter(thumbnail__isnull=False).all()[ - image_nb - ope_image_nb]) + return _get_image_link(q_cr.all()[image_nb - ope_image_nb]) if image_nb >= (cr_image_nb + ope_image_nb): - return _get_image_link( - Find.objects.filter(thumbnail__isnull=False).all()[ - image_nb - ope_image_nb - cr_image_nb]) + return _get_image_link(q_find.all()[ + image_nb - ope_image_nb - cr_image_nb]) # should never happen except in case of deletion during the excution return '' -- cgit v1.2.3 From 9be8c9476c6f3cef425f2e1a6e50f67cda525866 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Sat, 22 Oct 2016 11:45:02 +0200 Subject: cached_label: don't prevent to save history in relevant case --- ishtar_common/utils.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'ishtar_common/utils.py') diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 6c1b70863..d72b8b6ba 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -61,11 +61,13 @@ def cached_label_changed(sender, **kwargs): instance._cached_label_checked = True lbl = instance._generate_cached_label() if lbl != instance.cached_label: - instance.skip_history_when_saving = True + if hasattr(instance, '_cascade_change'): + instance.skip_history_when_saving = True instance.cached_label = lbl instance.save() if hasattr(instance, '_get_associated_cached_labels'): for item in instance._get_associated_cached_labels(): + item._cascade_change = True cached_label_changed(item.__class__, instance=item) SHORTIFY_STR = ugettext(" (...)") -- cgit v1.2.3 From 00659753bc5eeb4fe55d47f400073dd1f710cd35 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Sat, 22 Oct 2016 12:12:34 +0200 Subject: Force cache regeneration on rollback --- ishtar_common/models.py | 2 ++ ishtar_common/utils.py | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'ishtar_common/utils.py') diff --git a/ishtar_common/models.py b/ishtar_common/models.py index c9be5b086..3453a53c5 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -795,6 +795,8 @@ class BaseHistorizedItem(Imported): pk=new_item.history_modifier_id) except User.ObjectDoesNotExist: pass + # force label regeneration + self._cached_label_checked = False self.save() except: raise HistoryError(u"The rollback has failed.") diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index d72b8b6ba..44112bca3 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -56,12 +56,13 @@ def cached_label_changed(sender, **kwargs): if not kwargs.get('instance'): return instance = kwargs.get('instance') - if hasattr(instance, '_cached_label_checked'): + if hasattr(instance, '_cached_label_checked') \ + and instance._cached_label_checked: return instance._cached_label_checked = True lbl = instance._generate_cached_label() if lbl != instance.cached_label: - if hasattr(instance, '_cascade_change'): + if hasattr(instance, '_cascade_change') and instance._cascade_change: instance.skip_history_when_saving = True instance.cached_label = lbl instance.save() -- cgit v1.2.3