Adding projects tags api action
parent
7c1b016997
commit
559257e483
|
@ -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)
|
|
@ -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) |
|
||||
|
|
Loading…
Reference in New Issue