From 2dc604a396e7ee38cb8bfd436690d4b58875d2d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Wed, 5 Feb 2014 17:51:03 +0100 Subject: [PATCH] Working the search getting all optionally --- taiga/base/searches/api.py | 53 ++++++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/taiga/base/searches/api.py b/taiga/base/searches/api.py index 30c89d8d..dfc07037 100644 --- a/taiga/base/searches/api.py +++ b/taiga/base/searches/api.py @@ -16,6 +16,7 @@ class SearchViewSet(viewsets.ViewSet): def list(self, request, **kwargs): project_model = get_model("projects", "Project") text = request.QUERY_PARAMS.get('text', "") + get_all = request.QUERY_PARAMS.get('get_all', False) project_id = request.QUERY_PARAMS.get('project', None) try: @@ -24,10 +25,10 @@ class SearchViewSet(viewsets.ViewSet): raise excp.PermissionDenied({"detail": "Wrong project id"}) result = { - "userstories": self._search_user_stories(project, text), - "tasks": self._search_tasks(project, text), - "issues": self._search_issues(project, text), - "wikipages": self._search_wiki_pages(project, text) + "userstories": self._search_user_stories(project, text, get_all), + "tasks": self._search_tasks(project, text, get_all), + "issues": self._search_issues(project, text, get_all), + "wikipages": self._search_wiki_pages(project, text, get_all) } result["count"] = sum(map(lambda x: len(x), result.values())) @@ -40,50 +41,62 @@ class SearchViewSet(viewsets.ViewSet): return own_projects.get(pk=project_id) - def _search_user_stories(self, project, text): + def _search_user_stories(self, project, text, get_all): where_clause = ("to_tsvector(userstories_userstory.subject || " "userstories_userstory.description) @@ plainto_tsquery(%s)") model_cls = get_model("userstories", "UserStory") - queryset = (model_cls.objects - .extra(where=[where_clause], params=[text]) - .filter(project_id=project.pk)[:50]) + if get_all != "false" and text == '': + queryset = model_cls.objects.filter(project_id=project.pk) + else: + queryset = (model_cls.objects + .extra(where=[where_clause], params=[text]) + .filter(project_id=project.pk)[:50]) serializer = UserStorySerializer(queryset, many=True) return serializer.data - def _search_tasks(self, project, text): + def _search_tasks(self, project, text, get_all): where_clause = ("to_tsvector(tasks_task.subject || tasks_task.description) " "@@ plainto_tsquery(%s)") model_cls = get_model("tasks", "Task") - queryset = (model_cls.objects - .extra(where=[where_clause], params=[text]) - .filter(project_id=project.pk)[:50]) + if get_all != "false" and text == '': + queryset = model_cls.objects.filter(project_id=project.pk) + else: + queryset = (model_cls.objects + .extra(where=[where_clause], params=[text]) + .filter(project_id=project.pk)[:50]) serializer = TaskSerializer(queryset, many=True) return serializer.data - def _search_issues(self, project, text): + def _search_issues(self, project, text, get_all): where_clause = ("to_tsvector(issues_issue.subject || issues_issue.description) " "@@ plainto_tsquery(%s)") model_cls = get_model("issues", "Issue") - queryset = (model_cls.objects - .extra(where=[where_clause], params=[text]) - .filter(project_id=project.pk)[:50]) + if get_all != "false" and text == '': + queryset = model_cls.objects.filter(project_id=project.pk) + else: + queryset = (model_cls.objects + .extra(where=[where_clause], params=[text]) + .filter(project_id=project.pk)[:50]) serializer = IssueSerializer(queryset, many=True) return serializer.data - def _search_wiki_pages(self, project, text): + def _search_wiki_pages(self, project, text, get_all): where_clause = ("to_tsvector(wiki_wikipage.slug || wiki_wikipage.content) " "@@ plainto_tsquery(%s)") model_cls = get_model("wiki", "WikiPage") - queryset = (model_cls.objects - .extra(where=[where_clause], params=[text]) - .filter(project_id=project.pk)[:50]) + if get_all != "false" and text == '': + queryset = model_cls.objects.filter(project_id=project.pk) + else: + queryset = (model_cls.objects + .extra(where=[where_clause], params=[text]) + .filter(project_id=project.pk)[:50]) serializer = WikiPageSerializer(queryset, many=True) return serializer.data