diff options
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/models.py | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index ffa5323dd..7e62417ac 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -3193,15 +3193,15 @@ class StatsCache(models.Model): def update_stats(statscache, item, funcname): if not settings.USE_BACKGROUND_TASK: - raw_value = getattr(item, funcname)() - if not isinstance(raw_value, dict): - values = {"_raw_": raw_value} - else: - values = raw_value - statscache.values = values + current_values = statscache.values + if not current_values: + current_values = {} + value = getattr(item, funcname)() + current_values[funcname] = value + statscache.values = current_values statscache.updated = datetime.datetime.now() statscache.save() - return values + return current_values now = datetime.datetime.now() if statscache.update_requested and ( @@ -3226,16 +3226,17 @@ def _update_stats(app, model, model_pk, funcname): item = model.objects.get(pk=model_pk) except model.DoesNotExist: return - raw_value = getattr(item, funcname)() - if not isinstance(raw_value, dict): - values = {"_raw_": raw_value} - else: - values = raw_value - sc.values = values + current_values = sc.values + if not current_values: + current_values = {} + value = getattr(item, funcname)() + current_values[funcname] = value + + sc.values = current_values sc.update_requested = None sc.updated = datetime.datetime.now() sc.save() - sc, __ = StatsCache.objects.get_or_create( + StatsCache.objects.get_or_create( model=model_name, model_pk=model_pk ) @@ -3253,14 +3254,17 @@ class DashboardFormItem(object): model=model_name, model_pk=self.pk ) now = datetime.datetime.now() - if not update and sc.values and ( + values = {} + from_cache = False + if not update and sc.values and funcname in sc.values and ( sc.updated + datetime.timedelta(seconds=timeout)) > now: values = sc.values from_cache = True - else: + if funcname not in values: values = update_stats(sc, self, funcname) - from_cache = False - if "_raw_" in values: + if funcname in values: + values = values[funcname] + elif "_raw_" in values: values = values["_raw_"] if expected_type is not None and not isinstance(values, expected_type): if from_cache: |