Adding role list and user filter to the API

remotes/origin/enhancement/email-actions
Alejandro Alonso 2013-04-08 17:03:22 +02:00
parent 14a68c207e
commit d3cbb2cb24
3 changed files with 37 additions and 5 deletions

View File

@ -13,10 +13,12 @@ from rest_framework.permissions import IsAuthenticated
from rest_framework import status
from rest_framework import generics
from greenmine.base.serializers import LoginSerializer, UserLogged, UserSerializer
from greenmine.base.models import User
from greenmine.base.serializers import LoginSerializer, UserLogged, UserSerializer, RoleSerializer
from greenmine.base.models import User, Role
from greenmine.scrum import models
import django_filters
class ApiRoot(APIView):
def get(self, request, format=None):
@ -41,9 +43,18 @@ class ApiRoot(APIView):
'question_responses': reverse('question-response-list', request=request, format=format),
'wiki/pages': reverse('wiki-page-list', request=request, format=format),
'users': reverse('user-list', request=request, format=format),
'roles': reverse('user-roles', request=request, format=format),
})
class RoleList(generics.ListCreateAPIView):
model = Role
serializer_class = RoleSerializer
permission_classes = (IsAuthenticated,)
def get_queryset(self):
return self.model.objects.all()
#class UserFilter(django_filters.FilterSet):
# no_milestone = django_filters.NumberFilter(name="mileston", lookup_type='isnull')
@ -53,13 +64,28 @@ class ApiRoot(APIView):
# fields = ['project', 'milestone', 'no_milestone']
class UserFilter(django_filters.FilterSet):
is_active = django_filters.BooleanFilter(name="is_active")
class Meta:
model = User
fields = ['is_active',]
class UserList(generics.ListCreateAPIView):
model = User
serializer_class = UserSerializer
filter_class = UserFilter
permission_classes = (IsAuthenticated,)
def get_queryset(self):
projects = models.Project.objects.filter(members=self.request.user)
#Project filtering
project = self.request.QUERY_PARAMS.get('project', None)
if project is not None:
projects = projects.filter(id=project)
return super(UserList, self).get_queryset().filter(projects__in=projects)\
.order_by('id').distinct()

View File

@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
from rest_framework import serializers
from greenmine.base.models import User
from greenmine.base.models import User, Role
class UserLogged(object):
@ -56,5 +56,10 @@ class LoginSerializer(serializers.Serializer):
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
exclude = ('password',)
#fields = ('id', 'username')
fields = ('id', 'username', 'first_name', 'last_name', 'color', 'is_active',)
class RoleSerializer(serializers.ModelSerializer):
class Meta:
model = Role
fields = ('id', 'name', 'slug', 'permissions',)

View File

@ -9,5 +9,6 @@ urlpatterns = format_suffix_patterns(patterns('',
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'^roles/$', api.RoleList.as_view(), name="user-roles"),
url(r'^$', api.ApiRoot.as_view(), name='api_root'),
))