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 import filters
from greenmine.base.api import ModelCrudViewSet, ModelListViewSet from greenmine.base.api import ModelCrudViewSet, ModelListViewSet
from greenmine.base.notifications.api import NotificationSenderMixin from greenmine.base.notifications.api import NotificationSenderMixin
from greenmine.projects.aggregates.tags import get_all_tags
from . import serializers from . import serializers
from . import models from . import models
@ -39,6 +40,11 @@ class ProjectViewSet(ModelCrudViewSet):
project = self.get_object() project = self.get_object()
return Response(filters_aggr.get_issues_filters_data(project)) 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): def get_queryset(self):
qs = super(ProjectViewSet, self).get_queryset() qs = super(ProjectViewSet, self).get_queryset()
qs = qs.filter(Q(owner=self.request.user) | qs = qs.filter(Q(owner=self.request.user) |