Port scrum api views to use viewsets and routers.
parent
4804c7a12b
commit
2d31e9754d
|
@ -0,0 +1,27 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from rest_framework import filters
|
||||
|
||||
|
||||
class SimpleFilterBackend(filters.BaseFilterBackend):
|
||||
_special_values_dict = {
|
||||
'true': True,
|
||||
'false': False,
|
||||
'null': None,
|
||||
}
|
||||
|
||||
def filter_queryset(self, request, queryset, view):
|
||||
query_params = {}
|
||||
|
||||
for field_name in view.filter_fields:
|
||||
if field_name in request.QUERY_PARAMS:
|
||||
field_data = request.QUERY_PARAMS[field_name]
|
||||
if field_data in self._special_values_dict:
|
||||
query_params[field_name] = self._special_values_dict[field_data]
|
||||
else:
|
||||
query_params[field_name] = field_data
|
||||
|
||||
if query_params:
|
||||
queryset = queryset.filter(**query_params)
|
||||
|
||||
return queryset
|
|
@ -3,10 +3,18 @@
|
|||
from rest_framework import routers
|
||||
|
||||
# Special router for actions.
|
||||
actions_router = routers.Route(url=r'^{prefix}/actions/{methodname}{trailing_slash}$',
|
||||
actions_router = routers.Route(url=r'^{prefix}/{methodname}{trailing_slash}$',
|
||||
mapping={'{httpmethod}': '{methodname}'},
|
||||
name='{basename}-{methodnamehyphen}',
|
||||
initkwargs={})
|
||||
|
||||
|
||||
class Router(routers.DefaultRouter):
|
||||
routes = routers.DefaultRouter.routes + [actions_router]
|
||||
routes = [
|
||||
routers.DefaultRouter.routes[0],
|
||||
actions_router,
|
||||
routers.DefaultRouter.routes[2],
|
||||
routers.DefaultRouter.routes[1]]
|
||||
|
||||
|
||||
__all__ = ["Router"]
|
||||
|
|
|
@ -2,8 +2,7 @@
|
|||
|
||||
from django.db.models import Q
|
||||
|
||||
import django_filters
|
||||
from rest_framework import generics
|
||||
from rest_framework import mixins, viewsets
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
|
||||
from greenmine.base.models import *
|
||||
|
@ -13,366 +12,306 @@ from greenmine.scrum.serializers import *
|
|||
from greenmine.scrum.models import *
|
||||
from greenmine.scrum.permissions import *
|
||||
|
||||
# Generic viewset subclasses for this module
|
||||
|
||||
class UserStoryFilter(django_filters.FilterSet):
|
||||
no_milestone = django_filters.NumberFilter(name="milestone", lookup_type='isnull')
|
||||
|
||||
class Meta:
|
||||
model = UserStory
|
||||
fields = ['project', 'milestone', 'no_milestone']
|
||||
class ModelCrudViewSet(mixins.CreateModelMixin, mixins.ListModelMixin,
|
||||
mixins.RetrieveModelMixin, mixins.UpdateModelMixin,
|
||||
mixins.DestroyModelMixin, viewsets.GenericViewSet):
|
||||
pass
|
||||
|
||||
|
||||
class SimpleFilterMixin(object):
|
||||
filter_fields = []
|
||||
filter_special_fields = []
|
||||
|
||||
_special_values_dict = {
|
||||
'true': True,
|
||||
'false': False,
|
||||
'null': None,
|
||||
}
|
||||
|
||||
def get_queryset(self):
|
||||
queryset = super(SimpleFilterMixin, self).get_queryset()
|
||||
query_params = {}
|
||||
|
||||
for field_name in self.filter_fields:
|
||||
if field_name in self.request.QUERY_PARAMS:
|
||||
field_data = self.request.QUERY_PARAMS[field_name]
|
||||
if field_data in self._special_values_dict:
|
||||
query_params[field_name] = self._special_values_dict[field_data]
|
||||
else:
|
||||
query_params[field_name] = field_data
|
||||
|
||||
if query_params:
|
||||
queryset = queryset.filter(**query_params)
|
||||
|
||||
return queryset
|
||||
class ModelListViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin,
|
||||
viewsets.GenericViewSet):
|
||||
pass
|
||||
|
||||
|
||||
class ProjectList(NotificationSenderMixin, generics.ListCreateAPIView):
|
||||
model = Project
|
||||
serializer_class = ProjectSerializer
|
||||
permission_classes = (IsAuthenticated,)
|
||||
create_notification_template = "create_project_notification"
|
||||
update_notification_template = "update_project_notification"
|
||||
destroy_notification_template = "destroy_project_notification"
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.model.objects.filter(
|
||||
Q(owner=self.request.user) | Q(members=self.request.user)
|
||||
)
|
||||
return qs.distinct()
|
||||
# ViewSets definition
|
||||
|
||||
def pre_save(self, obj):
|
||||
obj.owner = self.request.user
|
||||
|
||||
|
||||
class ProjectDetail(NotificationSenderMixin, generics.RetrieveUpdateDestroyAPIView):
|
||||
model = Project
|
||||
class ProjectViewSet(NotificationSenderMixin, ModelCrudViewSet):
|
||||
queryset = Project.objects.all()
|
||||
serializer_class = ProjectSerializer
|
||||
permission_classes = (IsAuthenticated, ProjectDetailPermission,)
|
||||
|
||||
create_notification_template = "create_project_notification"
|
||||
update_notification_template = "update_project_notification"
|
||||
destroy_notification_template = "destroy_project_notification"
|
||||
|
||||
|
||||
class MilestoneList(NotificationSenderMixin, generics.ListCreateAPIView):
|
||||
model = Milestone
|
||||
serializer_class = MilestoneSerializer
|
||||
filter_fields = ('project',)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
create_notification_template = "create_milestone_notification"
|
||||
update_notification_template = "update_milestone_notification"
|
||||
destroy_notification_template = "destroy_milestone_notification"
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.model.objects.filter(project__members=self.request.user)
|
||||
qs = super(ProjectViewSet, self).get_queryset()
|
||||
qs = qs.filter(Q(owner=self.request.user) |
|
||||
Q(members=self.request.user))
|
||||
return qs.distinct()
|
||||
|
||||
def pre_save(self, obj):
|
||||
super(ProjectViewSet, self).pre_save(obj)
|
||||
obj.owner = self.request.user
|
||||
|
||||
|
||||
class MilestoneDetail(NotificationSenderMixin, generics.RetrieveUpdateDestroyAPIView):
|
||||
model = Milestone
|
||||
|
||||
class MilestoneViewSet(NotificationSenderMixin, ModelCrudViewSet):
|
||||
queryset = Milestone.objects.all()
|
||||
serializer_class = MilestoneSerializer
|
||||
permission_classes = (IsAuthenticated, MilestoneDetailPermission,)
|
||||
create_notification_template = "create_milestone_notification"
|
||||
update_notification_template = "update_milestone_notification"
|
||||
destroy_notification_template = "destroy_milestone_notification"
|
||||
|
||||
|
||||
class UserStoryList(NotificationSenderMixin, generics.ListCreateAPIView):
|
||||
model = UserStory
|
||||
serializer_class = UserStorySerializer
|
||||
filter_class = UserStoryFilter
|
||||
permission_classes = (IsAuthenticated,)
|
||||
create_notification_template = "create_user_story_notification"
|
||||
update_notification_template = "update_user_story_notification"
|
||||
destroy_notification_template = "destroy_user_story_notification"
|
||||
filter_fields = ('project',)
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.model.objects.filter(project__members=self.request.user)
|
||||
return qs.distinct()
|
||||
qs = super(MilestoneViewSet, self).get_queryset()
|
||||
return qs.filter(project__members=self.request.user).distinct()
|
||||
|
||||
def pre_save(self, obj):
|
||||
super(MilestoneViewSet, self).pre_save(obj)
|
||||
obj.owner = self.request.user
|
||||
|
||||
|
||||
class UserStoryDetail(NotificationSenderMixin, generics.RetrieveUpdateDestroyAPIView):
|
||||
model = UserStory
|
||||
class UserStoryViewSet(NotificationSenderMixin, ModelCrudViewSet):
|
||||
queryset = UserStory.objects.all()
|
||||
serializer_class = UserStorySerializer
|
||||
permission_classes = (IsAuthenticated, UserStoryDetailPermission,)
|
||||
|
||||
create_notification_template = "create_user_story_notification"
|
||||
update_notification_template = "update_user_story_notification"
|
||||
destroy_notification_template = "destroy_user_story_notification"
|
||||
|
||||
filter_fields = ['project', 'milestone', 'milestone__isnull']
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super(UserStoryViewSet, self).get_queryset()
|
||||
return qs.filter(project__members=self.request.user).distinct()
|
||||
|
||||
def pre_save(self, obj):
|
||||
super(UserStoryViewSet, self).pre_save(obj)
|
||||
obj.owner = self.request.user
|
||||
|
||||
def post_save(self, obj, created=False):
|
||||
with reversion.create_revision():
|
||||
if "comment" in self.request.DATA:
|
||||
# Update the comment in the last version
|
||||
reversion.set_comment(self.request.DATA['comment'])
|
||||
super(UserStoryDetail, self).post_save(obj, created)
|
||||
super(UserStoryViewSet, self).post_save(obj, created)
|
||||
|
||||
|
||||
class AttachmentFilter(django_filters.FilterSet):
|
||||
class Meta:
|
||||
model = Attachment
|
||||
fields = ['project', 'object_id']
|
||||
|
||||
|
||||
class IssuesAttachmentList(generics.ListCreateAPIView):
|
||||
class IssuesAttachmentViewSet(ModelCrudViewSet):
|
||||
model = Attachment
|
||||
serializer_class = AttachmentSerializer
|
||||
permission_classes = (IsAuthenticated,)
|
||||
filter_class = AttachmentFilter
|
||||
permission_classes = (IsAuthenticated, AttachmentDetailPermission,)
|
||||
|
||||
filter_fields = ["project", "object_id"]
|
||||
|
||||
def get_queryset(self):
|
||||
ct = ContentType.objects.get_for_model(Issue)
|
||||
qs = super(IssuesAttachmentList, self).get_queryset()\
|
||||
.filter(project__members=self.request.user)\
|
||||
.filter(content_type=ct)
|
||||
qs = super(IssuesAttachmentViewSet, self).get_queryset()
|
||||
|
||||
qs = qs.filter(project__members=self.request.user)
|
||||
qs = qs.filter(content_type=ct)
|
||||
|
||||
return qs.distinct()
|
||||
|
||||
def pre_save(self, obj):
|
||||
super(IssuesAttachmentViewSet, self).pre_save(obj)
|
||||
obj.content_type = ContentType.objects.get_for_model(Issue)
|
||||
obj.owner = self.request.user
|
||||
|
||||
|
||||
class IssuesAttachmentDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
class TasksAttachmentViewSet(ModelCrudViewSet):
|
||||
model = Attachment
|
||||
serializer_class = AttachmentSerializer
|
||||
permission_classes = (IsAuthenticated, AttachmentDetailPermission,)
|
||||
|
||||
|
||||
class TasksAttachmentList(generics.ListCreateAPIView):
|
||||
model = Attachment
|
||||
serializer_class = AttachmentSerializer
|
||||
permission_classes = (IsAuthenticated,)
|
||||
filter_class = AttachmentFilter
|
||||
filter_fields = ["project", "object_id"]
|
||||
|
||||
def get_queryset(self):
|
||||
ct = ContentType.objects.get_for_model(Task)
|
||||
qs = super(TasksAttachmentList, self).get_queryset()\
|
||||
.filter(project__members=self.request.user)\
|
||||
.filter(content_type=ct)
|
||||
qs = super(TasksAttachmentViewSet, self).get_queryset()
|
||||
|
||||
qs = qs.filter(project__members=self.request.user)
|
||||
qs = qs.filter(content_type=ct)
|
||||
|
||||
return qs.distinct()
|
||||
|
||||
def pre_save(self, obj):
|
||||
super(TasksAttachmentViewSet, self).pre_save(obj)
|
||||
obj.content_type = ContentType.objects.get_for_model(Task)
|
||||
obj.owner = self.request.user
|
||||
|
||||
|
||||
class TasksAttachmentDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
model = Attachment
|
||||
serializer_class = AttachmentSerializer
|
||||
permission_classes = (IsAuthenticated, AttachmentDetailPermission,)
|
||||
class TaskViewSet(NotificationSenderMixin, ModelCrudViewSet):
|
||||
queryset = Task.objects.all()
|
||||
|
||||
|
||||
class TaskList(NotificationSenderMixin, generics.ListCreateAPIView):
|
||||
model = Task
|
||||
serializer_class = TaskSerializer
|
||||
filter_fields = ('user_story', 'milestone', 'project')
|
||||
permission_classes = (IsAuthenticated,)
|
||||
permission_classes = (IsAuthenticated, TaskDetailPermission,)
|
||||
|
||||
create_notification_template = "create_task_notification"
|
||||
update_notification_template = "update_task_notification"
|
||||
destroy_notification_template = "destroy_task_notification"
|
||||
filter_fields = ['user_story', 'milestone', 'project']
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.model.objects.filter(project__members=self.request.user)
|
||||
qs = super(TaskViewSet, self).get_queryset()
|
||||
qs = qs.filter(project__members=self.request.user)
|
||||
return qs.distinct()
|
||||
|
||||
def pre_save(self, obj):
|
||||
super(TaskViewSet, self).pre_save(obj)
|
||||
obj.owner = self.request.user
|
||||
obj.milestone = obj.user_story.milestone
|
||||
|
||||
|
||||
class TaskDetail(NotificationSenderMixin, generics.RetrieveUpdateDestroyAPIView):
|
||||
model = Task
|
||||
serializer_class = TaskSerializer
|
||||
permission_classes = (IsAuthenticated, TaskDetailPermission,)
|
||||
create_notification_template = "create_task_notification"
|
||||
update_notification_template = "update_task_notification"
|
||||
destroy_notification_template = "destroy_task_notification"
|
||||
|
||||
def post_save(self, obj, created=False):
|
||||
with reversion.create_revision():
|
||||
if "comment" in self.request.DATA:
|
||||
# Update the comment in the last version
|
||||
reversion.set_comment(self.request.DATA['comment'])
|
||||
super(TaskDetail, self).post_save(obj, created)
|
||||
super(TaskViewSet, self).post_save(obj, created)
|
||||
|
||||
|
||||
class IssueList(NotificationSenderMixin, generics.ListCreateAPIView):
|
||||
model = Issue
|
||||
serializer_class = IssueSerializer
|
||||
filter_fields = ('project',)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
create_notification_template = "create_issue_notification"
|
||||
update_notification_template = "update_issue_notification"
|
||||
destroy_notification_template = "destroy_issue_notification"
|
||||
|
||||
def pre_save(self, obj):
|
||||
obj.owner = self.request.user
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.model.objects.filter(project__members=self.request.user)
|
||||
return qs.distinct()
|
||||
|
||||
|
||||
class IssueDetail(NotificationSenderMixin, generics.RetrieveUpdateDestroyAPIView):
|
||||
model = Issue
|
||||
class IssueViewSet(NotificationSenderMixin, ModelCrudViewSet):
|
||||
queryset = Issue.objects.all()
|
||||
serializer_class = IssueSerializer
|
||||
permission_classes = (IsAuthenticated, IssueDetailPermission,)
|
||||
|
||||
create_notification_template = "create_issue_notification"
|
||||
update_notification_template = "update_issue_notification"
|
||||
destroy_notification_template = "destroy_issue_notification"
|
||||
|
||||
filter_fields = ('project',)
|
||||
|
||||
def pre_save(self, obj):
|
||||
super(IssueViewSet, self).pre_save(obj)
|
||||
obj.owner = self.request.user
|
||||
|
||||
def post_save(self, obj, created=False):
|
||||
with reversion.create_revision():
|
||||
if "comment" in self.request.DATA:
|
||||
# Update the comment in the last version
|
||||
reversion.set_comment(self.request.DATA['comment'])
|
||||
super(IssueDetail, self).post_save(obj, created)
|
||||
|
||||
|
||||
class SeverityList(generics.ListCreateAPIView):
|
||||
model = Severity
|
||||
serializer_class = SeveritySerializer
|
||||
filter_fields = ('project',)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
super(IssueViewSet, self).post_save(obj, created)
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.model.objects.filter(project__members=self.request.user)
|
||||
qs = super(IssueViewSet, self).get_queryset()
|
||||
qs = qs.filter(project__members=self.request.user)
|
||||
return qs.distinct()
|
||||
|
||||
|
||||
class SeverityDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
model = Severity
|
||||
class SeverityViewSet(ModelListViewSet):
|
||||
queryset = Severity.objects.all()
|
||||
serializer_class = SeveritySerializer
|
||||
permission_classes = (IsAuthenticated, SeverityDetailPermission,)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
filter_fields = ('project',)
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super(SeverityViewSet, self).get_queryset()
|
||||
qs = qs.filter(project__members=self.request.user)
|
||||
return qs.distinct()
|
||||
|
||||
|
||||
class IssueStatusList(generics.ListCreateAPIView):
|
||||
model = IssueStatus
|
||||
#class SeverityDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
# model = Severity
|
||||
# serializer_class = SeveritySerializer
|
||||
# permission_classes = (IsAuthenticated, SeverityDetailPermission,)
|
||||
|
||||
class IssueStatusViewSet(ModelListViewSet):
|
||||
queryset = IssueStatus.objects.all()
|
||||
|
||||
serializer_class = IssueStatusSerializer
|
||||
filter_fields = ('project',)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.model.objects.filter(project__members=self.request.user)
|
||||
qs = super(IssueStatusViewSet, self).get_queryset()
|
||||
qs = qs.filter(project__members=self.request.user)
|
||||
return qs.distinct()
|
||||
|
||||
|
||||
class IssueStatusDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
model = IssueStatus
|
||||
serializer_class = IssueStatusSerializer
|
||||
permission_classes = (IsAuthenticated, IssueStatusDetailPermission,)
|
||||
|
||||
|
||||
class TaskStatusList(SimpleFilterMixin, generics.ListCreateAPIView):
|
||||
class TaskStatusViewSet(ModelListViewSet):
|
||||
model = TaskStatus
|
||||
serializer_class = TaskStatusSerializer
|
||||
filter_fields = ('project',)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
filter_fields = ('project',)
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.model.objects.filter(project__members=self.request.user)
|
||||
qs = super(TaskStatusViewSet, self).get_queryset()
|
||||
qs = qs.filter(project__members=self.request.user)
|
||||
return qs.distinct()
|
||||
|
||||
|
||||
class TaskStatusDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
model = TaskStatus
|
||||
serializer_class = TaskStatusSerializer
|
||||
permission_classes = (IsAuthenticated, TaskStatusDetailPermission,)
|
||||
#class TaskStatusDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
# model = TaskStatus
|
||||
# serializer_class = TaskStatusSerializer
|
||||
# permission_classes = (IsAuthenticated, TaskStatusDetailPermission,)
|
||||
|
||||
|
||||
class UserStoryStatusList(generics.ListCreateAPIView):
|
||||
class UserStoryStatusViewSet(ModelListViewSet):
|
||||
model = UserStoryStatus
|
||||
serializer_class = UserStoryStatusSerializer
|
||||
filter_fields = ('project',)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
filter_fields = ('project',)
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.model.objects.filter(project__members=self.request.user)
|
||||
qs = super(UserStoryStatusViewSet, self).get_queryset()
|
||||
qs = qs.filter(project__members=self.request.user)
|
||||
return qs.distinct()
|
||||
|
||||
|
||||
class UserStoryStatusDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
model = UserStoryStatus
|
||||
serializer_class = UserStoryStatusSerializer
|
||||
permission_classes = (IsAuthenticated, UserStoryStatusDetailPermission,)
|
||||
#class UserStoryStatusDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
# model = UserStoryStatus
|
||||
# serializer_class = UserStoryStatusSerializer
|
||||
# permission_classes = (IsAuthenticated, UserStoryStatusDetailPermission,)
|
||||
|
||||
|
||||
class PriorityList(generics.ListCreateAPIView):
|
||||
class PriorityViewSet(ModelListViewSet):
|
||||
model = Priority
|
||||
serializer_class = PrioritySerializer
|
||||
filter_fields = ('project',)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
filter_fields = ('project',)
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.model.objects.filter(project__members=self.request.user)
|
||||
qs = super(PriorityViewSet, self).get_queryset()
|
||||
qs = qs.filter(project__members=self.request.user)
|
||||
return qs.distinct()
|
||||
|
||||
|
||||
class PriorityDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
model = Priority
|
||||
serializer_class = PrioritySerializer
|
||||
permission_classes = (IsAuthenticated, PriorityDetailPermission,)
|
||||
#class PriorityDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
# model = Priority
|
||||
# serializer_class = PrioritySerializer
|
||||
# permission_classes = (IsAuthenticated, PriorityDetailPermission,)
|
||||
|
||||
|
||||
class IssueTypeList(generics.ListCreateAPIView):
|
||||
class IssueTypeViewSet(ModelListViewSet):
|
||||
model = IssueType
|
||||
serializer_class = IssueTypeSerializer
|
||||
filter_fields = ('project',)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
filter_fields = ('project',)
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.model.objects.filter(project__members=self.request.user)
|
||||
qs = super(IssueTypeViewSet, self).get_queryset()
|
||||
qs = qs.filter(project__members=self.request.user)
|
||||
return qs.distinct()
|
||||
|
||||
#class IssueTypeDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
# model = IssueType
|
||||
# serializer_class = IssueTypeSerializer
|
||||
# permission_classes = (IsAuthenticated, IssueTypeDetailPermission,)
|
||||
|
||||
|
||||
class PointsViewSet(ModelListViewSet):
|
||||
model = Points
|
||||
serializer_class = PointsSerializer
|
||||
permission_classes = (IsAuthenticated,)
|
||||
filter_fields = ('project',)
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super(PointsViewSet, self).get_queryset()
|
||||
qs = qs.filter(project__members=self.request.user)
|
||||
return qs.distinct()
|
||||
|
||||
|
||||
class IssueTypeDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
model = IssueType
|
||||
serializer_class = IssueTypeSerializer
|
||||
permission_classes = (IsAuthenticated, IssueTypeDetailPermission,)
|
||||
|
||||
|
||||
class PointsList(generics.ListCreateAPIView):
|
||||
model = Points
|
||||
serializer_class = PointsSerializer
|
||||
filter_fields = ('project',)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.model.objects.filter(project__members=self.request.user)
|
||||
return qs.distinct()
|
||||
|
||||
|
||||
class PointsDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
model = Points
|
||||
serializer_class = PointsSerializer
|
||||
permission_classes = (IsAuthenticated, PointsDetailPermission,)
|
||||
#class PointsDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
# model = Points
|
||||
# serializer_class = PointsSerializer
|
||||
# permission_classes = (IsAuthenticated, PointsDetailPermission,)
|
||||
|
|
|
@ -6,39 +6,52 @@ from rest_framework.urlpatterns import format_suffix_patterns
|
|||
from greenmine.scrum import api
|
||||
from greenmine.base import routers
|
||||
|
||||
#router = routers.Router(trailing_slash=False)
|
||||
#router.register("users", api.UsersViewSet, base_name="users")
|
||||
#router.register("roles", api.RolesViewSet, base_name="roles")
|
||||
#router.register("search", api.Search, base_name="search")
|
||||
#urlpatterns = router.urls
|
||||
|
||||
urlpatterns = format_suffix_patterns(patterns('',
|
||||
url(r'^projects/$', api.ProjectList.as_view(), name='project-list'),
|
||||
url(r'^projects/(?P<pk>[0-9]+)/$', api.ProjectDetail.as_view(), name='project-detail'),
|
||||
url(r'^milestones/$', api.MilestoneList.as_view(), name='milestone-list'),
|
||||
url(r'^milestones/(?P<pk>[0-9]+)/$', api.MilestoneDetail.as_view(), name='milestone-detail'),
|
||||
url(r'^user-stories/$', api.UserStoryList.as_view(), name='user-story-list'),
|
||||
url(r'^user-stories/(?P<pk>[0-9]+)/$', api.UserStoryDetail.as_view(), name='user-story-detail'),
|
||||
url(r'^user-stories/points/$', api.PointsList.as_view(), name='points-list'),
|
||||
url(r'^user-stories/points/(?P<pk>[0-9]+)/$', api.PointsDetail.as_view(), name='points-detail'),
|
||||
url(r'^user-stories/statuses/$', api.UserStoryStatusList.as_view(), name='user-story-status-list'),
|
||||
url(r'^user-stories/statuses/(?P<pk>[0-9]+)/$', api.UserStoryStatusDetail.as_view(), name='user-story-status-detail'),
|
||||
url(r'^issues/$', api.IssueList.as_view(), name='issues-list'),
|
||||
url(r'^issues/(?P<pk>[0-9]+)/$', api.IssueDetail.as_view(), name='issues-detail'),
|
||||
url(r'^issues/attachments/$', api.IssuesAttachmentList.as_view(), name='issues-attachment-list'),
|
||||
url(r'^issues/attachments/(?P<pk>[0-9]+)/$', api.IssuesAttachmentDetail.as_view(), name='issues-attachment-detail'),
|
||||
url(r'^issues/statuses/$', api.IssueStatusList.as_view(), name='issues-status-list'),
|
||||
url(r'^issues/statuses/(?P<pk>[0-9]+)/$', api.IssueStatusDetail.as_view(), name='issues-status-detail'),
|
||||
url(r'^issues/types/$', api.IssueTypeList.as_view(), name='issues-type-list'),
|
||||
url(r'^issues/types/(?P<pk>[0-9]+)/$', api.IssueTypeDetail.as_view(), name='issues-type-detail'),
|
||||
url(r'^tasks/$', api.TaskList.as_view(), name='tasks-list'),
|
||||
url(r'^tasks/(?P<pk>[0-9]+)/$', api.TaskDetail.as_view(), name='tasks-detail'),
|
||||
url(r'^tasks/attachments/$', api.TasksAttachmentList.as_view(), name='tasks-attachment-list'),
|
||||
url(r'^tasks/attachments/(?P<pk>[0-9]+)/$', api.TasksAttachmentDetail.as_view(), name='tasks-attachment-detail'),
|
||||
url(r'^severities/$', api.SeverityList.as_view(), name='severity-list'),
|
||||
url(r'^severities/(?P<pk>[0-9]+)/$', api.SeverityDetail.as_view(), name='severity-detail'),
|
||||
url(r'^tasks/statuses/$', api.TaskStatusList.as_view(), name='tasks-status-list'),
|
||||
url(r'^tasks/statuses/(?P<pk>[0-9]+)/$', api.TaskStatusDetail.as_view(), name='tasks-status-detail'),
|
||||
url(r'^priorities/$', api.PriorityList.as_view(), name='priority-list'),
|
||||
url(r'^priorities/(?P<pk>[0-9]+)/$', api.PriorityDetail.as_view(), name='priority-detail'),
|
||||
))
|
||||
router = routers.Router(trailing_slash=False)
|
||||
router.register(r"projects", api.ProjectViewSet, base_name="projects")
|
||||
router.register(r"milestones", api.MilestoneViewSet, base_name="milestones")
|
||||
router.register(r"userstories", api.UserStoryViewSet, base_name="userstories")
|
||||
router.register(r"issue-attachments", api.IssuesAttachmentViewSet, base_name="issue-attachments")
|
||||
router.register(r"task-attachments", api.TasksAttachmentViewSet, base_name="task-attachments")
|
||||
router.register(r"tasks", api.TaskViewSet, base_name="tasks")
|
||||
router.register(r"issues", api.IssueViewSet, base_name="issues")
|
||||
router.register(r"severities", api.SeverityViewSet, base_name="severities")
|
||||
router.register(r"issue-statuses", api.IssueStatusViewSet, base_name="issue-statuses")
|
||||
router.register(r"task-statuses", api.TaskStatusViewSet, base_name="task-statuses")
|
||||
router.register(r"userstory-statuses", api.UserStoryStatusViewSet, base_name="userstory-statuses")
|
||||
router.register(r"priorities", api.PriorityViewSet, base_name="priorities")
|
||||
router.register(r"issue-types", api.IssueTypeViewSet, base_name="issue-types")
|
||||
router.register(r"points", api.PointsViewSet, base_name="points")
|
||||
|
||||
urlpatterns = router.urls
|
||||
|
||||
#urlpatterns = format_suffix_patterns(patterns('',
|
||||
# url(r'^projects/$', api.ProjectList.as_view(), name='project-list'),
|
||||
# url(r'^projects/(?P<pk>[0-9]+)/$', api.ProjectDetail.as_view(), name='project-detail'),
|
||||
# url(r'^milestones/$', api.MilestoneList.as_view(), name='milestone-list'),
|
||||
# url(r'^milestones/(?P<pk>[0-9]+)/$', api.MilestoneDetail.as_view(), name='milestone-detail'),
|
||||
# url(r'^user-stories/$', api.UserStoryList.as_view(), name='user-story-list'),
|
||||
# url(r'^user-stories/(?P<pk>[0-9]+)/$', api.UserStoryDetail.as_view(), name='user-story-detail'),
|
||||
# url(r'^user-stories/points/$', api.PointsList.as_view(), name='points-list'),
|
||||
# url(r'^user-stories/points/(?P<pk>[0-9]+)/$', api.PointsDetail.as_view(), name='points-detail'),
|
||||
# url(r'^user-stories/statuses/$', api.UserStoryStatusList.as_view(), name='user-story-status-list'),
|
||||
# url(r'^user-stories/statuses/(?P<pk>[0-9]+)/$', api.UserStoryStatusDetail.as_view(), name='user-story-status-detail'),
|
||||
# url(r'^issues/$', api.IssueList.as_view(), name='issues-list'),
|
||||
# url(r'^issues/(?P<pk>[0-9]+)/$', api.IssueDetail.as_view(), name='issues-detail'),
|
||||
# url(r'^issues/attachments/$', api.IssuesAttachmentList.as_view(), name='issues-attachment-list'),
|
||||
# url(r'^issues/attachments/(?P<pk>[0-9]+)/$', api.IssuesAttachmentDetail.as_view(), name='issues-attachment-detail'),
|
||||
# url(r'^issues/statuses/$', api.IssueStatusList.as_view(), name='issues-status-list'),
|
||||
# url(r'^issues/statuses/(?P<pk>[0-9]+)/$', api.IssueStatusDetail.as_view(), name='issues-status-detail'),
|
||||
# url(r'^issues/types/$', api.IssueTypeList.as_view(), name='issues-type-list'),
|
||||
# url(r'^issues/types/(?P<pk>[0-9]+)/$', api.IssueTypeDetail.as_view(), name='issues-type-detail'),
|
||||
# url(r'^tasks/$', api.TaskList.as_view(), name='tasks-list'),
|
||||
# url(r'^tasks/(?P<pk>[0-9]+)/$', api.TaskDetail.as_view(), name='tasks-detail'),
|
||||
# url(r'^tasks/attachments/$', api.TasksAttachmentList.as_view(), name='tasks-attachment-list'),
|
||||
# url(r'^tasks/attachments/(?P<pk>[0-9]+)/$', api.TasksAttachmentDetail.as_view(), name='tasks-attachment-detail'),
|
||||
# url(r'^severities/$', api.SeverityList.as_view(), name='severity-list'),
|
||||
# url(r'^severities/(?P<pk>[0-9]+)/$', api.SeverityDetail.as_view(), name='severity-detail'),
|
||||
# url(r'^tasks/statuses/$', api.TaskStatusList.as_view(), name='tasks-status-list'),
|
||||
# url(r'^tasks/statuses/(?P<pk>[0-9]+)/$', api.TaskStatusDetail.as_view(), name='tasks-status-detail'),
|
||||
# url(r'^priorities/$', api.PriorityList.as_view(), name='priority-list'),
|
||||
# url(r'^priorities/(?P<pk>[0-9]+)/$', api.PriorityDetail.as_view(), name='priority-detail'),
|
||||
#))
|
||||
|
|
|
@ -321,7 +321,7 @@ REST_FRAMEWORK = {
|
|||
'DEFAULT_AUTHENTICATION_CLASSES': (
|
||||
'greenmine.base.auth.SessionAuthentication',
|
||||
),
|
||||
'FILTER_BACKEND': 'rest_framework.filters.DjangoFilterBackend',
|
||||
'FILTER_BACKEND': 'greenmine.base.filters.SimpleFilterBackend',
|
||||
}
|
||||
|
||||
from .appdefaults import *
|
||||
|
|
Loading…
Reference in New Issue