Add tasks attachments api views.
parent
b1b23c9f6b
commit
f2bf3f457c
|
@ -40,6 +40,7 @@ class ApiRoot(APIView):
|
||||||
'issues': reverse('issues-list', request=request, format=format),
|
'issues': reverse('issues-list', request=request, format=format),
|
||||||
'tasks': reverse('tasks-list', request=request, format=format),
|
'tasks': reverse('tasks-list', request=request, format=format),
|
||||||
'tasks/statuses': reverse('tasks-status-list', request=request, format=format),
|
'tasks/statuses': reverse('tasks-status-list', request=request, format=format),
|
||||||
|
'tasks/attachments': reverse('tasks-attachment-list', request=request, format=format),
|
||||||
'severities': reverse('severity-list', request=request, format=format),
|
'severities': reverse('severity-list', request=request, format=format),
|
||||||
'priorities': reverse('priority-list', request=request, format=format),
|
'priorities': reverse('priority-list', request=request, format=format),
|
||||||
'documents': reverse('document-list', request=request, format=format),
|
'documents': reverse('document-list', request=request, format=format),
|
||||||
|
|
|
@ -58,7 +58,7 @@ admin.site.register(models.Attachment, AttachmentAdmin)
|
||||||
|
|
||||||
|
|
||||||
class TaskAdmin(reversion.VersionAdmin):
|
class TaskAdmin(reversion.VersionAdmin):
|
||||||
list_display = ["subject", "user_story", "milestone", "project", "user_story_id"]
|
list_display = ["subject", "ref", "user_story", "milestone", "project", "user_story_id"]
|
||||||
list_filter = ["user_story", "milestone", "project"]
|
list_filter = ["user_story", "milestone", "project"]
|
||||||
|
|
||||||
def user_story_id(self, instance):
|
def user_story_id(self, instance):
|
||||||
|
|
|
@ -102,7 +102,7 @@ class UserStoryDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
permission_classes = (IsAuthenticated, UserStoryDetailPermission,)
|
permission_classes = (IsAuthenticated, UserStoryDetailPermission,)
|
||||||
|
|
||||||
|
|
||||||
class IssuesAttachmentFilter(django_filters.FilterSet):
|
class AttachmentFilter(django_filters.FilterSet):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Attachment
|
model = Attachment
|
||||||
fields = ['project', 'object_id']
|
fields = ['project', 'object_id']
|
||||||
|
@ -112,7 +112,7 @@ class IssuesAttachmentList(generics.ListCreateAPIView):
|
||||||
model = Attachment
|
model = Attachment
|
||||||
serializer_class = AttachmentSerializer
|
serializer_class = AttachmentSerializer
|
||||||
permission_classes = (IsAuthenticated,)
|
permission_classes = (IsAuthenticated,)
|
||||||
filter_class = IssuesAttachmentFilter
|
filter_class = AttachmentFilter
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
ct = ContentType.objects.get_for_model(Issue)
|
ct = ContentType.objects.get_for_model(Issue)
|
||||||
|
@ -131,6 +131,29 @@ class IssuesAttachmentDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
permission_classes = (IsAuthenticated, AttachmentDetailPermission,)
|
permission_classes = (IsAuthenticated, AttachmentDetailPermission,)
|
||||||
|
|
||||||
|
|
||||||
|
class TasksAttachmentList(generics.ListCreateAPIView):
|
||||||
|
model = Attachment
|
||||||
|
serializer_class = AttachmentSerializer
|
||||||
|
permission_classes = (IsAuthenticated,)
|
||||||
|
filter_class = AttachmentFilter
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
ct = ContentType.objects.get_for_model(Task)
|
||||||
|
return super(TasksAttachmentList, self).get_queryset()\
|
||||||
|
.filter(project__members=self.request.user)\
|
||||||
|
.filter(content_type=ct)
|
||||||
|
|
||||||
|
def pre_save(self, 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 TaskList(generics.ListCreateAPIView):
|
class TaskList(generics.ListCreateAPIView):
|
||||||
model = Task
|
model = Task
|
||||||
serializer_class = TaskSerializer
|
serializer_class = TaskSerializer
|
||||||
|
@ -150,6 +173,12 @@ class TaskDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
serializer_class = TaskSerializer
|
serializer_class = TaskSerializer
|
||||||
permission_classes = (IsAuthenticated, TaskDetailPermission,)
|
permission_classes = (IsAuthenticated, TaskDetailPermission,)
|
||||||
|
|
||||||
|
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 IssueList(generics.ListCreateAPIView):
|
class IssueList(generics.ListCreateAPIView):
|
||||||
model = Issue
|
model = Issue
|
||||||
|
|
|
@ -68,11 +68,53 @@ class AttachmentSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
class TaskSerializer(serializers.ModelSerializer):
|
class TaskSerializer(serializers.ModelSerializer):
|
||||||
tags = PickleField(blank=True, default=[])
|
tags = PickleField(blank=True, default=[])
|
||||||
|
comment = serializers.SerializerMethodField('get_comment')
|
||||||
|
history = serializers.SerializerMethodField('get_history')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Task
|
model = Task
|
||||||
fields = ()
|
fields = ()
|
||||||
|
|
||||||
|
def get_comment(self, obj):
|
||||||
|
return ''
|
||||||
|
|
||||||
|
def get_issues_diff(self, old_issue_version, new_issue_version):
|
||||||
|
old_obj = old_issue_version.field_dict
|
||||||
|
new_obj = new_issue_version.field_dict
|
||||||
|
|
||||||
|
diff_dict = {
|
||||||
|
'modified_date': new_obj['modified_date'],
|
||||||
|
'by': old_issue_version.revision.user,
|
||||||
|
'comment': old_issue_version.revision.comment,
|
||||||
|
}
|
||||||
|
|
||||||
|
for key in old_obj.keys():
|
||||||
|
if key == 'modified_date':
|
||||||
|
continue
|
||||||
|
|
||||||
|
if old_obj[key] == new_obj[key]:
|
||||||
|
continue
|
||||||
|
|
||||||
|
diff_dict[key] = {
|
||||||
|
'old': old_obj[key],
|
||||||
|
'new': new_obj[key],
|
||||||
|
}
|
||||||
|
|
||||||
|
return diff_dict
|
||||||
|
|
||||||
|
def get_history(self, obj):
|
||||||
|
diff_list = []
|
||||||
|
current = None
|
||||||
|
|
||||||
|
for version in reversed(list(reversion.get_for_object(obj))):
|
||||||
|
if current:
|
||||||
|
issues_diff = self.get_issues_diff(current, version)
|
||||||
|
diff_list.append(issues_diff)
|
||||||
|
|
||||||
|
current = version
|
||||||
|
|
||||||
|
return diff_list
|
||||||
|
|
||||||
|
|
||||||
class IssueSerializer(serializers.ModelSerializer):
|
class IssueSerializer(serializers.ModelSerializer):
|
||||||
tags = PickleField()
|
tags = PickleField()
|
||||||
|
|
|
@ -27,6 +27,8 @@ urlpatterns = format_suffix_patterns(patterns('',
|
||||||
url(r'^issues/types/(?P<pk>[0-9]+)/$', api.IssueTypeDetail.as_view(), name='issues-type-detail'),
|
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/$', api.TaskList.as_view(), name='tasks-list'),
|
||||||
url(r'^tasks/(?P<pk>[0-9]+)/$', api.TaskDetail.as_view(), name='tasks-detail'),
|
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/$', api.SeverityList.as_view(), name='severity-list'),
|
||||||
url(r'^severities/(?P<pk>[0-9]+)/$', api.SeverityDetail.as_view(), name='severity-detail'),
|
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/$', api.TaskStatusList.as_view(), name='tasks-status-list'),
|
||||||
|
@ -34,4 +36,3 @@ urlpatterns = format_suffix_patterns(patterns('',
|
||||||
url(r'^priorities/$', api.PriorityList.as_view(), name='priority-list'),
|
url(r'^priorities/$', api.PriorityList.as_view(), name='priority-list'),
|
||||||
url(r'^priorities/(?P<pk>[0-9]+)/$', api.PriorityDetail.as_view(), name='priority-detail'),
|
url(r'^priorities/(?P<pk>[0-9]+)/$', api.PriorityDetail.as_view(), name='priority-detail'),
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue