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 from rest_framework import routers
# Special router for actions. # 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}'}, mapping={'{httpmethod}': '{methodname}'},
name='{basename}-{methodnamehyphen}', name='{basename}-{methodnamehyphen}',
initkwargs={}) initkwargs={})
class Router(routers.DefaultRouter): 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 from django.db.models import Q
import django_filters from rest_framework import mixins, viewsets
from rest_framework import generics
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from greenmine.base.models import * from greenmine.base.models import *
@ -13,366 +12,306 @@ from greenmine.scrum.serializers import *
from greenmine.scrum.models import * from greenmine.scrum.models import *
from greenmine.scrum.permissions import * from greenmine.scrum.permissions import *
# Generic viewset subclasses for this module
class UserStoryFilter(django_filters.FilterSet): class ModelCrudViewSet(mixins.CreateModelMixin, mixins.ListModelMixin,
no_milestone = django_filters.NumberFilter(name="milestone", lookup_type='isnull') mixins.RetrieveModelMixin, mixins.UpdateModelMixin,
mixins.DestroyModelMixin, viewsets.GenericViewSet):
class Meta: pass
model = UserStory
fields = ['project', 'milestone', 'no_milestone']
class SimpleFilterMixin(object): class ModelListViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin,
filter_fields = [] viewsets.GenericViewSet):
filter_special_fields = [] pass
_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 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): # ViewSets definition
qs = self.model.objects.filter(
Q(owner=self.request.user) | Q(members=self.request.user)
)
return qs.distinct()
def pre_save(self, obj): class ProjectViewSet(NotificationSenderMixin, ModelCrudViewSet):
obj.owner = self.request.user queryset = Project.objects.all()
class ProjectDetail(NotificationSenderMixin, generics.RetrieveUpdateDestroyAPIView):
model = Project
serializer_class = ProjectSerializer serializer_class = ProjectSerializer
permission_classes = (IsAuthenticated, ProjectDetailPermission,) permission_classes = (IsAuthenticated, ProjectDetailPermission,)
create_notification_template = "create_project_notification" create_notification_template = "create_project_notification"
update_notification_template = "update_project_notification" update_notification_template = "update_project_notification"
destroy_notification_template = "destroy_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): 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() return qs.distinct()
def pre_save(self, obj): def pre_save(self, obj):
super(ProjectViewSet, self).pre_save(obj)
obj.owner = self.request.user obj.owner = self.request.user
class MilestoneDetail(NotificationSenderMixin, generics.RetrieveUpdateDestroyAPIView):
model = Milestone class MilestoneViewSet(NotificationSenderMixin, ModelCrudViewSet):
queryset = Milestone.objects.all()
serializer_class = MilestoneSerializer serializer_class = MilestoneSerializer
permission_classes = (IsAuthenticated, MilestoneDetailPermission,) permission_classes = (IsAuthenticated, MilestoneDetailPermission,)
create_notification_template = "create_milestone_notification" create_notification_template = "create_milestone_notification"
update_notification_template = "update_milestone_notification" update_notification_template = "update_milestone_notification"
destroy_notification_template = "destroy_milestone_notification" destroy_notification_template = "destroy_milestone_notification"
filter_fields = ('project',)
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"
def get_queryset(self): def get_queryset(self):
qs = self.model.objects.filter(project__members=self.request.user) qs = super(MilestoneViewSet, self).get_queryset()
return qs.distinct() return qs.filter(project__members=self.request.user).distinct()
def pre_save(self, obj): def pre_save(self, obj):
super(MilestoneViewSet, self).pre_save(obj)
obj.owner = self.request.user obj.owner = self.request.user
class UserStoryDetail(NotificationSenderMixin, generics.RetrieveUpdateDestroyAPIView): class UserStoryViewSet(NotificationSenderMixin, ModelCrudViewSet):
model = UserStory queryset = UserStory.objects.all()
serializer_class = UserStorySerializer serializer_class = UserStorySerializer
permission_classes = (IsAuthenticated, UserStoryDetailPermission,) permission_classes = (IsAuthenticated, UserStoryDetailPermission,)
create_notification_template = "create_user_story_notification" create_notification_template = "create_user_story_notification"
update_notification_template = "update_user_story_notification" update_notification_template = "update_user_story_notification"
destroy_notification_template = "destroy_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): def post_save(self, obj, created=False):
with reversion.create_revision(): with reversion.create_revision():
if "comment" in self.request.DATA: if "comment" in self.request.DATA:
# Update the comment in the last version # Update the comment in the last version
reversion.set_comment(self.request.DATA['comment']) 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 model = Attachment
serializer_class = AttachmentSerializer serializer_class = AttachmentSerializer
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated, AttachmentDetailPermission,)
filter_class = AttachmentFilter
filter_fields = ["project", "object_id"]
def get_queryset(self): def get_queryset(self):
ct = ContentType.objects.get_for_model(Issue) ct = ContentType.objects.get_for_model(Issue)
qs = super(IssuesAttachmentList, self).get_queryset()\ qs = super(IssuesAttachmentViewSet, self).get_queryset()
.filter(project__members=self.request.user)\
.filter(content_type=ct) qs = qs.filter(project__members=self.request.user)
qs = qs.filter(content_type=ct)
return qs.distinct() return qs.distinct()
def pre_save(self, obj): def pre_save(self, obj):
super(IssuesAttachmentViewSet, self).pre_save(obj)
obj.content_type = ContentType.objects.get_for_model(Issue) obj.content_type = ContentType.objects.get_for_model(Issue)
obj.owner = self.request.user obj.owner = self.request.user
class IssuesAttachmentDetail(generics.RetrieveUpdateDestroyAPIView): class TasksAttachmentViewSet(ModelCrudViewSet):
model = Attachment model = Attachment
serializer_class = AttachmentSerializer serializer_class = AttachmentSerializer
permission_classes = (IsAuthenticated, AttachmentDetailPermission,) permission_classes = (IsAuthenticated, AttachmentDetailPermission,)
filter_fields = ["project", "object_id"]
class TasksAttachmentList(generics.ListCreateAPIView):
model = Attachment
serializer_class = AttachmentSerializer
permission_classes = (IsAuthenticated,)
filter_class = AttachmentFilter
def get_queryset(self): def get_queryset(self):
ct = ContentType.objects.get_for_model(Task) ct = ContentType.objects.get_for_model(Task)
qs = super(TasksAttachmentList, self).get_queryset()\ qs = super(TasksAttachmentViewSet, self).get_queryset()
.filter(project__members=self.request.user)\
.filter(content_type=ct) qs = qs.filter(project__members=self.request.user)
qs = qs.filter(content_type=ct)
return qs.distinct() return qs.distinct()
def pre_save(self, obj): def pre_save(self, obj):
super(TasksAttachmentViewSet, self).pre_save(obj)
obj.content_type = ContentType.objects.get_for_model(Task) obj.content_type = ContentType.objects.get_for_model(Task)
obj.owner = self.request.user obj.owner = self.request.user
class TasksAttachmentDetail(generics.RetrieveUpdateDestroyAPIView): class TaskViewSet(NotificationSenderMixin, ModelCrudViewSet):
model = Attachment queryset = Task.objects.all()
serializer_class = AttachmentSerializer
permission_classes = (IsAuthenticated, AttachmentDetailPermission,)
class TaskList(NotificationSenderMixin, generics.ListCreateAPIView):
model = Task
serializer_class = TaskSerializer serializer_class = TaskSerializer
filter_fields = ('user_story', 'milestone', 'project') permission_classes = (IsAuthenticated, TaskDetailPermission,)
permission_classes = (IsAuthenticated,)
create_notification_template = "create_task_notification" create_notification_template = "create_task_notification"
update_notification_template = "update_task_notification" update_notification_template = "update_task_notification"
destroy_notification_template = "destroy_task_notification" destroy_notification_template = "destroy_task_notification"
filter_fields = ['user_story', 'milestone', 'project']
def get_queryset(self): 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() return qs.distinct()
def pre_save(self, obj): def pre_save(self, obj):
super(TaskViewSet, self).pre_save(obj)
obj.owner = self.request.user obj.owner = self.request.user
obj.milestone = obj.user_story.milestone 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): def post_save(self, obj, created=False):
with reversion.create_revision(): with reversion.create_revision():
if "comment" in self.request.DATA: if "comment" in self.request.DATA:
# Update the comment in the last version # Update the comment in the last version
reversion.set_comment(self.request.DATA['comment']) 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): class IssueViewSet(NotificationSenderMixin, ModelCrudViewSet):
obj.owner = self.request.user queryset = Issue.objects.all()
def get_queryset(self):
qs = self.model.objects.filter(project__members=self.request.user)
return qs.distinct()
class IssueDetail(NotificationSenderMixin, generics.RetrieveUpdateDestroyAPIView):
model = Issue
serializer_class = IssueSerializer serializer_class = IssueSerializer
permission_classes = (IsAuthenticated, IssueDetailPermission,) permission_classes = (IsAuthenticated, IssueDetailPermission,)
create_notification_template = "create_issue_notification" create_notification_template = "create_issue_notification"
update_notification_template = "update_issue_notification" update_notification_template = "update_issue_notification"
destroy_notification_template = "destroy_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): def post_save(self, obj, created=False):
with reversion.create_revision(): with reversion.create_revision():
if "comment" in self.request.DATA: if "comment" in self.request.DATA:
# Update the comment in the last version # Update the comment in the last version
reversion.set_comment(self.request.DATA['comment']) reversion.set_comment(self.request.DATA['comment'])
super(IssueDetail, self).post_save(obj, created) super(IssueViewSet, self).post_save(obj, created)
class SeverityList(generics.ListCreateAPIView):
model = Severity
serializer_class = SeveritySerializer
filter_fields = ('project',)
permission_classes = (IsAuthenticated,)
def get_queryset(self): 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() return qs.distinct()
class SeverityDetail(generics.RetrieveUpdateDestroyAPIView): class SeverityViewSet(ModelListViewSet):
model = Severity queryset = Severity.objects.all()
serializer_class = SeveritySerializer 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): #class SeverityDetail(generics.RetrieveUpdateDestroyAPIView):
model = IssueStatus # model = Severity
# serializer_class = SeveritySerializer
# permission_classes = (IsAuthenticated, SeverityDetailPermission,)
class IssueStatusViewSet(ModelListViewSet):
queryset = IssueStatus.objects.all()
serializer_class = IssueStatusSerializer serializer_class = IssueStatusSerializer
filter_fields = ('project',) filter_fields = ('project',)
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated,)
def get_queryset(self): 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() return qs.distinct()
class IssueStatusDetail(generics.RetrieveUpdateDestroyAPIView): class TaskStatusViewSet(ModelListViewSet):
model = IssueStatus
serializer_class = IssueStatusSerializer
permission_classes = (IsAuthenticated, IssueStatusDetailPermission,)
class TaskStatusList(SimpleFilterMixin, generics.ListCreateAPIView):
model = TaskStatus model = TaskStatus
serializer_class = TaskStatusSerializer serializer_class = TaskStatusSerializer
filter_fields = ('project',)
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated,)
filter_fields = ('project',)
def get_queryset(self): 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() return qs.distinct()
class TaskStatusDetail(generics.RetrieveUpdateDestroyAPIView): #class TaskStatusDetail(generics.RetrieveUpdateDestroyAPIView):
model = TaskStatus # model = TaskStatus
serializer_class = TaskStatusSerializer # serializer_class = TaskStatusSerializer
permission_classes = (IsAuthenticated, TaskStatusDetailPermission,) # permission_classes = (IsAuthenticated, TaskStatusDetailPermission,)
class UserStoryStatusList(generics.ListCreateAPIView): class UserStoryStatusViewSet(ModelListViewSet):
model = UserStoryStatus model = UserStoryStatus
serializer_class = UserStoryStatusSerializer serializer_class = UserStoryStatusSerializer
filter_fields = ('project',)
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated,)
filter_fields = ('project',)
def get_queryset(self): 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() return qs.distinct()
class UserStoryStatusDetail(generics.RetrieveUpdateDestroyAPIView): #class UserStoryStatusDetail(generics.RetrieveUpdateDestroyAPIView):
model = UserStoryStatus # model = UserStoryStatus
serializer_class = UserStoryStatusSerializer # serializer_class = UserStoryStatusSerializer
permission_classes = (IsAuthenticated, UserStoryStatusDetailPermission,) # permission_classes = (IsAuthenticated, UserStoryStatusDetailPermission,)
class PriorityList(generics.ListCreateAPIView): class PriorityViewSet(ModelListViewSet):
model = Priority model = Priority
serializer_class = PrioritySerializer serializer_class = PrioritySerializer
filter_fields = ('project',)
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated,)
filter_fields = ('project',)
def get_queryset(self): 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() return qs.distinct()
class PriorityDetail(generics.RetrieveUpdateDestroyAPIView): #class PriorityDetail(generics.RetrieveUpdateDestroyAPIView):
model = Priority # model = Priority
serializer_class = PrioritySerializer # serializer_class = PrioritySerializer
permission_classes = (IsAuthenticated, PriorityDetailPermission,) # permission_classes = (IsAuthenticated, PriorityDetailPermission,)
class IssueTypeList(generics.ListCreateAPIView): class IssueTypeViewSet(ModelListViewSet):
model = IssueType model = IssueType
serializer_class = IssueTypeSerializer serializer_class = IssueTypeSerializer
filter_fields = ('project',)
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated,)
filter_fields = ('project',)
def get_queryset(self): 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() return qs.distinct()
class IssueTypeDetail(generics.RetrieveUpdateDestroyAPIView): #class PointsDetail(generics.RetrieveUpdateDestroyAPIView):
model = IssueType # model = Points
serializer_class = IssueTypeSerializer # serializer_class = PointsSerializer
permission_classes = (IsAuthenticated, IssueTypeDetailPermission,) # permission_classes = (IsAuthenticated, PointsDetailPermission,)
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,)

View File

@ -6,39 +6,52 @@ from rest_framework.urlpatterns import format_suffix_patterns
from greenmine.scrum import api from greenmine.scrum import api
from greenmine.base import routers 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('', router = routers.Router(trailing_slash=False)
url(r'^projects/$', api.ProjectList.as_view(), name='project-list'), router.register(r"projects", api.ProjectViewSet, base_name="projects")
url(r'^projects/(?P<pk>[0-9]+)/$', api.ProjectDetail.as_view(), name='project-detail'), router.register(r"milestones", api.MilestoneViewSet, base_name="milestones")
url(r'^milestones/$', api.MilestoneList.as_view(), name='milestone-list'), router.register(r"userstories", api.UserStoryViewSet, base_name="userstories")
url(r'^milestones/(?P<pk>[0-9]+)/$', api.MilestoneDetail.as_view(), name='milestone-detail'), router.register(r"issue-attachments", api.IssuesAttachmentViewSet, base_name="issue-attachments")
url(r'^user-stories/$', api.UserStoryList.as_view(), name='user-story-list'), router.register(r"task-attachments", api.TasksAttachmentViewSet, base_name="task-attachments")
url(r'^user-stories/(?P<pk>[0-9]+)/$', api.UserStoryDetail.as_view(), name='user-story-detail'), router.register(r"tasks", api.TaskViewSet, base_name="tasks")
url(r'^user-stories/points/$', api.PointsList.as_view(), name='points-list'), router.register(r"issues", api.IssueViewSet, base_name="issues")
url(r'^user-stories/points/(?P<pk>[0-9]+)/$', api.PointsDetail.as_view(), name='points-detail'), router.register(r"severities", api.SeverityViewSet, base_name="severities")
url(r'^user-stories/statuses/$', api.UserStoryStatusList.as_view(), name='user-story-status-list'), router.register(r"issue-statuses", api.IssueStatusViewSet, base_name="issue-statuses")
url(r'^user-stories/statuses/(?P<pk>[0-9]+)/$', api.UserStoryStatusDetail.as_view(), name='user-story-status-detail'), router.register(r"task-statuses", api.TaskStatusViewSet, base_name="task-statuses")
url(r'^issues/$', api.IssueList.as_view(), name='issues-list'), router.register(r"userstory-statuses", api.UserStoryStatusViewSet, base_name="userstory-statuses")
url(r'^issues/(?P<pk>[0-9]+)/$', api.IssueDetail.as_view(), name='issues-detail'), router.register(r"priorities", api.PriorityViewSet, base_name="priorities")
url(r'^issues/attachments/$', api.IssuesAttachmentList.as_view(), name='issues-attachment-list'), router.register(r"issue-types", api.IssueTypeViewSet, base_name="issue-types")
url(r'^issues/attachments/(?P<pk>[0-9]+)/$', api.IssuesAttachmentDetail.as_view(), name='issues-attachment-detail'), router.register(r"points", api.PointsViewSet, base_name="points")
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'), urlpatterns = router.urls
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'), #urlpatterns = format_suffix_patterns(patterns('',
url(r'^tasks/$', api.TaskList.as_view(), name='tasks-list'), # url(r'^projects/$', api.ProjectList.as_view(), name='project-list'),
url(r'^tasks/(?P<pk>[0-9]+)/$', api.TaskDetail.as_view(), name='tasks-detail'), # url(r'^projects/(?P<pk>[0-9]+)/$', api.ProjectDetail.as_view(), name='project-detail'),
url(r'^tasks/attachments/$', api.TasksAttachmentList.as_view(), name='tasks-attachment-list'), # url(r'^milestones/$', api.MilestoneList.as_view(), name='milestone-list'),
url(r'^tasks/attachments/(?P<pk>[0-9]+)/$', api.TasksAttachmentDetail.as_view(), name='tasks-attachment-detail'), # url(r'^milestones/(?P<pk>[0-9]+)/$', api.MilestoneDetail.as_view(), name='milestone-detail'),
url(r'^severities/$', api.SeverityList.as_view(), name='severity-list'), # url(r'^user-stories/$', api.UserStoryList.as_view(), name='user-story-list'),
url(r'^severities/(?P<pk>[0-9]+)/$', api.SeverityDetail.as_view(), name='severity-detail'), # url(r'^user-stories/(?P<pk>[0-9]+)/$', api.UserStoryDetail.as_view(), name='user-story-detail'),
url(r'^tasks/statuses/$', api.TaskStatusList.as_view(), name='tasks-status-list'), # url(r'^user-stories/points/$', api.PointsList.as_view(), name='points-list'),
url(r'^tasks/statuses/(?P<pk>[0-9]+)/$', api.TaskStatusDetail.as_view(), name='tasks-status-detail'), # url(r'^user-stories/points/(?P<pk>[0-9]+)/$', api.PointsDetail.as_view(), name='points-detail'),
url(r'^priorities/$', api.PriorityList.as_view(), name='priority-list'), # url(r'^user-stories/statuses/$', api.UserStoryStatusList.as_view(), name='user-story-status-list'),
url(r'^priorities/(?P<pk>[0-9]+)/$', api.PriorityDetail.as_view(), name='priority-detail'), # 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': ( 'DEFAULT_AUTHENTICATION_CLASSES': (
'greenmine.base.auth.SessionAuthentication', 'greenmine.base.auth.SessionAuthentication',
), ),
'FILTER_BACKEND': 'rest_framework.filters.DjangoFilterBackend', 'FILTER_BACKEND': 'greenmine.base.filters.SimpleFilterBackend',
} }
from .appdefaults import * from .appdefaults import *