diff options
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r-- | ishtar_common/utils.py | 98 |
1 files changed, 47 insertions, 51 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 7c7e6a6a5..65b937339 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -503,41 +503,42 @@ def revoke_old_task(kwargs, action_name, task_id, instance_cls): cache.set(key, task_id, settings.CACHE_TIMEOUT * 4) -def cached_label_changed(sender, **kwargs): - if not kwargs.get("instance"): +def load_task(task_func, task_name, checks, sender, **kwargs): + instance = kwargs.get("instance", None) + if not instance: return - instance = kwargs.get("instance") if hasattr(instance, "test_obj"): instance.test_obj.reached(sender, **kwargs) - # cache_key, value = get_cache( - # sender, ["cached_label_changed", kwargs['instance'].pk] - # ) - # if value and not settings.DISABLE_TASK_TIMEOUT: - # # multiple request too quick - # return - # cache.set(cache_key, True, settings.CACHE_TASK_TIMEOUT) + if checks: + for check in checks: + if getattr(instance, check, None): + return if ( - not settings.USE_BACKGROUND_TASK - or not instance.pk - or not sender.objects.filter(pk=instance.pk).count() + not settings.USE_BACKGROUND_TASK + or not instance.pk + or not sender.objects.filter(pk=instance.pk).count() ): # no background task or not yet fully saved - return _cached_label_changed(sender, **kwargs) - + return task_func(sender, **kwargs) if getattr(instance, "_cascade_change", False): kwargs["cascade_change"] = True sender, kwargs = serialize_args_for_tasks( sender, instance, kwargs, EXTRA_KWARGS_TRIGGER ) - task_item = _cached_label_changed.delay(sender, **kwargs) - revoke_old_task(kwargs, "cached_label_changed", task_item.id, instance.__class__) + task_item = task_func.delay(sender, **kwargs) + revoke_old_task(kwargs, task_name, task_item.id, instance.__class__) return task_item +def cached_label_changed(sender, **kwargs): + return load_task(_cached_label_changed, "cached_label_changed", None, sender, + **kwargs) + + @task() def _cached_label_changed(sender, **kwargs): sender, instance = deserialize_args_for_tasks(sender, kwargs, EXTRA_KWARGS_TRIGGER) @@ -613,6 +614,30 @@ def regenerate_all_cached_labels(model): cached_label_changed(model, instance=item) +def external_id_changed(sender, **kwargs): + return load_task(_external_id_changed, "external_id_changed", + ["_external_id_changed"], sender, **kwargs) + + +@task() +def _external_id_changed(sender, **kwargs): + sender, instance = deserialize_args_for_tasks(sender, kwargs, EXTRA_KWARGS_TRIGGER) + if not instance: + return + updated = False + instance.no_post_process() + 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: + updated = True + instance.auto_external_id = True + instance.external_id = external_id + updated |= instance.regenerate_all_ids(save=False) + if updated: + instance.save() + + + def shortify(lbl, number=20): SHORTIFY_STR = ugettext(" (...)") if not lbl: @@ -749,19 +774,8 @@ def get_srid_obj_from_point(point): def post_save_geodata(sender, **kwargs): - instance = kwargs.get("instance", None) - if not instance: - return - if hasattr(instance, "_no_geo_check") and instance._no_geo_check: - return - if not settings.USE_BACKGROUND_TASK: - return _post_save_geodata(sender, **kwargs) - sender, kwargs = serialize_args_for_tasks( - sender, instance, kwargs, EXTRA_KWARGS_TRIGGER - ) - task_item = _post_save_geodata.delay(sender, **kwargs) - revoke_old_task(kwargs, "post_save_geodata", task_item.id, instance.__class__) - return task_item + return load_task(_post_save_geodata, "post_save_geodata", ["_no_geo_check"], sender, + **kwargs) @task() @@ -817,26 +831,8 @@ def post_save_geo(sender, **kwargs): """ Convert raw x, y, z point to real geo field """ - if not kwargs.get("instance"): - return - # cache_key, value = get_cache( - # sender, ["post_save_geo", kwargs['instance'].pk]) - # if value and not settings.DISABLE_TASK_TIMEOUT: - # # multiple request too quick - # return - # cache.set(cache_key, True, settings.CACHE_TASK_TIMEOUT) - - instance = kwargs.get("instance") - if hasattr(instance, "_no_geo_check") and instance._no_geo_check: - return - if not settings.USE_BACKGROUND_TASK: - return _post_save_geo(sender, **kwargs) - sender, kwargs = serialize_args_for_tasks( - sender, instance, kwargs, EXTRA_KWARGS_TRIGGER - ) - task_item = _post_save_geo.delay(sender, **kwargs) - revoke_old_task(kwargs, "post_save_geo", task_item.id, instance.__class__) - return task_item + return load_task(_post_save_geo, "post_save_geo", ["_no_geo_check"], + sender, **kwargs) @task() @@ -1966,7 +1962,7 @@ def get_generated_id(key, item): profile = get_current_profile() if not hasattr(profile, key): return - formula = getattr(profile, key) + formula = getattr(profile, key, None) if not formula: return "" |