diff options
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r-- | ishtar_common/utils.py | 49 |
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 |