summaryrefslogtreecommitdiff
path: root/ishtar_common/utils.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-09-12 12:39:40 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-09-13 13:34:27 +0200
commit296ee1376450adf58a040a9da816a100fa5d2ec9 (patch)
treebf7d12d69c5c3b8670f28a58e524200db008e8a0 /ishtar_common/utils.py
parentc8a27a7f986adb1e3d0eb911acffa02d030cc85f (diff)
downloadIshtar-296ee1376450adf58a040a9da816a100fa5d2ec9.tar.bz2
Ishtar-296ee1376450adf58a040a9da816a100fa5d2ec9.zip
⚡️ improve performance - external ID: prevent double save - user UPDATE query instead of save - remove dead code "BulkUpdatedItem"
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r--ishtar_common/utils.py49
1 files changed, 21 insertions, 28 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index 40fb4db04..3249bb20e 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -871,14 +871,8 @@ def cached_label_changed(sender, **kwargs):
queue = getattr(instance, "_queue", settings.CELERY_DEFAULT_QUEUE)
if hasattr(instance, "external_id") and hasattr(instance, "auto_external_id") \
and hasattr(instance, "SLUG") and not getattr(instance, "_external_id_checked", None):
- changed = load_task(_external_id_changed, "external_id_changed", None, sender,
- queue=queue, **kwargs)
- if changed and (
- not settings.USE_BACKGROUND_TASK
- or not instance.pk
- or not sender.objects.filter(pk=instance.pk).count()
- ): # cached_label_changed re-triggered
- return
+ load_task(_external_id_changed, "external_id_changed", None, sender,
+ queue=queue, **kwargs)
force_update = kwargs.get("force_update", False)
if getattr(instance, "need_update", False):
@@ -943,10 +937,6 @@ def _cached_label_changed(sender, **kwargs):
updated = False
if force_update or hasattr(instance, "update_search_vector"):
updated = instance.update_search_vector()
- if hasattr(instance, "_cached_labels_bulk_update"):
- # updated = instance._cached_labels_bulk_update() or updated
- # disable now
- pass
if not updated and hasattr(instance, "_get_associated_cached_labels"):
for item in instance._get_associated_cached_labels():
item._cascade_change = True
@@ -955,7 +945,6 @@ def _cached_label_changed(sender, **kwargs):
if instance.timestamp_label:
item._timestamp = instance.timestamp_label
cached_label_changed(item.__class__, instance=item)
-
cache_key, __ = get_cache(sender, ["cached_label_changed", instance.pk])
cache.set(cache_key, None, settings.CACHE_TASK_TIMEOUT)
if cached_labels:
@@ -999,26 +988,30 @@ def _external_id_changed(sender, **kwargs):
if getattr(instance, "_external_id_checked", None):
return
instance._queue = kwargs.get("queue", settings.CELERY_DEFAULT_QUEUE)
- updated = False
+ updated = {}
if not instance.external_id or instance.auto_external_id:
- external_id = get_generated_id(instance.SLUG + "_external_id", instance)
- if external_id != instance.external_id:
- try:
- instance.auto_external_id = True
- instance.external_id = external_id
- updated = True
- except AttributeError:
- pass
+ if hasattr(instance, "update_external_id"):
+ external_id = instance.update_external_id(save=False, no_set=True)
+ else:
+ external_id = get_generated_id(instance.SLUG + "_external_id", instance)
+
+ if external_id and external_id != instance.external_id:
+ updated = {"auto_external_id": True, "external_id": external_id}
+ instance.auto_external_id = True
+ instance.external_id = external_id
if hasattr(instance, "regenerate_all_ids"):
- updated |= instance.regenerate_all_ids(save=False) or False
+ updated.update(instance.regenerate_all_ids(save=False))
instance._external_id_checked = True
if updated:
- if settings.USE_BACKGROUND_TASK and hasattr(instance, "no_post_process"):
- instance.no_post_process()
+ if instance.pk:
+ instance.__class__.objects.filter(pk=instance.pk).update(**updated)
else:
- instance._no_move = True
- instance.skip_history_when_saving = True
- instance.save()
+ if settings.USE_BACKGROUND_TASK and hasattr(instance, "no_post_process"):
+ instance.no_post_process()
+ else:
+ instance._no_move = True
+ instance.skip_history_when_saving = True
+ instance.save()
return True