summaryrefslogtreecommitdiff
path: root/ishtar_common/views_item.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/views_item.py')
-rw-r--r--ishtar_common/views_item.py38
1 files changed, 33 insertions, 5 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index 82eb4c7a8..18e3f5576 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -2908,13 +2908,41 @@ def get_item(
if col.startswith(k):
count_values.append(v)
break
- try:
- q = items.values(*count_values)
- items_nb = q.count() or 0
- except ProgrammingError:
- items_nb = 0
+
+ # count in cache
+ n = datetime.datetime.now()
+
+ search_vector = request_items.get("search_vector", "").strip()
+
+ # cache only for GUI search
+ cache_search = search_vector or "submited" in request_items
+ q_cached_count = None
+ if cache_search:
+ q_cached_count_attrs = {
+ "content_type": ContentType.objects.get_for_model(model),
+ "query": search_vector,
+ "updated__gt": timezone.now() - datetime.timedelta(hours=24)
+ }
+ if own:
+ q_cached_count_attrs["ishtar_user_id"] = ishtaruser.user_ptr_id
+ SearchCache = apps.get_model("ishtar_common", "SearchCache")
+ q_cached_count = SearchCache.objects.filter(**q_cached_count_attrs)
+ if cache_search and q_cached_count.exists():
+ items_nb = q_cached_count.all()[0].count
+ else:
+ try:
+ q = items.values(*count_values)
+ items_nb = q.count() or 0
+ except ProgrammingError:
+ items_nb = 0
+ if cache_search:
+ q_cached_count_attrs.pop("updated__gt")
+ q_cached_count_attrs["count"] = items_nb
+ SearchCache.objects.create(**q_cached_count_attrs)
+
if count:
return items_nb
+
# print(str(items.values("id").query))
if data_type == "json-stats":