diff --git a/mayan/apps/user_management/api_views.py b/mayan/apps/user_management/api_views.py index 0039658d19..d4cb4e8fce 100644 --- a/mayan/apps/user_management/api_views.py +++ b/mayan/apps/user_management/api_views.py @@ -16,96 +16,127 @@ from .serializers import GroupSerializer, UserSerializer class APIGroupListView(generics.ListCreateAPIView): - serializer_class = GroupSerializer - queryset = Group.objects.all() - - permission_classes = (MayanPermission,) filter_backends = (MayanObjectPermissionsFilter,) - mayan_object_permissions = {'GET': [permission_group_view]} - mayan_view_permissions = {'POST': [permission_group_create]} + mayan_object_permissions = {'GET': (permission_group_view,)} + mayan_view_permissions = {'POST': (permission_group_create,)} + permission_classes = (MayanPermission,) + queryset = Group.objects.all() + serializer_class = GroupSerializer def get(self, *args, **kwargs): - """Returns a list of all the groups.""" + """ + Returns a list of all the groups. + """ + return super(APIGroupListView, self).get(*args, **kwargs) def post(self, *args, **kwargs): - """Create a new group.""" + """ + Create a new group. + """ + return super(APIGroupListView, self).post(*args, **kwargs) class APIGroupView(generics.RetrieveUpdateDestroyAPIView): - serializer_class = GroupSerializer - queryset = Group.objects.all() - - permission_classes = (MayanPermission,) mayan_object_permissions = { - 'GET': [permission_group_view], - 'PUT': [permission_group_edit], - 'PATCH': [permission_group_edit], - 'DELETE': [permission_group_delete] + 'GET': (permission_group_view,), + 'PUT': (permission_group_edit,), + 'PATCH': (permission_group_edit,), + 'DELETE': (permission_group_delete,) } + permission_classes = (MayanPermission,) + queryset = Group.objects.all() + serializer_class = GroupSerializer def delete(self, *args, **kwargs): - """Delete the selected group.""" + """ + Delete the selected group. + """ + return super(APIGroupView, self).delete(*args, **kwargs) def get(self, *args, **kwargs): - """Return the details of the selected group.""" + """ + Return the details of the selected group. + """ + return super(APIGroupView, self).get(*args, **kwargs) def patch(self, *args, **kwargs): - """Partially edit the selected group.""" + """ + Partially edit the selected group. + """ + return super(APIGroupView, self).patch(*args, **kwargs) def put(self, *args, **kwargs): - """Edit the selected group.""" + """ + Edit the selected group. + """ + return super(APIGroupView, self).put(*args, **kwargs) class APIUserListView(generics.ListCreateAPIView): - serializer_class = UserSerializer - queryset = User.objects.all() - - permission_classes = (MayanPermission,) filter_backends = (MayanObjectPermissionsFilter,) - mayan_object_permissions = {'GET': [permission_user_view]} - mayan_view_permissions = {'POST': [permission_user_create]} + mayan_object_permissions = {'GET': (permission_user_view,)} + mayan_view_permissions = {'POST': (permission_user_create,)} + permission_classes = (MayanPermission,) + queryset = User.objects.all() + serializer_class = UserSerializer def get(self, *args, **kwargs): - """Returns a list of all the users.""" + """ + Returns a list of all the users. + """ return super(APIUserListView, self).get(*args, **kwargs) def post(self, *args, **kwargs): - """Create a new user.""" + """ + Create a new user. + """ + return super(APIUserListView, self).post(*args, **kwargs) class APIUserView(generics.RetrieveUpdateDestroyAPIView): - serializer_class = UserSerializer - queryset = User.objects.all() - - permission_classes = (MayanPermission,) mayan_object_permissions = { - 'GET': [permission_user_view], - 'PUT': [permission_user_edit], - 'PATCH': [permission_user_edit], - 'DELETE': [permission_user_delete] + 'GET': (permission_user_view,), + 'PUT': (permission_user_edit,), + 'PATCH': (permission_user_edit,), + 'DELETE': (permission_user_delete,) } + permission_classes = (MayanPermission,) + queryset = User.objects.all() + serializer_class = UserSerializer def delete(self, *args, **kwargs): - """Delete the selected user.""" + """ + Delete the selected user. + """ + return super(APIUserView, self).delete(*args, **kwargs) def get(self, *args, **kwargs): - """Return the details of the selected user.""" + """ + Return the details of the selected user. + """ + return super(APIUserView, self).get(*args, **kwargs) def patch(self, *args, **kwargs): - """Partially edit the selected user.""" + """ + Partially edit the selected user. + """ + return super(APIUserView, self).patch(*args, **kwargs) def put(self, *args, **kwargs): - """Edit the selected user.""" + """ + Edit the selected user. + """ + return super(APIUserView, self).put(*args, **kwargs) @@ -116,17 +147,29 @@ class APICurrentUserView(generics.RetrieveUpdateDestroyAPIView): return self.request.user def delete(self, *args, **kwargs): - """Delete the current user.""" + """ + Delete the current user. + """ + return super(APICurrentUserView, self).delete(*args, **kwargs) def get(self, *args, **kwargs): - """Return the details of the current user.""" + """ + Return the details of the current user. + """ + return super(APICurrentUserView, self).get(*args, **kwargs) def patch(self, *args, **kwargs): - """Partially edit the current user.""" + """ + Partially edit the current user. + """ + return super(APICurrentUserView, self).patch(*args, **kwargs) def put(self, *args, **kwargs): - """Edit the current user.""" + """ + Edit the current user. + """ + return super(APICurrentUserView, self).put(*args, **kwargs) diff --git a/mayan/apps/user_management/serializers.py b/mayan/apps/user_management/serializers.py index 2f62677a0b..ec06407bdf 100644 --- a/mayan/apps/user_management/serializers.py +++ b/mayan/apps/user_management/serializers.py @@ -3,14 +3,34 @@ from __future__ import unicode_literals from django.contrib.auth.models import Group, User from rest_framework import serializers +from rest_framework.reverse import reverse -class UserSerializer(serializers.ModelSerializer): +class GroupSerializer(serializers.HyperlinkedModelSerializer): + users_count = serializers.SerializerMethodField() + class Meta: + extra_kwargs = { + 'url': {'view_name': 'rest_api:group-detail'} + } + fields = ('id', 'name', 'url', 'users_count') + model = Group + + def get_users_count(self, instance): + return instance.user_set.count() + + +class UserSerializer(serializers.HyperlinkedModelSerializer): + groups = GroupSerializer(many=True) + + class Meta: + extra_kwargs = { + 'url': {'view_name': 'rest_api:user-detail'} + } fields = ( - 'id', 'username', 'first_name', 'last_name', 'email', 'is_staff', - 'is_active', 'is_superuser', 'last_login', 'date_joined', - 'password' + 'first_name', 'date_joined', 'email', 'groups', 'id', 'is_staff', + 'is_active', 'is_superuser', 'last_login', 'last_name', + 'password', 'url', 'username', ) model = User read_only_fields = ('last_login', 'date_joined') @@ -22,8 +42,3 @@ class UserSerializer(serializers.ModelSerializer): user.set_password(attrs['password']) return user - -class GroupSerializer(serializers.ModelSerializer): - class Meta: - fields = ('id', 'name') - model = Group diff --git a/mayan/apps/user_management/urls.py b/mayan/apps/user_management/urls.py index 69aaf7b976..3602434c50 100644 --- a/mayan/apps/user_management/urls.py +++ b/mayan/apps/user_management/urls.py @@ -57,8 +57,13 @@ urlpatterns = patterns( api_urls = patterns( '', url(r'^groups/$', APIGroupListView.as_view(), name='group-list'), - url(r'^groups/(?P[0-9]+)/$', APIGroupView.as_view(), name='group-detail'), + url( + r'^groups/(?P[0-9]+)/$', APIGroupView.as_view(), + name='group-detail' + ), url(r'^users/$', APIUserListView.as_view(), name='user-list'), url(r'^users/(?P[0-9]+)/$', APIUserView.as_view(), name='user-detail'), - url(r'^users/current/$', APICurrentUserView.as_view(), name='user-current'), + url( + r'^users/current/$', APICurrentUserView.as_view(), name='user-current' + ), )