Adding projects tags api action

remotes/origin/enhancement/email-actions
Jesús Espino 2013-11-14 17:42:42 +01:00
parent 7c1b016997
commit 559257e483
2 changed files with 38 additions and 0 deletions

View File

@ -0,0 +1,32 @@
from contextlib import closing
from django.db import connection
def _get_issues_tags(project):
extra_sql = ("select unnest(unpickle(tags)) as tagname "
"from issues_issue where project_id = %s "
"group by unnest(unpickle(tags)) "
"order by tagname asc")
with closing(connection.cursor()) as cursor:
cursor.execute(extra_sql, [project.id])
rows = cursor.fetchall()
return set([x[0] for x in rows])
def _get_stories_tags(project):
extra_sql = ("select unnest(unpickle(tags)) as tagname, count(unnest(unpickle(tags))) "
"from userstories_userstory where project_id = %s "
"group by unnest(unpickle(tags)) "
"order by tagname asc")
with closing(connection.cursor()) as cursor:
cursor.execute(extra_sql, [project.id])
rows = cursor.fetchall()
return set([x[0] for x in rows])
def get_all_tags(project):
result = set()
result.update(_get_issues_tags(project))
result.update(_get_stories_tags(project))
return sorted(result)

View File

@ -9,6 +9,7 @@ from rest_framework.decorators import detail_route
from greenmine.base import filters
from greenmine.base.api import ModelCrudViewSet, ModelListViewSet
from greenmine.base.notifications.api import NotificationSenderMixin
from greenmine.projects.aggregates.tags import get_all_tags
from . import serializers
from . import models
@ -39,6 +40,11 @@ class ProjectViewSet(ModelCrudViewSet):
project = self.get_object()
return Response(filters_aggr.get_issues_filters_data(project))
@detail_route(methods=['get'])
def tags(self, request, pk=None):
project = self.get_object()
return Response(get_all_tags(project))
def get_queryset(self):
qs = super(ProjectViewSet, self).get_queryset()
qs = qs.filter(Q(owner=self.request.user) |