import django_filters from rest_framework import generics from rest_framework.permissions import IsAuthenticated from greenmine.scrum.serializers import * from greenmine.scrum.models import * from greenmine.scrum.permissions import * 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 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 ProjectList(generics.ListCreateAPIView): model = Project serializer_class = ProjectSerializer permission_classes = (IsAuthenticated,) def get_queryset(self): return self.model.objects.filter(members=self.request.user) def pre_save(self, obj): obj.owner = self.request.user class ProjectDetail(generics.RetrieveUpdateDestroyAPIView): model = Project serializer_class = ProjectSerializer permission_classes = (IsAuthenticated, ProjectDetailPermission,) class MilestoneList(generics.ListCreateAPIView): model = Milestone serializer_class = MilestoneSerializer filter_fields = ('project',) permission_classes = (IsAuthenticated,) def get_queryset(self): return self.model.objects.filter(project__members=self.request.user) def pre_save(self, obj): obj.owner = self.request.user class MilestoneDetail(generics.RetrieveUpdateDestroyAPIView): model = Milestone serializer_class = MilestoneSerializer permission_classes = (IsAuthenticated, MilestoneDetailPermission,) class UserStoryList(generics.ListCreateAPIView): model = UserStory serializer_class = UserStorySerializer filter_class = UserStoryFilter permission_classes = (IsAuthenticated,) def get_queryset(self): return self.model.objects.filter(project__members=self.request.user) def pre_save(self, obj): obj.owner = self.request.user class UserStoryDetail(generics.RetrieveUpdateDestroyAPIView): model = UserStory serializer_class = UserStorySerializer permission_classes = (IsAuthenticated, UserStoryDetailPermission,) class ChangeList(generics.ListCreateAPIView): model = Change serializer_class = ChangeSerializer permission_classes = (IsAuthenticated,) def get_queryset(self): return self.model.objects.filter(project__members=self.request.user) def pre_save(self, obj): obj.owner = self.request.user class ChangeDetail(generics.RetrieveUpdateDestroyAPIView): model = Change serializer_class = ChangeSerializer permission_classes = (IsAuthenticated, ChangeDetailPermission,) class ChangeAttachmentList(generics.ListCreateAPIView): model = ChangeAttachment serializer_class = ChangeAttachmentSerializer permission_classes = (IsAuthenticated,) def get_queryset(self): return self.model.objects.filter(change__project__members=self.request.user) def pre_save(self, obj): obj.owner = self.request.user class ChangeAttachmentDetail(generics.RetrieveUpdateDestroyAPIView): model = ChangeAttachment serializer_class = ChangeAttachmentSerializer permission_classes = (IsAuthenticated, ChangeAttachmentDetailPermission,) class TaskList(generics.ListCreateAPIView): model = Task serializer_class = TaskSerializer filter_fields = ('user_story', 'milestone', 'project') permission_classes = (IsAuthenticated,) def get_queryset(self): return self.model.objects.filter(project__members=self.request.user) def pre_save(self, obj): obj.owner = self.request.user class TaskDetail(generics.RetrieveUpdateDestroyAPIView): model = Task serializer_class = TaskSerializer permission_classes = (IsAuthenticated, TaskDetailPermission,) class IssueList(generics.ListCreateAPIView): model = Issue serializer_class = IssueSerializer filter_fields = ('project',) permission_classes = (IsAuthenticated,) def pre_save(self, obj): obj.owner = self.request.user def get_queryset(self): return self.model.objects.filter(project__members=self.request.user) class IssueDetail(generics.RetrieveUpdateDestroyAPIView): model = Issue serializer_class = IssueSerializer permission_classes = (IsAuthenticated, IssueDetailPermission,) 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']) class SeverityList(generics.ListCreateAPIView): model = Severity serializer_class = SeveritySerializer filter_fields = ('project',) permission_classes = (IsAuthenticated,) def get_queryset(self): return self.model.objects.filter(project__members=self.request.user) class SeverityDetail(generics.RetrieveUpdateDestroyAPIView): model = Severity serializer_class = SeveritySerializer permission_classes = (IsAuthenticated, SeverityDetailPermission,) class IssueStatusList(generics.ListCreateAPIView): model = IssueStatus serializer_class = IssueStatusSerializer filter_fields = ('project',) permission_classes = (IsAuthenticated,) def get_queryset(self): return self.model.objects.filter(project__members=self.request.user) class IssueStatusDetail(generics.RetrieveUpdateDestroyAPIView): model = IssueStatus serializer_class = IssueStatusSerializer permission_classes = (IsAuthenticated, IssueStatusDetailPermission,) class TaskStatusList(SimpleFilterMixin, generics.ListCreateAPIView): model = TaskStatus serializer_class = TaskStatusSerializer filter_fields = ('project',) permission_classes = (IsAuthenticated,) def get_queryset(self): return self.model.objects.filter(project__members=self.request.user) class TaskStatusDetail(generics.RetrieveUpdateDestroyAPIView): model = TaskStatus serializer_class = TaskStatusSerializer permission_classes = (IsAuthenticated, TaskStatusDetailPermission,) class UserStoryStatusList(generics.ListCreateAPIView): model = UserStoryStatus serializer_class = UserStoryStatusSerializer filter_fields = ('project',) permission_classes = (IsAuthenticated,) def get_queryset(self): return self.model.objects.filter(project__members=self.request.user) class UserStoryStatusDetail(generics.RetrieveUpdateDestroyAPIView): model = UserStoryStatus serializer_class = UserStoryStatusSerializer permission_classes = (IsAuthenticated, UserStoryStatusDetailPermission,) class PriorityList(generics.ListCreateAPIView): model = Priority serializer_class = PrioritySerializer filter_fields = ('project',) permission_classes = (IsAuthenticated,) def get_queryset(self): return self.model.objects.filter(project__members=self.request.user) class PriorityDetail(generics.RetrieveUpdateDestroyAPIView): model = Priority serializer_class = PrioritySerializer permission_classes = (IsAuthenticated, PriorityDetailPermission,) class IssueTypeList(generics.ListCreateAPIView): model = IssueType serializer_class = IssueTypeSerializer filter_fields = ('project',) permission_classes = (IsAuthenticated,) def get_queryset(self): return self.model.objects.filter(project__members=self.request.user) 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): return self.model.objects.filter(project__members=self.request.user) class PointsDetail(generics.RetrieveUpdateDestroyAPIView): model = Points serializer_class = PointsSerializer permission_classes = (IsAuthenticated, PointsDetailPermission,)