Working the search getting all optionally

remotes/origin/enhancement/email-actions
Jesús Espino 2014-02-05 17:51:03 +01:00
parent 98f33e1a5b
commit 2dc604a396
1 changed files with 33 additions and 20 deletions

View File

@ -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