Initial implementation of users list api call.
parent
3036396d8c
commit
bc4aa2cb4f
|
@ -9,10 +9,13 @@ from rest_framework.parsers import JSONParser
|
|||
from rest_framework.reverse import reverse
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework import status
|
||||
from rest_framework import generics
|
||||
|
||||
from greenmine.base.serializers import LoginSerializer, UserLogged
|
||||
from greenmine.base.serializers import LoginSerializer, UserLogged, UserSerializer
|
||||
from greenmine.base.models import User
|
||||
from greenmine.scrum import models
|
||||
|
||||
|
||||
class ApiRoot(APIView):
|
||||
|
@ -23,8 +26,7 @@ class ApiRoot(APIView):
|
|||
'projects': reverse('project-list', request=request, format=format),
|
||||
'milestones': reverse('milestone-list', request=request, format=format),
|
||||
'user-stories': reverse('user-story-list', request=request, format=format),
|
||||
'changes': reverse('change-list', request=request, format=format),
|
||||
'change-attachments': reverse('change-attachment-list', request=request, format=format),
|
||||
'attachments': reverse('attachment-list', request=request, format=format),
|
||||
'tasks': reverse('task-list', request=request, format=format),
|
||||
'issues': reverse('issue-list', request=request, format=format),
|
||||
'severities': reverse('severity-list', request=request, format=format),
|
||||
|
@ -39,9 +41,33 @@ class ApiRoot(APIView):
|
|||
'question_responses': reverse('question-response-list', request=request, format=format),
|
||||
'wiki_pages': reverse('wiki-page-list', request=request, format=format),
|
||||
'wiki_page_attachments': reverse('wiki-page-attachment-list', request=request, format=format),
|
||||
'users': reverse('user-list', request=request, format=format),
|
||||
})
|
||||
|
||||
|
||||
|
||||
#class UserFilter(django_filters.FilterSet):
|
||||
# no_milestone = django_filters.NumberFilter(name="mileston", lookup_type='isnull')
|
||||
#
|
||||
# class Meta:
|
||||
# model = UserStory
|
||||
# fields = ['project', 'milestone', 'no_milestone']
|
||||
|
||||
|
||||
class UserList(generics.ListCreateAPIView):
|
||||
model = User
|
||||
serializer_class = UserSerializer
|
||||
permission_classes = (IsAuthenticated,)
|
||||
|
||||
def get_queryset(self):
|
||||
projects = models.Project.objects.filter(members=self.request.user)
|
||||
return super(UserList, self).get_queryset().filter(projects__in=projects)\
|
||||
.order_by('id').distinct()
|
||||
|
||||
def pre_save(self, obj):
|
||||
pass
|
||||
|
||||
|
||||
class Login(APIView):
|
||||
def post(self, request, format=None):
|
||||
username = request.DATA.get('username', None)
|
||||
|
|
|
@ -169,36 +169,6 @@
|
|||
"questions",
|
||||
"questionresponse"
|
||||
],
|
||||
[
|
||||
"add_change",
|
||||
"scrum",
|
||||
"change"
|
||||
],
|
||||
[
|
||||
"change_change",
|
||||
"scrum",
|
||||
"change"
|
||||
],
|
||||
[
|
||||
"delete_change",
|
||||
"scrum",
|
||||
"change"
|
||||
],
|
||||
[
|
||||
"add_changeattachment",
|
||||
"scrum",
|
||||
"changeattachment"
|
||||
],
|
||||
[
|
||||
"change_changeattachment",
|
||||
"scrum",
|
||||
"changeattachment"
|
||||
],
|
||||
[
|
||||
"delete_changeattachment",
|
||||
"scrum",
|
||||
"changeattachment"
|
||||
],
|
||||
[
|
||||
"add_issue",
|
||||
"scrum",
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from rest_framework import serializers
|
||||
from greenmine.base.models import User
|
||||
|
||||
|
||||
class UserLogged(object):
|
||||
|
@ -48,3 +51,10 @@ class LoginSerializer(serializers.Serializer):
|
|||
instance.colorize_tags = attrs.get('colorize_tags', instance.colorize_tags)
|
||||
return instance
|
||||
return UserLogged(**attrs)
|
||||
|
||||
|
||||
class UserSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
exclude = ('password',)
|
||||
#fields = ('id', 'username')
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
from django.conf.urls import patterns, url
|
||||
from rest_framework.urlpatterns import format_suffix_patterns
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from greenmine.base.api import Login, Logout, ApiRoot
|
||||
from rest_framework.urlpatterns import format_suffix_patterns
|
||||
from django.conf.urls import patterns, url
|
||||
from greenmine.base import api
|
||||
|
||||
|
||||
urlpatterns = format_suffix_patterns(patterns('',
|
||||
url(r'^auth/login/$', Login.as_view(), name='login'),
|
||||
url(r'^auth/logout/$', Logout.as_view(), name='logout'),
|
||||
url(r'^$', ApiRoot.as_view(), name='api_root'),
|
||||
url(r'^auth/login/$', api.Login.as_view(), name='login'),
|
||||
url(r'^auth/logout/$', api.Logout.as_view(), name='logout'),
|
||||
url(r'^users/$', api.UserList.as_view(), name="user-list"),
|
||||
url(r'^$', api.ApiRoot.as_view(), name='api_root'),
|
||||
))
|
||||
|
|
|
@ -50,16 +50,10 @@ class UserStoryAdmin(reversion.VersionAdmin):
|
|||
admin.site.register(models.UserStory, UserStoryAdmin)
|
||||
|
||||
|
||||
class ChangeAdmin(reversion.VersionAdmin):
|
||||
list_display = ["id", "change_type", "project", "owner"]
|
||||
class AttachmentAdmin(reversion.VersionAdmin):
|
||||
list_display = ["id", "owner"]
|
||||
|
||||
admin.site.register(models.Change, ChangeAdmin)
|
||||
|
||||
|
||||
class ChangeAttachmentAdmin(reversion.VersionAdmin):
|
||||
list_display = ["id", "change", "owner"]
|
||||
|
||||
admin.site.register(models.ChangeAttachment, ChangeAttachmentAdmin)
|
||||
admin.site.register(models.Attachment, AttachmentAdmin)
|
||||
|
||||
|
||||
class TaskAdmin(reversion.VersionAdmin):
|
||||
|
|
|
@ -7,6 +7,7 @@ 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')
|
||||
|
||||
|
@ -99,9 +100,9 @@ class UserStoryDetail(generics.RetrieveUpdateDestroyAPIView):
|
|||
permission_classes = (IsAuthenticated, UserStoryDetailPermission,)
|
||||
|
||||
|
||||
class ChangeList(generics.ListCreateAPIView):
|
||||
model = Change
|
||||
serializer_class = ChangeSerializer
|
||||
class AttachmentList(generics.ListCreateAPIView):
|
||||
model = Attachment
|
||||
serializer_class = AttachmentSerializer
|
||||
permission_classes = (IsAuthenticated,)
|
||||
|
||||
def get_queryset(self):
|
||||
|
@ -111,28 +112,10 @@ class ChangeList(generics.ListCreateAPIView):
|
|||
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 AttachmentDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
model = Attachment
|
||||
serializer_class = AttachmentSerializer
|
||||
permission_classes = (IsAuthenticated, AttachmentDetailPermission,)
|
||||
|
||||
|
||||
class TaskList(generics.ListCreateAPIView):
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from django.db import models
|
||||
|
||||
from django.utils import timezone
|
||||
from django.dispatch import receiver
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
|
@ -245,29 +244,18 @@ class UserStory(models.Model):
|
|||
return self.status.is_closed
|
||||
|
||||
|
||||
class Change(models.Model):
|
||||
change_type = models.IntegerField(choices=TASK_CHANGE_CHOICES)
|
||||
owner = models.ForeignKey('base.User', related_name='changes')
|
||||
created_date = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
project = models.ForeignKey("Project", related_name="changes")
|
||||
class Attachment(models.Model):
|
||||
owner = models.ForeignKey("base.User", related_name="change_attachments")
|
||||
project = models.ForeignKey("Project", related_name="attachments")
|
||||
|
||||
content_type = models.ForeignKey(ContentType)
|
||||
object_id = models.PositiveIntegerField()
|
||||
content_object = generic.GenericForeignKey('content_type', 'object_id')
|
||||
|
||||
data = PickledObjectField()
|
||||
tags = PickledObjectField()
|
||||
|
||||
|
||||
class ChangeAttachment(models.Model):
|
||||
change = models.ForeignKey("Change", related_name="attachments")
|
||||
owner = models.ForeignKey("base.User", related_name="change_attachments")
|
||||
|
||||
created_date = models.DateTimeField(auto_now_add=True)
|
||||
attached_file = models.FileField(upload_to="files/msg", max_length=500,
|
||||
null=True, blank=True)
|
||||
tags = PickledObjectField()
|
||||
|
||||
|
||||
|
||||
class Task(models.Model):
|
||||
|
@ -300,7 +288,6 @@ class Task(models.Model):
|
|||
watchers = models.ManyToManyField('base.User', related_name='task_watch',
|
||||
null=True)
|
||||
|
||||
changes = generic.GenericRelation(Change)
|
||||
tags = PickledObjectField()
|
||||
|
||||
class Meta:
|
||||
|
@ -358,7 +345,6 @@ class Issue(models.Model):
|
|||
watchers = models.ManyToManyField('base.User', related_name='issue_watch',
|
||||
null=True)
|
||||
|
||||
changes = generic.GenericRelation(Change)
|
||||
tags = PickledObjectField()
|
||||
|
||||
class Meta:
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from greenmine.base.permissions import BaseDetailPermission
|
||||
|
||||
|
||||
class ProjectDetailPermission(BaseDetailPermission):
|
||||
get_permission = "can_view_project"
|
||||
put_permission = "change_project"
|
||||
|
@ -8,6 +9,7 @@ class ProjectDetailPermission(BaseDetailPermission):
|
|||
safe_methods = ['HEAD', 'OPTIONS']
|
||||
path_to_project = []
|
||||
|
||||
|
||||
class MilestoneDetailPermission(BaseDetailPermission):
|
||||
get_permission = "can_view_milestone"
|
||||
put_permission = "change_milestone"
|
||||
|
@ -16,6 +18,7 @@ class MilestoneDetailPermission(BaseDetailPermission):
|
|||
safe_methods = ['HEAD', 'OPTIONS']
|
||||
path_to_project = ['project']
|
||||
|
||||
|
||||
class UserStoryDetailPermission(BaseDetailPermission):
|
||||
get_permission = "can_view_userstory"
|
||||
put_permission = "change_userstory"
|
||||
|
@ -24,6 +27,7 @@ class UserStoryDetailPermission(BaseDetailPermission):
|
|||
safe_methods = ['HEAD', 'OPTIONS']
|
||||
path_to_project = ['project']
|
||||
|
||||
|
||||
class TaskDetailPermission(BaseDetailPermission):
|
||||
get_permission = "can_view_task"
|
||||
put_permission = "change_task"
|
||||
|
@ -32,6 +36,7 @@ class TaskDetailPermission(BaseDetailPermission):
|
|||
safe_methods = ['HEAD', 'OPTIONS']
|
||||
path_to_project = ['project']
|
||||
|
||||
|
||||
class IssueDetailPermission(BaseDetailPermission):
|
||||
get_permission = "can_view_issue"
|
||||
put_permission = "change_issue"
|
||||
|
@ -40,15 +45,8 @@ class IssueDetailPermission(BaseDetailPermission):
|
|||
safe_methods = ['HEAD', 'OPTIONS']
|
||||
path_to_project = ['project']
|
||||
|
||||
class ChangeDetailPermission(BaseDetailPermission):
|
||||
get_permission = "can_view_change"
|
||||
put_permission = "change_change"
|
||||
patch_permission = "change_change"
|
||||
delete_permission = "can_delete_change"
|
||||
safe_methods = ['HEAD', 'OPTIONS']
|
||||
path_to_project = ['project']
|
||||
|
||||
class ChangeAttachmentDetailPermission(BaseDetailPermission):
|
||||
class AttachmentDetailPermission(BaseDetailPermission):
|
||||
get_permission = "can_view_changeattachment"
|
||||
put_permission = "change_changeattachment"
|
||||
patch_permission = "change_changeattachment"
|
||||
|
@ -56,6 +54,7 @@ class ChangeAttachmentDetailPermission(BaseDetailPermission):
|
|||
safe_methods = ['HEAD', 'OPTIONS']
|
||||
path_to_project = ['change', 'project']
|
||||
|
||||
|
||||
class SeverityDetailPermission(BaseDetailPermission):
|
||||
get_permission = "can_view_severity"
|
||||
put_permission = "can_severity_severity"
|
||||
|
@ -64,6 +63,7 @@ class SeverityDetailPermission(BaseDetailPermission):
|
|||
safe_methods = ['HEAD', 'OPTIONS']
|
||||
path_to_project = ['project']
|
||||
|
||||
|
||||
class IssueStatusDetailPermission(BaseDetailPermission):
|
||||
get_permission = "can_view_issuestatus"
|
||||
put_permission = "can_severity_issuestatus"
|
||||
|
@ -72,6 +72,7 @@ class IssueStatusDetailPermission(BaseDetailPermission):
|
|||
safe_methods = ['HEAD', 'OPTIONS']
|
||||
path_to_project = ['project']
|
||||
|
||||
|
||||
class TaskStatusDetailPermission(BaseDetailPermission):
|
||||
get_permission = "can_view_taskstatus"
|
||||
put_permission = "can_severity_taskstatus"
|
||||
|
@ -80,6 +81,7 @@ class TaskStatusDetailPermission(BaseDetailPermission):
|
|||
safe_methods = ['HEAD', 'OPTIONS']
|
||||
path_to_project = ['project']
|
||||
|
||||
|
||||
class UserStoryStatusDetailPermission(BaseDetailPermission):
|
||||
get_permission = "can_view_userstorystatus"
|
||||
put_permission = "can_severity_userstorystatus"
|
||||
|
@ -88,6 +90,7 @@ class UserStoryStatusDetailPermission(BaseDetailPermission):
|
|||
safe_methods = ['HEAD', 'OPTIONS']
|
||||
path_to_project = ['project']
|
||||
|
||||
|
||||
class PriorityDetailPermission(BaseDetailPermission):
|
||||
get_permission = "can_view_priority"
|
||||
put_permission = "can_severity_priority"
|
||||
|
@ -96,6 +99,7 @@ class PriorityDetailPermission(BaseDetailPermission):
|
|||
safe_methods = ['HEAD', 'OPTIONS']
|
||||
path_to_project = ['project']
|
||||
|
||||
|
||||
class IssueTypeDetailPermission(BaseDetailPermission):
|
||||
get_permission = "can_view_issuetype"
|
||||
put_permission = "can_severity_issuetype"
|
||||
|
@ -104,6 +108,7 @@ class IssueTypeDetailPermission(BaseDetailPermission):
|
|||
safe_methods = ['HEAD', 'OPTIONS']
|
||||
path_to_project = ['project']
|
||||
|
||||
|
||||
class PointsDetailPermission(BaseDetailPermission):
|
||||
get_permission = "can_view_points"
|
||||
put_permission = "can_severity_points"
|
||||
|
|
|
@ -48,19 +48,9 @@ class MilestoneSerializer(serializers.ModelSerializer):
|
|||
fields = ()
|
||||
|
||||
|
||||
class ChangeSerializer(serializers.ModelSerializer):
|
||||
tags = PickleField()
|
||||
|
||||
class AttachmentSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Change
|
||||
fields = ()
|
||||
|
||||
|
||||
class ChangeAttachmentSerializer(serializers.ModelSerializer):
|
||||
tags = PickleField()
|
||||
|
||||
class Meta:
|
||||
model = ChangeAttachment
|
||||
model = Attachment
|
||||
fields = ()
|
||||
|
||||
|
||||
|
|
|
@ -10,10 +10,8 @@ urlpatterns = format_suffix_patterns(patterns('',
|
|||
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'^changes/$', api.ChangeList.as_view(), name='change-list'),
|
||||
url(r'^changes/(?P<pk>[0-9]+)/$', api.ChangeDetail.as_view(), name='change-detail'),
|
||||
url(r'^change_attachments/$', api.ChangeAttachmentList.as_view(), name='change-attachment-list'),
|
||||
url(r'^change_attachments/(?P<pk>[0-9]+)/$', api.ChangeAttachmentDetail.as_view(), name='change-attachment-detail'),
|
||||
url(r'^attachments/$', api.AttachmentList.as_view(), name='attachment-list'),
|
||||
url(r'^attachments/(?P<pk>[0-9]+)/$', api.AttachmentDetail.as_view(), name='attachment-detail'),
|
||||
url(r'^issues/$', api.IssueList.as_view(), name='issue-list'),
|
||||
url(r'^issues/(?P<pk>[0-9]+)/$', api.IssueDetail.as_view(), name='issue-detail'),
|
||||
url(r'^tasks/$', api.TaskList.as_view(), name='task-list'),
|
||||
|
|
Loading…
Reference in New Issue