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

View File

@ -1,7 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from rest_framework import serializers from rest_framework import serializers
from greenmine.base.models import User from greenmine.base.models import User, Role
class UserLogged(object): class UserLogged(object):
@ -56,5 +56,10 @@ class LoginSerializer(serializers.Serializer):
class UserSerializer(serializers.ModelSerializer): class UserSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = User model = User
exclude = ('password',) fields = ('id', 'username', 'first_name', 'last_name', 'color', 'is_active',)
#fields = ('id', 'username')
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/login/$', api.Login.as_view(), name='login'),
url(r'^auth/logout/$', api.Logout.as_view(), name='logout'), url(r'^auth/logout/$', api.Logout.as_view(), name='logout'),
url(r'^users/$', api.UserList.as_view(), name="user-list"), 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'), url(r'^$', api.ApiRoot.as_view(), name='api_root'),
)) ))