summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_operations/models.py20
-rw-r--r--ishtar_common/models.py15
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