def remove_all_tags(request, pk, format=None): try: composition = Composition.objects.get(pk=pk) check_object_permissions(request, add_tags.cls.permission_classes, request.user) except Composition.DoesNotExist: raise Http404 composition.tags.clear()
def user_bookmarks(request, pk, format=None): check_object_permissions(request, user_bookmarks.cls.permission_classes, User.objects.get(pk=pk)) if request.method == 'GET': serializer = BookmarkSerializer(request.user, context={request: request}) return Response(serializer.data) elif request.method == 'PUT': bookmarks = request.DATA.get('bookmarks') request.user.bookmarks.add(*bookmarks) serializer = BookmarkSerializer(request.user) # Add notification. for bookmark in bookmarks: try: bookmarked = Composition.objects.get(pk=bookmark) if request.user != bookmarked.artist: notify.send(request.user, recipient=bookmarked.artist, verb='added to his collection', action_object=bookmarked) except Composition.DoesNotExist: # No such user, skip notification. pass return Response(serializer.data) elif request.method == 'POST': bookmarks = request.DATA['bookmarks'] request.user.bookmarks.remove(*bookmarks) serializer = BookmarkSerializer(request.user) return Response(serializer.data)
def user_follows(request, pk, format=None): check_object_permissions(request, user_follows.cls.permission_classes, User.objects.get(pk=pk)) if request.method == 'GET': serializer = FollowSerializer(request.user, context={request: request}) return Response(serializer.data) elif request.method == 'PUT': follows = request.DATA.get('follows') request.user.follows.add(*follows) serializer = FollowSerializer(request.user) # TODO add notification. for follow in follows: try: followed = User.objects.get(pk=follow) if request.user != followed: notify.send(request.user, recipient=followed, verb='followed you.') except User.DoesNotExist: # No such user, skip notification. pass return Response(serializer.data) elif request.method == 'POST': follows = request.DATA['follows'] request.user.follows.remove(*follows) serializer = FollowSerializer(request.user) return Response(serializer.data)
def follow_compositions(request, format=None): check_object_permissions(request, follow_compositions.cls.permission_classes, request.user) follows = request.user.follows.all() if follows: q_object = Q() for follow in follows: q_object |= Q(artist_id=follow.id) compositions = Composition.objects.filter(q_object) ser = CompositionSerializer(compositions, many=True) if request.user.is_authenticated(): counter = 0 related_comps = compositions.filter(collectors__id=request.user.id) for composition in compositions: ser.data[counter]['IsBookmarked'] = False ser.data[counter]['IsVoted'] = False if composition in related_comps: ser.data[counter]['IsBookmarked'] = True if request.user.votes.filter(composition=composition).exists(): ser.data[counter]['IsVoted'] = True counter = counter + 1 return Response(ser.data) return Response([])
def user_follows(request, pk, format=None): check_object_permissions(request, user_follows.cls.permission_classes, User.objects.get(pk=pk)) if request.method == 'GET': serializer = FollowSerializer(request.user, context={request: request}) return Response(serializer.data) elif request.method == 'PUT': follows = request.DATA.get('follows') request.user.follows.add(*follows) serializer = FollowSerializer(request.user) # TODO add notification. for follow in follows: try: followed = User.objects.get(pk=follow) if request.user != followed: notify.send(request.user, recipient=followed, verb='followed you.') except User.DoesNotExist: # No such user, skip notification. pass return Response(serializer.data) elif request.method == 'POST': follows = request.DATA['follows'] request.user.follows.remove(*follows) serializer = FollowSerializer(request.user) return Response(serializer.data)
def follow_compositions(request, format=None): # To make it genenric w.r.t. user get user Id in post/get. Then check for permissions. check_object_permissions(request, follow_compositions.cls.permission_classes, request.user) follows = request.user.follows.all() if follows: q_object = Q() for follow in follows: q_object |= Q(artist_id=follow.id) compositions = Composition.objects.filter(q_object) ser = CompositionSerializer(compositions, many=True) if request.user.is_authenticated(): counter = 0 related_comps = compositions.filter(collectors__id=request.user.id) for composition in compositions: ser.data[counter]['IsBookmarked'] = False ser.data[counter]['IsVoted'] = False if composition in related_comps: ser.data[counter]['IsBookmarked'] = True if request.user.votes.filter(composition=composition).exists(): ser.data[counter]['IsVoted'] = True counter = counter + 1 return Response(ser.data) return Response([])
def user_bookmarks(request, pk, format=None): check_object_permissions( request, user_bookmarks.cls.permission_classes, User.objects.get(pk=pk)) if request.method == 'GET': serializer = BookmarkSerializer( request.user, context={request: request}) return Response(serializer.data) elif request.method == 'POST': bookmarks = request.DATA.get('bookmarks') if not bookmarks: return Response({"bookmarks": "This field is required"}, status=status.HTTP_400_BAD_REQUEST) request.user.bookmarks.add(*bookmarks) # Add notification. for bookmark in bookmarks: try: bookmarked = Composition.objects.get(pk=bookmark) if request.user != bookmarked.artist: notify.send(request.user, recipient=bookmarked.artist, verb='added to his collection', action_object=bookmarked) except Composition.DoesNotExist: # No such user, skip notification. pass return Response(status=status.HTTP_201_CREATED) elif request.method == 'DELETE': bookmarks = request.DATA.get('bookmarks') if not bookmarks: return Response({"bookmarks": "This field is required"}, status=status.HTTP_400_BAD_REQUEST) request.user.bookmarks.remove(*bookmarks) serializer = BookmarkSerializer(request.user) return Response(serializer.data)
def user_bookmarks(request, pk, format=None): check_object_permissions(request, user_bookmarks.cls.permission_classes, User.objects.get(pk=pk)) if request.method == 'GET': serializer = BookmarkSerializer(request.user, context={request: request}) return Response(serializer.data) elif request.method == 'PUT': bookmarks = request.DATA.get('bookmarks') request.user.bookmarks.add(*bookmarks) serializer = BookmarkSerializer(request.user) # Add notification. for bookmark in bookmarks: try: bookmarked = Composition.objects.get(pk=bookmark) if request.user != bookmarked.artist: notify.send(request.user, recipient=bookmarked.artist, verb='added to his collection', action_object=bookmarked) except Composition.DoesNotExist: # No such user, skip notification. pass return Response(serializer.data) elif request.method == 'POST': bookmarks = request.DATA['bookmarks'] request.user.bookmarks.remove(*bookmarks) serializer = BookmarkSerializer(request.user) return Response(serializer.data)
def get_composition(self, pk, request): try: composition = Composition.objects.get(pk=pk) check_object_permissions(request, self.permission_classes, composition) return composition except Composition.DoesNotExist: raise Http404
def remove_all_tags(request, pk, format = None): #Try-Except block to check if the composition exists and to check if the request user has permission. try: composition = Composition.objects.get(pk=pk) check_object_permissions(request, add_tags.cls.permission_classes, request.user) #Checks for object permission for given request.user from given set of permissions. except Composition.DoesNotExist: raise Http404 composition.tags.clear() #Removes all tags
def get_composition(self, pk, request): try: composition = Composition.objects.get(pk=pk) check_object_permissions(request, self.permission_classes, composition) return composition except Composition.DoesNotExist: raise Http404
def remove_tags(request, pk, format=None): try: composition = Composition.objects.get(pk=pk) check_object_permissions(request, add_tags.cls.permission_classes, request.user) except Composition.DoesNotExist: raise Http404 tag_list = request.DATA['tagList'] for tag in tag_list: if(tag_exists(tag)): composition.tags.remove(tag)
def remove_all_tags(request, pk, format=None): #Try-Except block to check if the composition exists and to check if the request user has permission. try: composition = Composition.objects.get(pk=pk) check_object_permissions( request, add_tags.cls.permission_classes, request.user ) #Checks for object permission for given request.user from given set of permissions. except Composition.DoesNotExist: raise Http404 composition.tags.clear() #Removes all tags
def remove_tags(request, pk, format = None): #Try-Except block to check if the composition exists and to check if the request user has permission. try: composition = Composition.objects.get(pk=pk) check_object_permissions(request, add_tags.cls.permission_classes, request.user) #Checks for object permission for given request.user from given set of permissions. except Composition.DoesNotExist: raise Http404 tag_list = request.DATA['tagList'] #Assuming all tag_list items are valid tags as authorized by admins [for Beta version only] for tag in tag_list: if(tag_exists(tag)): composition.tags.remove(tag)
def remove_tags(request, pk, format=None): #Try-Except block to check if the composition exists and to check if the request user has permission. try: composition = Composition.objects.get(pk=pk) check_object_permissions( request, add_tags.cls.permission_classes, request.user ) #Checks for object permission for given request.user from given set of permissions. except Composition.DoesNotExist: raise Http404 tag_list = request.DATA['tagList'] #Assuming all tag_list items are valid tags as authorized by admins [for Beta version only] for tag in tag_list: if (tag_exists(tag)): composition.tags.remove(tag)
def reset_password(request, pk, format=None): ''' Changes user password. Offloading validation like both values entered in new password fields are same, to frontend. ''' try: user = User.objects.get(pk=pk) except User.DoesNotExist: raise Http404 check_object_permissions(request, reset_password.cls.permission_classes, user) serializer = PasswordUserSerializer(data=request.DATA, context={'user': user}) if serializer.is_valid(): user.set_password(serializer.object['new_password']) user.save() return Response() else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def reset_password(request, pk, format=None): ''' Changes user password. Offloading validation like both values entered in new password fields are same, to frontend. ''' try: user = User.objects.get(pk=pk) except User.DoesNotExist: raise Http404 check_object_permissions(request, reset_password.cls.permission_classes, user) serializer = PasswordUserSerializer(data=request.DATA, context={'user': user}) if serializer.is_valid(): user.set_password(serializer.object['new_password']) user.save() return Response() else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def get_user(self, pk, request): user = get_object_or_404(User, pk=pk) check_object_permissions(request, self.permission_classes, user) return user
def get_user(self, pk, request): user = get_object_or_404(User, pk=pk) check_object_permissions(request, self.permission_classes, user) return user