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: | 
