summaryrefslogtreecommitdiff
path: root/ishtar_common/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r--ishtar_common/utils.py34
1 files changed, 27 insertions, 7 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index 55301af14..3d9cfc13f 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -324,16 +324,20 @@ def force_cached_label_changed(sender, **kwargs):
cached_label_changed(sender, **kwargs)
-def serialize_args_for_tasks(sender, **kwargs):
+def serialize_args_for_tasks(sender, instance, kwargs, extra_kwargs=None):
if 'signal' in kwargs:
kwargs.pop('signal')
if 'instance' in kwargs:
kwargs['instance'] = kwargs["instance"].pk
sender = (sender._meta.app_label, sender._meta.object_name)
+ if extra_kwargs:
+ for kw in extra_kwargs:
+ if getattr(instance, kw, None):
+ kwargs[kw] = getattr(instance, kw)
return sender, kwargs
-def deserialize_args_for_tasks(sender, **kwargs):
+def deserialize_args_for_tasks(sender, kwargs, extra_kwargs=None):
if "instance" not in kwargs:
return sender, None
if not isinstance(sender, (tuple, list)): # not task
@@ -343,9 +347,19 @@ def deserialize_args_for_tasks(sender, **kwargs):
instance = sender.objects.get(pk=kwargs['instance'])
except sender.DoesNotExist:
return sender, None # object is not here anymore
+ if extra_kwargs:
+ for kw in extra_kwargs:
+ if kw in kwargs:
+ setattr(instance, kw, kwargs[kw])
return sender, instance
+EXTRA_KWARGS_TRIGGER = [
+ "_cascade_change", "_cached_labels_bulk_update", "skip_history_when_saving",
+ "_post_saved_geo", "_search_updated", "_cached_label_checked"
+]
+
+
def cached_label_changed(sender, **kwargs):
if not kwargs.get('instance'):
return
@@ -361,13 +375,18 @@ def cached_label_changed(sender, **kwargs):
if not settings.USE_BACKGROUND_TASK:
return _cached_label_changed(sender, **kwargs)
- sender, kwargs = serialize_args_for_tasks(sender, **kwargs)
+ if getattr(instance, "_cascade_change", False):
+ kwargs["cascade_change"] = True
+
+ sender, kwargs = serialize_args_for_tasks(
+ sender, instance, kwargs, EXTRA_KWARGS_TRIGGER)
return _cached_label_changed.delay(sender, **kwargs)
@task()
def _cached_label_changed(sender, **kwargs):
- sender, instance = deserialize_args_for_tasks(sender, **kwargs)
+ sender, instance = deserialize_args_for_tasks(sender, kwargs,
+ EXTRA_KWARGS_TRIGGER)
if not instance:
return
@@ -376,7 +395,6 @@ def _cached_label_changed(sender, **kwargs):
if hasattr(instance, "refresh_cache"):
instance.refresh_cache()
- # print(sender, "cached_label_changed")
instance._cached_label_checked = True
cached_labels = ['cached_label']
if hasattr(sender, 'CACHED_LABELS'):
@@ -558,7 +576,8 @@ def post_save_geo(sender, **kwargs):
if not settings.USE_BACKGROUND_TASK:
return _post_save_geo(sender, **kwargs)
- sender, kwargs = serialize_args_for_tasks(sender, **kwargs)
+ sender, kwargs = serialize_args_for_tasks(sender, kwargs.get('instance'),
+ kwargs, EXTRA_KWARGS_TRIGGER)
return _post_save_geo.delay(sender, **kwargs)
@@ -573,7 +592,8 @@ def _post_save_geo(sender, **kwargs):
profile = get_current_profile()
if not profile.mapping:
return
- sender, instance = deserialize_args_for_tasks(sender, **kwargs)
+ sender, instance = deserialize_args_for_tasks(sender, kwargs,
+ EXTRA_KWARGS_TRIGGER)
if not instance:
return