diff --git a/greenmine/projects/issues/api.py b/greenmine/projects/issues/api.py index 34bf21ed..3a1e68ba 100644 --- a/greenmine/projects/issues/api.py +++ b/greenmine/projects/issues/api.py @@ -49,7 +49,7 @@ class IssueStatusViewSet(ModelListViewSet): filter_fields = ("project",) -class IssuesAttachmentViewSet(ModelCrudViewSet): +class IssueAttachmentViewSet(ModelCrudViewSet): model = Attachment serializer_class = AttachmentSerializer permission_classes = (IsAuthenticated, AttachmentPermission) @@ -58,14 +58,14 @@ class IssuesAttachmentViewSet(ModelCrudViewSet): def get_queryset(self): ct = ContentType.objects.get_for_model(models.Issue) - qs = super(IssuesAttachmentViewSet, self).get_queryset() + qs = super(IssueAttachmentViewSet, self).get_queryset() qs = qs.filter(content_type=ct) return qs.distinct() def pre_save(self, obj): - super(IssuesAttachmentViewSet, self).pre_save(obj) + super(IssueAttachmentViewSet, self).pre_save(obj) if not obj.id: - obj.content_type = ContentType.objects.get_for_model(Issue) + obj.content_type = ContentType.objects.get_for_model(models.Issue) obj.owner = self.request.user diff --git a/greenmine/projects/questions/api.py b/greenmine/projects/questions/api.py index c7d399bf..e5356e97 100644 --- a/greenmine/projects/questions/api.py +++ b/greenmine/projects/questions/api.py @@ -26,7 +26,7 @@ class QuestionStatusViewSet(ModelListViewSet): filter_fields = ("project",) -class QuestionsAttachmentViewSet(ModelCrudViewSet): +class QuestionAttachmentViewSet(ModelCrudViewSet): model = Attachment serializer_class = AttachmentSerializer permission_classes = (IsAuthenticated, AttachmentPermission) @@ -35,14 +35,14 @@ class QuestionsAttachmentViewSet(ModelCrudViewSet): def get_queryset(self): ct = ContentType.objects.get_for_model(models.Question) - qs = super(QuestionsAttachmentViewSet, self).get_queryset() + qs = super(QuestionAttachmentViewSet, self).get_queryset() qs = qs.filter(content_type=ct) return qs.distinct() def pre_save(self, obj): - super(QuestionsAttachmentViewSet, self).pre_save(obj) + super(QuestionAttachmentViewSet, self).pre_save(obj) if not obj.id: - obj.content_type = ContentType.objects.get_for_model(Question) + obj.content_type = ContentType.objects.get_for_model(models.Question) obj.owner = self.request.user diff --git a/greenmine/projects/tasks/api.py b/greenmine/projects/tasks/api.py index a10e61a1..bc5e0427 100644 --- a/greenmine/projects/tasks/api.py +++ b/greenmine/projects/tasks/api.py @@ -24,7 +24,7 @@ class TaskStatusViewSet(ModelListViewSet): filter_fields = ("project",) -class TasksAttachmentViewSet(ModelCrudViewSet): +class TaskAttachmentViewSet(ModelCrudViewSet): model = Attachment serializer_class = AttachmentSerializer permission_classes = (IsAuthenticated, AttachmentPermission,) @@ -33,14 +33,14 @@ class TasksAttachmentViewSet(ModelCrudViewSet): def get_queryset(self): ct = ContentType.objects.get_for_model(models.Task) - qs = super(TasksAttachmentViewSet, self).get_queryset() + qs = super(TaskAttachmentViewSet, self).get_queryset() qs = qs.filter(content_type=ct) return qs.distinct() def pre_save(self, obj): - super(TasksAttachmentViewSet, self).pre_save(obj) + super(TaskAttachmentViewSet, self).pre_save(obj) if not obj.id: - obj.content_type = ContentType.objects.get_for_model(Task) + obj.content_type = ContentType.objects.get_for_model(models.Task) obj.owner = self.request.user diff --git a/greenmine/projects/userstories/api.py b/greenmine/projects/userstories/api.py index 2c07c69f..2ac4a2c8 100644 --- a/greenmine/projects/userstories/api.py +++ b/greenmine/projects/userstories/api.py @@ -1,17 +1,22 @@ # -*- coding: utf-8 -*- -from rest_framework.permissions import IsAuthenticated +from django.contrib.contenttypes.models import ContentType -import reversion +from rest_framework.permissions import IsAuthenticated from greenmine.base import filters from greenmine.base.api import ModelCrudViewSet, ModelListViewSet from greenmine.base.notifications.api import NotificationSenderMixin +from greenmine.projects.permissions import AttachmentPermission +from greenmine.projects.serializers import AttachmentSerializer +from greenmine.projects.models import Attachment from . import serializers from . import models from . import permissions +import reversion + class PointsViewSet(ModelListViewSet): model = models.Points @@ -29,6 +34,26 @@ class UserStoryStatusViewSet(ModelListViewSet): filter_fields = ('project',) +class UserStoryAttachmentViewSet(ModelCrudViewSet): + model = Attachment + serializer_class = AttachmentSerializer + permission_classes = (IsAuthenticated, AttachmentPermission,) + filter_backends = (filters.IsProjectMemberFilterBackend,) + filter_fields = ["project", "object_id"] + + def get_queryset(self): + ct = ContentType.objects.get_for_model(models.UserStory) + qs = super(UserStoryAttachmentViewSet, self).get_queryset() + qs = qs.filter(content_type=ct) + return qs.distinct() + + def pre_save(self, obj): + super(UserStoryAttachmentViewSet, self).pre_save(obj) + if not obj.id: + obj.content_type = ContentType.objects.get_for_model(models.UserStory) + obj.owner = self.request.user + + class UserStoryViewSet(NotificationSenderMixin, ModelCrudViewSet): model = models.UserStory serializer_class = serializers.UserStorySerializer diff --git a/greenmine/projects/wiki/api.py b/greenmine/projects/wiki/api.py index eab8b1d5..5bbedfb0 100644 --- a/greenmine/projects/wiki/api.py +++ b/greenmine/projects/wiki/api.py @@ -1,32 +1,48 @@ # -*- coding: utf-8 -*- -from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist -from django.utils.translation import ugettext as _ -from django.http import Http404 +from django.contrib.contenttypes.models import ContentType -from rest_framework import generics -from rest_framework import filters from rest_framework.permissions import IsAuthenticated -from greenmine.base import api as api_views from greenmine.base import filters +from greenmine.base.api import ModelCrudViewSet, ModelListViewSet +from greenmine.base.notifications.api import NotificationSenderMixin +from greenmine.projects.permissions import AttachmentPermission +from greenmine.projects.serializers import AttachmentSerializer +from greenmine.projects.models import Attachment from . import models -from . import serializers from . import permissions +from . import serializers -class WikiViewSet(api_views.ModelCrudViewSet): +class WikiAttachmentViewSet(ModelCrudViewSet): + model = Attachment + serializer_class = AttachmentSerializer + permission_classes = (IsAuthenticated, AttachmentPermission) + filter_backends = (filters.IsProjectMemberFilterBackend,) + filter_fields = ["project", "object_id"] + + def get_queryset(self): + ct = ContentType.objects.get_for_model(models.Wiki) + qs = super(WikiAttachmentViewSet, self).get_queryset() + qs = qs.filter(content_type=ct) + return qs.distinct() + + def pre_save(self, obj): + super(WikiAttachmentViewSet, self).pre_save(obj) + if not obj.id: + obj.content_type = ContentType.objects.get_for_model(models.Wiki) + obj.owner = self.request.user + + +class WikiViewSet(ModelCrudViewSet): model = models.WikiPage serializer_class = serializers.WikiPageSerializer permission_classes = (IsAuthenticated,) filter_backends = (filters.IsProjectMemberFilterBackend,) filter_fields = ["project", "slug"] - def get_queryset(self): - qs = super(WikiViewSet, self).get_queryset() - return qs.filter(project__members=self.request.user) - def pre_save(self, obj): if not obj.owner: obj.owner = self.request.user diff --git a/greenmine/routers.py b/greenmine/routers.py index 6924564c..e9eec5d8 100644 --- a/greenmine/routers.py +++ b/greenmine/routers.py @@ -6,14 +6,14 @@ from greenmine.base.searches.api import SearchViewSet from greenmine.projects.api import ProjectViewSet from greenmine.projects.milestones.api import MilestoneViewSet from greenmine.projects.userstories.api import (PointsViewSet, UserStoryStatusViewSet, - UserStoryViewSet,) -from greenmine.projects.tasks.api import TaskStatusViewSet, TaskViewSet, TasksAttachmentViewSet + UserStoryAttachmentViewSet, UserStoryViewSet,) +from greenmine.projects.tasks.api import TaskStatusViewSet, TaskViewSet, TaskAttachmentViewSet from greenmine.projects.issues.api import (PriorityViewSet, SeverityViewSet, IssueStatusViewSet, IssueTypeViewSet, - IssueViewSet, IssuesAttachmentViewSet,) + IssueViewSet, IssueAttachmentViewSet,) from greenmine.projects.questions.api import (QuestionStatusViewSet, QuestionViewSet, - QuestionsAttachmentViewSet,) -from greenmine.projects.wiki.api import WikiViewSet + QuestionAttachmentViewSet,) +from greenmine.projects.wiki.api import (WikiViewSet, WikiAttachmentViewSet,) router = routers.DefaultRouter(trailing_slash=False) @@ -35,11 +35,12 @@ router.register(r"milestones", MilestoneViewSet, base_name="milestones") # greenmine.projects.userstories router.register(r"points", PointsViewSet, base_name="points") router.register(r"userstory-statuses", UserStoryStatusViewSet, base_name="userstory-statuses") +router.register(r"userstory-attachments", UserStoryAttachmentViewSet, base_name="userstory-attachments") router.register(r"userstories", UserStoryViewSet, base_name="userstories") # greenmine.projects.tasks router.register(r"task-statuses", TaskStatusViewSet, base_name="task-statuses") -router.register(r"task-attachments", TasksAttachmentViewSet, base_name="task-attachments") +router.register(r"task-attachments", TaskAttachmentViewSet, base_name="task-attachments") router.register(r"tasks", TaskViewSet, base_name="tasks") # greenmine.projects.issues @@ -47,12 +48,12 @@ router.register(r"severities", SeverityViewSet, base_name="severities") router.register(r"priorities", PriorityViewSet, base_name="priorities") router.register(r"issue-statuses", IssueStatusViewSet, base_name="issue-statuses") router.register(r"issue-types", IssueTypeViewSet, base_name="issue-types") -router.register(r"issue-attachments", IssuesAttachmentViewSet, base_name="issue-attachments") +router.register(r"issue-attachments", IssueAttachmentViewSet, base_name="issue-attachments") router.register(r"issues", IssueViewSet, base_name="issues") #greenmine.projects.questions router.register(r"question-statuses", QuestionStatusViewSet, base_name="question-statuses") -router.register(r"question-attachments", QuestionsAttachmentViewSet, +router.register(r"question-attachments", QuestionAttachmentViewSet, base_name="question-attachments") router.register(r"questions", QuestionViewSet, base_name="questions") @@ -61,4 +62,5 @@ router.register(r"questions", QuestionViewSet, base_name="questions") # greenmine.projects.wiki router.register(r"wiki", WikiViewSet, base_name="wiki") +router.register(r"wiki-attachments", WikiAttachmentViewSet, base_name="wiki-attachments")