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 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) |
|
||||||
|
|
Loading…
Reference in New Issue