diff options
| -rw-r--r-- | archaeological_operations/models.py | 20 | ||||
| -rw-r--r-- | ishtar_common/models.py | 15 | 
2 files changed, 25 insertions, 10 deletions
| diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index b220ff1ec..55e90ec07 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -1388,7 +1388,8 @@ class Operation(ClosedItem, DocumentItem, BaseHistorizedItem, QRCodeItem,      @property      def nb_context_records_by_type(self, update=False): -        return self._get_or_set_stats('_nb_context_records_by_type', update) +        return self._get_or_set_stats('_nb_context_records_by_type', update, +                                      expected_type=list)      def _nb_context_records_by_type(self):          nbs = [] @@ -1401,7 +1402,8 @@ class Operation(ClosedItem, DocumentItem, BaseHistorizedItem, QRCodeItem,      @property      def nb_context_records_by_periods(self, update=False): -        return self._get_or_set_stats('_nb_context_records_by_periods', update) +        return self._get_or_set_stats('_nb_context_records_by_periods', update, +                                      expected_type=list)      def _nb_context_records_by_periods(self):          nbs = [] @@ -1428,7 +1430,8 @@ class Operation(ClosedItem, DocumentItem, BaseHistorizedItem, QRCodeItem,      @property      def nb_finds_by_material_type(self, update=False): -        return self._get_or_set_stats('_nb_finds_by_material_type', update) +        return self._get_or_set_stats('_nb_finds_by_material_type', update, +                                      expected_type=list)      def _nb_finds_by_material_type(self):          from archaeological_finds.models import Find @@ -1449,7 +1452,8 @@ class Operation(ClosedItem, DocumentItem, BaseHistorizedItem, QRCodeItem,      @property      def nb_finds_by_types(self, update=False): -        return self._get_or_set_stats('_nb_finds_by_types', update) +        return self._get_or_set_stats('_nb_finds_by_types', update, +                                      expected_type=list)      def _nb_finds_by_types(self):          from archaeological_finds.models import Find @@ -1472,7 +1476,8 @@ class Operation(ClosedItem, DocumentItem, BaseHistorizedItem, QRCodeItem,      @property      def nb_finds_by_periods(self, update=False): -        return self._get_or_set_stats('_nb_finds_by_periods', update) +        return self._get_or_set_stats('_nb_finds_by_periods', update, +                                      expected_type=list)      def _nb_finds_by_periods(self):          from archaeological_finds.models import Find @@ -1505,7 +1510,8 @@ class Operation(ClosedItem, DocumentItem, BaseHistorizedItem, QRCodeItem,      @property      def nb_documents_by_types(self, update=False): -        return self._get_or_set_stats('_nb_documents_by_types', update) +        return self._get_or_set_stats('_nb_documents_by_types', update, +                                      expected_type=list)      def _nb_documents_by_types(self):          docs = {} @@ -1523,7 +1529,7 @@ class Operation(ClosedItem, DocumentItem, BaseHistorizedItem, QRCodeItem,                      docs[st] = 0                  docs[st] += q.filter(source_type=st).count()          docs = [(str(SourceType.objects.get(pk=k)), docs[k]) for k in docs] -        return sorted(docs, key=lambda x: x[0]) +        return list(sorted(docs, key=lambda x: x[0]))      @property      def nb_stats_finds_by_ue(self, update=False): diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 8d300c64a..bb19b0913 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -2945,19 +2945,28 @@ class DashboardFormItem(object):      """      def _get_or_set_stats(self, funcname, update, -                          timeout=settings.CACHE_TIMEOUT): +                          timeout=settings.CACHE_TIMEOUT, +                          expected_type=None):          model_name = self._meta.app_label + "." + self._meta.model_name          sc, __ = StatsCache.objects.get_or_create(              model=model_name, model_pk=self.pk          )          now = datetime.datetime.now() -        if sc.values and ( +        if not update and sc.values and (                  sc.updated + datetime.timedelta(seconds=timeout)) > now:              values = sc.values +            from_cache = True          else:              values = update_stats(sc, self, funcname) +            from_cache = False          if "_raw_" in values: -            return values["_raw_"] +            values = values["_raw_"] +        if expected_type is not None and not isinstance(values, expected_type): +            if from_cache: +                return self._get_or_set_stats(funcname, True, +                                              expected_type=expected_type) +            else: +                return expected_type()          return values      @classmethod | 
