Allow for query caching in pick
authorSverre Rabbelier <srabbelier@gmail.com>
Wed, 11 Mar 2009 21:28:48 +0000
changeset 1796 5cd78a7aacdd
parent 1795 336c35c82b87
child 1797 f0c83ca3bb08
Allow for query caching in pick Turn the caching on for /user/pick Patch by: Sverre Rabbelier
app/soc/views/helper/params.py
app/soc/views/models/base.py
app/soc/views/models/user.py
--- a/app/soc/views/helper/params.py	Wed Mar 11 21:28:11 2009 +0000
+++ b/app/soc/views/helper/params.py	Wed Mar 11 21:28:48 2009 +0000
@@ -229,6 +229,8 @@
 
   new_params['context'] = None
 
+  new_params['cache_pick'] = False
+
   new_params['export_content_type'] = None
   new_params['export_extension'] = '.txt'
 
--- a/app/soc/views/models/base.py	Wed Mar 11 21:28:11 2009 +0000
+++ b/app/soc/views/models/base.py	Wed Mar 11 21:28:48 2009 +0000
@@ -38,6 +38,7 @@
 from soc.views.helper import responses
 from soc.views import sitemap
 
+import soc.cache.logic
 import soc.logic
 import soc.logic.lists
 import soc.views.helper.lists
@@ -615,6 +616,19 @@
 
     return self._list(request, params, contents, page_name)
 
+  def _getPickData(self, model, filter, logic):
+    """Retrieves the pick data for this query.
+
+    Args:
+      model: the model that is being queried
+      filter: the filters that apply
+      logic: the logic that will be used for the query
+    """
+
+    query = logic.getQueryForFields(filter=filter)
+    entities = logic.getAll(query)
+    return entities
+
   @decorators.merge_params
   @decorators.check_access
   def pick(self, request, acces_type, page_name=None, params=None):
@@ -642,8 +656,12 @@
       # need to use getlist as we want to support multiple values
       filter[key] = request.GET.getlist(key)
 
-    query = logic.getQueryForFields(filter=filter)
-    entities = logic.getAll(query)
+    if params['cache_pick']:
+      fun =  soc.cache.logic.cache(self._getPickData)
+    else:
+      fun = self._getPickData
+
+    entities = fun(logic._model, filter, logic)
 
     data = [i.toDict() for i in entities]
 
--- a/app/soc/views/models/user.py	Wed Mar 11 21:28:11 2009 +0000
+++ b/app/soc/views/models/user.py	Wed Mar 11 21:28:48 2009 +0000
@@ -71,6 +71,7 @@
 
     new_params['edit_template'] = 'soc/user/edit.html'
     new_params['pickable'] = True
+    new_params['cache_pick'] = True
 
     new_params['sidebar_heading'] = 'Users'