36 from soc.views.helper import forms |
36 from soc.views.helper import forms |
37 from soc.views.helper import redirects |
37 from soc.views.helper import redirects |
38 from soc.views.helper import responses |
38 from soc.views.helper import responses |
39 from soc.views import sitemap |
39 from soc.views import sitemap |
40 |
40 |
|
41 import soc.cache.logic |
41 import soc.logic |
42 import soc.logic |
42 import soc.logic.lists |
43 import soc.logic.lists |
43 import soc.views.helper.lists |
44 import soc.views.helper.lists |
44 import soc.views.helper.params |
45 import soc.views.helper.params |
45 |
46 |
613 content = helper.lists.getListContent(request, params, filter=filter) |
614 content = helper.lists.getListContent(request, params, filter=filter) |
614 contents = [content] |
615 contents = [content] |
615 |
616 |
616 return self._list(request, params, contents, page_name) |
617 return self._list(request, params, contents, page_name) |
617 |
618 |
|
619 def _getPickData(self, model, filter, logic): |
|
620 """Retrieves the pick data for this query. |
|
621 |
|
622 Args: |
|
623 model: the model that is being queried |
|
624 filter: the filters that apply |
|
625 logic: the logic that will be used for the query |
|
626 """ |
|
627 |
|
628 query = logic.getQueryForFields(filter=filter) |
|
629 entities = logic.getAll(query) |
|
630 return entities |
|
631 |
618 @decorators.merge_params |
632 @decorators.merge_params |
619 @decorators.check_access |
633 @decorators.check_access |
620 def pick(self, request, acces_type, page_name=None, params=None): |
634 def pick(self, request, acces_type, page_name=None, params=None): |
621 """Displays a list page allowing the user to select an entity. |
635 """Displays a list page allowing the user to select an entity. |
622 |
636 |
640 filter = {} |
654 filter = {} |
641 for key in request.GET.keys(): |
655 for key in request.GET.keys(): |
642 # need to use getlist as we want to support multiple values |
656 # need to use getlist as we want to support multiple values |
643 filter[key] = request.GET.getlist(key) |
657 filter[key] = request.GET.getlist(key) |
644 |
658 |
645 query = logic.getQueryForFields(filter=filter) |
659 if params['cache_pick']: |
646 entities = logic.getAll(query) |
660 fun = soc.cache.logic.cache(self._getPickData) |
|
661 else: |
|
662 fun = self._getPickData |
|
663 |
|
664 entities = fun(logic._model, filter, logic) |
647 |
665 |
648 data = [i.toDict() for i in entities] |
666 data = [i.toDict() for i in entities] |
649 |
667 |
650 return self.json(request, data) |
668 return self.json(request, data) |
651 |
669 |