def post(self, request, post_uuid, post_comment_id): request_data = request.data.copy() request_data['post_uuid'] = post_uuid request_data['post_comment_id'] = post_comment_id serializer = TranslatePostCommentSerializer(data=request_data) serializer.is_valid(raise_exception=True) user = request.user data = serializer.validated_data post_comment_id = data.get('post_comment_id') try: post_comment, translated_text = user.translate_post_comment_with_id( post_comment_id=post_comment_id) except UnsupportedLanguagePairException: return ApiMessageResponse( _('Translation between these languages is not supported.'), status=status.HTTP_400_BAD_REQUEST) except TranslationClientError: return ApiMessageResponse( _('Translation service returned an error'), status=status.HTTP_500_INTERNAL_SERVER_ERROR) except MaxTextLengthExceededError: return ApiMessageResponse( _('Max length of translation text exceeded.'), status=status.HTTP_400_BAD_REQUEST) return Response({'translated_text': translated_text}, status=status.HTTP_200_OK)
def get(self, request, post_uuid): request_data = request.data.copy() request_data['post_uuid'] = post_uuid serializer = GetPostSerializer(data=request_data) serializer.is_valid(raise_exception=True) data = serializer.validated_data post_uuid = data.get('post_uuid') user = request.user post_id = get_post_id_for_post_uuid(post_uuid) try: preview_link_data = user.get_preview_link_data_for_post_with_id( post_id) except URLNotFound: return ApiMessageResponse( _('The linked url associated for preview was not found.'), status=status.HTTP_400_BAD_REQUEST) except URLUnreachable: return ApiMessageResponse( _('The linked url associated for preview was not reachable.'), status=status.HTTP_400_BAD_REQUEST) return Response(preview_link_data, status=status.HTTP_200_OK)
def post(self, request): serializer = self.serializer_class(data=request.data) serializer.is_valid(raise_exception=True) name = serializer.validated_data.get('name') user = request.user if not user.has_circle_with_name(name): return ApiMessageResponse(_('Circle name available'), status=status.HTTP_202_ACCEPTED) return ApiMessageResponse(_('Circle name not available'), status=status.HTTP_400_BAD_REQUEST)
def post(self, request): request_data = request.data serializer = RequestPasswordResetSerializer(data=request_data) serializer.is_valid(raise_exception=True) data = serializer.validated_data has_username = '******' in data has_email = 'email' in data if not has_email and not has_username: return Response('At least one of email or username is required', status=status.HTTP_400_BAD_REQUEST) User = get_user_model() user = None if has_username: username = data.get('username') user = User.get_user_with_username(username) if has_email: email = data.get('email') user = User.get_user_with_email(email) with transaction.atomic(): user.request_password_reset() return ApiMessageResponse( _('A password reset link was sent to the email'), status=status.HTTP_200_OK)
def post(self, request): user = request.user with transaction.atomic(): user.accept_guidelines() return ApiMessageResponse(_('Guidelines successfully accepted'), status=status.HTTP_200_OK)
def post(self, request, post_uuid, post_comment_id): request_data = request.data.copy() request_data['post_comment_id'] = post_comment_id request_data['post_uuid'] = post_uuid serializer = ReportPostCommentSerializer(data=request_data) serializer.is_valid(raise_exception=True) data = serializer.validated_data post_uuid = data.get('post_uuid') post_comment_id = data.get('post_comment_id') description = data.get('description') category_id = data.get('category_id') user = request.user with transaction.atomic(): user.report_comment_with_id_for_post_with_uuid( post_comment_id=post_comment_id, post_uuid=post_uuid, category_id=category_id, description=description) return ApiMessageResponse(_('Post comment reported, thanks!'), status=status.HTTP_201_CREATED)
def post(self, request): # Serializer contains validators serializer = self.serializer_class(data=request.data) serializer.is_valid(raise_exception=True) return ApiMessageResponse(_('Community name available'), status=status.HTTP_202_ACCEPTED)
def get(self, request): query_params = request.query_params.dict() serializer = PreviewLinkSerializer(data=query_params) serializer.is_valid(raise_exception=True) data = serializer.validated_data url = data.get('url') user = request.user try: preview_link_data = user.get_preview_link_data_for_url(url) except URLNotFound: return ApiMessageResponse(_('The specified url was not found.'), status=status.HTTP_400_BAD_REQUEST) except URLUnreachable: return ApiMessageResponse( _('The specified url was not reachable.'), status=status.HTTP_400_BAD_REQUEST) return Response(preview_link_data, status=status.HTTP_200_OK)
def post(self, request): user = request.user serializer = self.serializer_class(data=request.data) serializer.is_valid(raise_exception=True) token = serializer.validated_data.get('token') user.verify_email_with_token(token) return ApiMessageResponse(_('Email verified'), status=status.HTTP_200_OK)
def delete(self, request, invite_id): serializer = DeleteUserInviteSerializer(data={'invite_id': invite_id}) serializer.is_valid(raise_exception=True) user = request.user with transaction.atomic(): user.delete_user_invite_with_id(invite_id) return ApiMessageResponse(_('Successfully deleted invite'), status=status.HTTP_200_OK)
def post(self, request): request_data = request.data serializer = AuthenticatedUserLanguageSerializer(data=request_data) serializer.is_valid(raise_exception=True) data = serializer.validated_data user = request.user with transaction.atomic(): user.set_language_with_id(language_id=data.get('language_id')) return ApiMessageResponse(_('Language successfully set'), status=status.HTTP_200_OK)
def post(self, request): serializer = RegisterTokenSerializer(data=request.data) serializer.is_valid(raise_exception=True) validated_data = serializer.validated_data token = validated_data.get('token') UserInvite = get_user_invite_model() # raises error if invalid #UserInvite.check_token_is_valid(token=token) return ApiMessageResponse(_('Token valid'), status=status.HTTP_202_ACCEPTED)
def delete(self, request, community_name): request_data = normalise_request_data(request.data) request_data['community_name'] = community_name serializer = TopPostCommunityExclusionSerializer(data=request_data) serializer.is_valid(raise_exception=True) user = request.user with transaction.atomic(): user.remove_exclusion_for_community_with_name_from_top_posts(community_name) return ApiMessageResponse(_('Community exclusion removed'), status=status.HTTP_202_ACCEPTED)
def post(self, request, post_uuid, post_comment_id): serializer = UnmutePostCommentSerializer( data={ 'post_uuid': post_uuid, 'post_comment_id': post_comment_id, }) serializer.is_valid(raise_exception=True) user = request.user with transaction.atomic(): user.unmute_post_comment_with_id(post_comment_id=post_comment_id) return ApiMessageResponse(message=_('Post comment unmuted.'), status=status.HTTP_200_OK)
def put(self, request): serializer = CommonCommunityNameSerializer(data=request.data) serializer.is_valid(raise_exception=True) data = serializer.validated_data community_name = data.get('community_name') user = request.user with transaction.atomic(): user.exclude_community_with_name_from_profile_posts(community_name) return ApiMessageResponse(_('Community excluded from this feed'), status=status.HTTP_202_ACCEPTED)
def post(self, request): serializer = RequestToFollowUserSerializer( data=request.data, context={"request": request}) serializer.is_valid(raise_exception=True) data = serializer.validated_data user_to_cancel_request_for = data.get('username') user = request.user with transaction.atomic(): user.delete_follow_request_for_user_with_username( user_to_cancel_request_for) return ApiMessageResponse(_('Follow request cancelled.'), status=status.HTTP_200_OK)
def post(self, request): serializer = ApproveUserFollowRequestSerializer( data=request.data, context={"request": request}) serializer.is_valid(raise_exception=True) data = serializer.validated_data user_to_approve_follow_request_from_username = data.get('username') user = request.user with transaction.atomic(): user.approve_follow_request_from_user_with_username( user_username=user_to_approve_follow_request_from_username) return ApiMessageResponse(_('Follow request approved.'), status=status.HTTP_200_OK)
def post(self, request): request_data = request.data serializer = VerifyPasswordResetSerializer(data=request_data) serializer.is_valid(raise_exception=True) data = serializer.validated_data token = data.get('token') new_password = data.get('new_password') User = get_user_model() user = User.get_user_for_password_reset_token(token) with transaction.atomic(): user.verify_password_reset_token(token=token, password=new_password) return ApiMessageResponse(_('Password set successfully'), status=status.HTTP_200_OK)
def post(self, request): request_data = request.data serializer = RequestPasswordResetSerializer(data=request_data) serializer.is_valid(raise_exception=True) data = serializer.validated_data User = get_user_model() email = data.get('email') user = User.get_user_with_email(email) with transaction.atomic(): user.request_password_reset() return ApiMessageResponse( _('A password reset link was sent to the email'), status=status.HTTP_200_OK)
def post(self, request, community_name): request_data = normalise_request_data(request.data) request_data['community_name'] = community_name serializer = BanUserSerializer(data=request_data) serializer.is_valid(raise_exception=True) data = serializer.validated_data username = data.get('username') user = request.user with transaction.atomic(): user.ban_user_with_username_from_community_with_name( username=username, community_name=community_name) return ApiMessageResponse(_('Banned user!'), status=status.HTTP_200_OK)
def put(self, request, community_name): request_data = normalise_request_data(request.data) request_data['community_name'] = community_name serializer = AddCommunityModeratorSerializer(data=request_data) serializer.is_valid(raise_exception=True) data = serializer.validated_data username = data.get('username') user = request.user with transaction.atomic(): user.add_moderator_with_username_to_community_with_name( username=username, community_name=community_name) return ApiMessageResponse('Added moderator to community.', status=status.HTTP_201_CREATED)
def post(self, request, hashtag_name): request_data = request.data.copy() request_data['hashtag_name'] = hashtag_name serializer = ReportHashtagSerializer(data=request_data) serializer.is_valid(raise_exception=True) data = serializer.validated_data hashtag_name = data.get('hashtag_name') description = data.get('description') category_id = data.get('category_id') user = request.user with transaction.atomic(): user.report_hashtag_with_name(hashtag_name=hashtag_name, category_id=category_id, description=description) return ApiMessageResponse(_('Hashtag reported, thanks!'), status=status.HTTP_201_CREATED)
def delete(self, request, community_name, community_moderator_username): request_data = normalise_request_data(request.data) request_data['community_name'] = community_name request_data['username'] = community_moderator_username serializer = RemoveCommunityModeratorSerializer(data=request_data) serializer.is_valid(raise_exception=True) data = serializer.validated_data username = data.get('username') user = request.user with transaction.atomic(): user.remove_moderator_with_username_from_community_with_name( username=username, community_name=community_name) return ApiMessageResponse(_('Removed moderator'), status=status.HTTP_200_OK)
def post(self, request, invite_id): request_data = normalise_request_data(request.data) request_data['invite_id'] = invite_id serializer = EmailUserInviteSerializer(data=request_data) serializer.is_valid(raise_exception=True) invite_id = serializer.validated_data.get('invite_id') email = serializer.validated_data.get('email') user = request.user with transaction.atomic(): try: user.send_invite_to_invite_id_with_email(invite_id, email) except SMTPException as e: logger.exception('Exception occurred during send_invite_email', e) raise APIException( _('An error occurred sending the invite, please try again') ) return ApiMessageResponse(_('Invite email sent'), status=status.HTTP_200_OK)
def post(self, request): serializer = self.serializer_class(data=request.data) serializer.is_valid(raise_exception=True) # The serializer contains the email checks, meaning at this line, it's all good. return ApiMessageResponse(_('Email available'), status=status.HTTP_202_ACCEPTED)
def get(self, request): return ApiMessageResponse(message=_('Congrats, you\'re not suspended :-)'), status=status.HTTP_200_OK)