Port scrum api views to use viewsets and routers.

remotes/origin/enhancement/email-actions
Andrey Antukh 2013-07-23 21:41:51 +02:00
parent 4804c7a12b
commit 2d31e9754d
5 changed files with 229 additions and 242 deletions

27
greenmine/base/filters.py Normal file
View File

@ -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

View File

@ -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"]

View File

@ -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,)

View File

@ -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'),
#))

View File

@ -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 *