Beispiel #1
0
def set_like(meme_id):
    if g.current_user is None:
        abort(FORBIDDEN)

    if 'score' not in request.form:
        abort(BAD_REQUEST)

    try:
        score = int(request.form['score'])
    except ValueError:
        abort(BAD_REQUEST)

    if not (-1 <= score <= 1):
        abort(BAD_REQUEST)

    user = g.current_user
    meme = session.query(Meme).filter(Meme.id == meme_id).first()

    if meme is None:
        abort(BAD_REQUEST)

    like = session.query(Like).filter(
        and_(Like.meme_id == meme.id, Like.user_id == user.id)).first()
    old_score = 0 if like is None else like.score

    if like is None:
        like = Like(meme_id=meme.id, user_id=user.id, score=score)
        session.add(like)
    else:
        like.score = score

    meme.rating = meme.rating - old_score + score
    session.commit()
    return 'OK', CREATED
    def test_unlike_message(self):
        """Does a message get unliked properly?"""

        with self.client as c:
            with c.session_transaction() as sess:
                sess[CURR_USER_KEY] = self.testuser.id

            c.post('/messages/')

        testuser2 = User.signup(username="******",
                                email='*****@*****.**',
                                password="******",
                                image_url="/test.jpg")

        db.session.add(testuser2)
        db.session.commit()

        new_msg = Message(text="A new message", user_id=testuser2.id)
        db.session.add(new_msg)
        db.session.commit()

        likes = Like(user_id=self.testuser.id, message_id=new_msg.id)
        db.session.add(likes)
        db.session.commit()

        resp = c.post(f'/messages/{new_msg.id}/unlike', follow_redirects=True)
        self.assertEqual(resp.status_code, 200)
        self.assertIn(b'far fa-thumbs-up', resp.data)
Beispiel #3
0
 def get(self, post_id):
     # check if logged in and get username.
     username = self.check_login(self.request.cookies.get('user_id'))
     if not username:
         self.redirect('/login')
     else:
         # get the post.
         post = db.get(db.Key.from_path('Post', int(post_id)))
         # if post belongs to user, show alert.
         if post.username == username:
             self.render('alerts.html',
                         alert='You cannot like your own post',
                         path='/%s' % post_id)
         else:
             already_like = Like.all().filter('username='******'post_id=', post_id).get()
             # if user hasn't liked the post, create like.
             if not already_like:
                 l = Like(username=username, post_id=post_id)
                 l.put()
                 self.render('alerts.html',
                             alert='Like added to post',
                             path='/%s' % post_id)
             # if user has already liked the post, show alert.
             else:
                 self.render('alerts.html',
                             alert='You can only like a post once',
                             path='/%s' % post_id)
Beispiel #4
0
def like_or_unlike_message(message_id):
    """Like or unlike a message."""

    if not g.user:
        flash("Access unauthorized.", "danger")
        return redirect("/login")

    message = Message.query.get(message_id)

    if g.user.id == message.user_id:
        flash("You can't like your messages. You noob.")

    else:
        like = Message.is_liked_by(g.user, message)
        if like:
            # Delete like
            db.session.delete(like)
            db.session.commit()
        else:
            # Add like
            like = Like(user_id=g.user.id, message_id=message_id)
            db.session.add(like)
            # g.user.liked_messages.append(message)
            # or   message.likers.append(user)
            db.session.commit()

    return redirect("/")
Beispiel #5
0
def add_like(message_id):
    """ Add a liked message """

    # first check if the user is the one doing the liking ?
    if not g.user:
        flash("Access unauthorized.", "danger")
        return redirect("/")

    # when somebody clicks on an empty star, add it to the likes

    #     form = MessageForm()

    # if form.validate_on_submit():
    #     msg = Message(text=form.text.data)
    #     g.user.messages.append(msg)
    #     db.session.commit()

    newlike = Like(message_being_liked_id=message_id,
                   user_doing_liking_id=g.user.id)
    g.user.likes.append(newlike)
    # db.session.add(newlike)
    db.session.commit()

    # what is it being added to? the likes table?

    return redirect(request.referrer)  # redirect back to page you're on
Beispiel #6
0
    def test_is_liked_by(self):
        """Does is_liked_by method return correct boolean?"""

        u = User(email="*****@*****.**",
                 username="******",
                 password="******")

        u2 = User(email="*****@*****.**",
                  username="******",
                  password="******")

        db.session.add(u)
        db.session.add(u2)
        db.session.commit()

        msg = Message(text="My dad makes margaritas!")
        u.messages.append(msg)
        db.session.commit()

        msg_to_like = Message.query.first()

        # gets the second user that was created (u2)
        liker = User.query.order_by(User.id.desc()).first()

        # gets u1
        nonliker = User.query.first()

        new_like = Like(user_id=liker.id, message_id=msg_to_like.id)
        db.session.add(new_like)
        db.session.commit()
        like = Message.query.first()

        self.assertEqual(like.is_liked_by(liker), True)
        self.assertEqual(like.is_liked_by(nonliker), False)
 def test_liking_message(self):
     """ Does user like a message? """
     like = Like(user_id=self.u2.id, message_id=self.m1.id)
     db.session.add(like)
     db.session.commit()
     self.assertEqual(len(self.m1.likers), 1)
     self.assertEqual(len(self.u2.liked_messages), 1)
Beispiel #8
0
    def get(self, post_id):
        if not self.user:
            return self.redirect('/login')

        key = ndb.Key('Post', int(post_id), parent=models.blog_key())
        post = key.get()

        if not post:
            self.error(404)
            return

        like_obj = Like.query(Like.post == post.key).get()

        if post.author == self.user.key:
            self.write("You can not like your own post")
        else:
            if like_obj:
                authors = like_obj.author
                for author in authors:
                    if (author == self.user.key):
                        return self.redirect("/blog/%s" % str(post.key.id()))
                like_obj.like_count += 1
                authors.append(self.user.key)
                like_obj.put()
                self.redirect('/')
            else:
                like_obj = Like(post=post.key, like_count=1)
                like_obj.author.append(self.user.key)
                like_obj.put()
                self.redirect('/')
Beispiel #9
0
def messages_like_toggle(message_id):
    """Like/unlike a message."""

    #TODO: think about splitting this into two routes - one that likes,
    # one that unlikes. Would provide more flexibility.

    if not g.user:
        flash("Access unauthorized.", "danger")
        return redirect("/")

    if g.like_form.validate_on_submit():
        like = Like.query.filter_by(message_id=message_id,
                                    user_id=g.user.id).one_or_none()

        if like:
            db.session.delete(like)
        else:
            new_like = Like(message_id=message_id, user_id=g.user.id)
            db.session.add(new_like)

        db.session.commit()

    ####### request.referrer puts every reload in the history #######
    # when using request.referrer have a fall back (e.g. homepage)
    return redirect(request.referrer)
Beispiel #10
0
def like_message(message_id):
    """Like a message."""
    # if not g.user:
    #     flash("Access unauthorized.", "danger")
    #     return redirect("/")

    try:
        liked = Like.query.filter_by(msg_id=message_id,
                                     user_id=g.user.id).first()
        # import pdb; pdb.set_trace()
        if liked:
            db.session.delete(liked)
            db.session.commit()
            return jsonify({"status": "DELETED"})
        else:
            like = Like(msg_id=message_id, user_id=g.user.id)
            db.session.add(like)
            db.session.commit()
            return jsonify({"status": "OK"})

        # cur_message = Message.query.get(message_id)
        # if cur_message.user_id == g.user.id:
        #     return redirect(request.referrer)
        # g_likes = [msg.id for msg in g.user.likes]

    except (IntegrityError, InvalidRequestError):
        db.session.rollback()
        liked_msg = Like.query.get_or_404((g.user.id, message_id))
        db.session.delete(liked_msg)
        db.session.commit()
        g_likes = [msg.id for msg in g.user.likes]

        return redirect(request.referrer)
 def get(self, post_id):
     if self.good_cookie_exists():
         #  put the user id and post_id into the Like entity
         #  go to success page, which will have link to home
         h = self.request.cookies.get('user')
         curusor = h.split("|")[0]
         # make sure user doesn't own post
         post_key = db.Key.from_path(
             'Post', int(post_id))  # returning something, but what???
         if db.get(post_key) is not None:  # if post exists, continue
             owns = self.user_owns_post(post_key)
             if owns:  # if user owns the post, end
                 self.redirect("/")
                 return
             else:  # otherwise post exists and user is not owner
                 likes = Like.all().filter("post_id = ",
                                           str(post_id)).filter(
                                               "user = "******"/")  # UI blocks multiple liking as well
                     return
                 else:
                     # new Like entity
                     l = Like(post_id=post_id, user=curusor)
                     l.put()  # commit entry
                     self.render("successlike.html", loul="liked")
         else:
             self.redirect("/")
             return
     else:
         self.redirect("/login")
         return
    def post(self, post_id):
        # Prevent users from liking their own posts
        post = self.secure_interaction(post_id,
                                       error_type="like",
                                       match_user=False)
        if post:
            user_id = self.check_for_user()
            # Determine if the user has liked the post before
            like = Like.by_user_post(user_id, str(post.key().id()))
            # If they have liked the post before remove the like and decrease
            # the post likes
            if like:
                post.likes -= 1
                like.delete()
                post.put()
            else:
                # If they have not liked the post before then add a like and
                # increase the post likes
                post.likes += 1
                l = Like(parent=blog_key(),
                         user_id=user_id,
                         post_id=str(post.key().id()))
                l.put()
                post.put()

            self.redirect('/post/%s' % str(post.key().id()))
Beispiel #13
0
 def put(self, request, pk, format=None):
     try:
         comment = Comment.objects.get(pk=pk)
         if request.data['type'] == 'update':
             if comment.user == request.user:
                 comment_serializer = CommentsSerializer(comment,
                                                         data=request.data)
                 if comment_serializer.is_valid():
                     comment_serializer.save()
                     return Response(comment_serializer.data)
                 else:
                     return Response(status.HTTP_400_BAD_REQUEST)
             else:
                 return Response(status.HTTP_405_METHOD_NOT_ALLOWED)
         elif request.data['type'] == 'like':
             already_liked_user = comment.get_users
             if request.user not in already_liked_user:
                 like = Like()
                 like.comment = comment
                 like.user = request.user
                 like.save()
                 return Response(status.HTTP_201_CREATED)
             else:
                 return Response(status.HTTP_501_NOT_IMPLEMENTED)
         elif request.data['type'] == 'unlike':
             already_liked_user = comment.get_users
             if request.user in already_liked_user:
                 like = Like.objects.get(user=request.user, comment=comment)
                 like.delete()
                 return Response(status.HTTP_201_CREATED)
         else:
             return Response(status.HTTP_501_NOT_IMPLEMENTED)
     except Comment.DoesNotExist:
         return Response(status.HTTP_404_NOT_FOUND)
Beispiel #14
0
def handle_like(message_id):
    """ Add a like to a message when star symbol is clicked. """
    """ Still need to add a button which links to this route (action/post)"""
    """ Should be able to unlike a warble as well by clicking on link"""
    if not g.user:
        flash("Please login.", "success")
        return redirect("/login")

    message = Message.query.get(message_id)
    like = Like.query.get((message_id, g.user.id))

    if like:
        db.session.delete(like)
        db.session.commit()
        flash("Like was removed!", "success")

    elif g.user.id == message.user_id:
        flash("Sorry! You can't like your own posts.", "danger")

    else:
        like = Like(msg_id=message_id, user_id=g.user.id)
        db.session.add(like)
        db.session.commit()
        flash("Like was added!", "success")

    return redirect("/")
Beispiel #15
0
    def setUp(self):
        '''
        Set up our test client and make a new message, user and like
        for each test to work with
        '''

        self.client = app.test_client()
        new_message = Message(id=1,
                              text="Testing",
                              timestamp=datetime.datetime(
                                  2018, 1, 1, 1, 1, 1, 1),
                              user_id=1)

        new_user = User(id=1,
                        email='*****@*****.**',
                        username='******',
                        image_url='/static/images/default-pic.png',
                        header_image_url='/static/images/warbler-hero.jpg',
                        bio='Test Bio',
                        location='Test Location',
                        password='******')

        new_like = Like(user_id=1, message_id=1)

        db.session.add(new_message)
        db.session.add(new_user)
        db.session.add(new_like)

        db.session.commit()
Beispiel #16
0
    def setUp(self):
        """Before each test, add sample city, user, cafe, and like"""

        City.query.delete()
        User.query.delete()
        Cafe.query.delete()
        Like.query.delete()

        city = City(**CITY_DATA)
        db.session.add(city)

        user = User.register(**TEST_USER_DATA)
        db.session.add(user)

        cafe = Cafe(**CAFE_DATA)
        db.session.add(cafe)
        db.session.commit()

        like = Like(user_id=user.id, cafe_id=cafe.id)
        db.session.add(like)
        db.session.commit()

        self.cafe_name = cafe.name
        self.cafe_id = cafe.id
        # self.cafe = cafe
        self.user = user
        self.like = like
Beispiel #17
0
    def test_like_model(self):
        """Does basic model work?"""

        u = User(email="*****@*****.**",
                 username="******",
                 password="******")

        u2 = User(email="*****@*****.**",
                  username="******",
                  password="******")

        db.session.add(u)
        db.session.add(u2)
        db.session.commit()

        msg = Message(text="My dad makes margaritas!")
        u.messages.append(msg)
        db.session.commit()

        msg_to_like = Message.query.first()

        # gets the second user that was created (u2)
        liker = User.query.order_by(User.id.desc()).first()

        # gets u1
        nonliker = User.query.first()

        new_like = Like(user_id=liker.id, message_id=msg_to_like.id)
        db.session.add(new_like)
        db.session.commit()
        like = Like.query.first()

        self.assertEqual(like.user_id, liker.id)
        self.assertEqual(like.message_id, msg_to_like.id)
Beispiel #18
0
 def post(self):
     post_id = int(self.request.get('post_id'))
     user_id = int(self.request.get('user_id'))
     post_username = self.request.get('username')
     message = ''
     u = self.current_user()
     if u:
         # check if user is not liking own post
         if u.username != post_username:
             # check if post was already liked
             likes = Like.all().filter('post_id =', post_id).filter(
                 'username ='******'/view?p=%s&u=%s&#likes' %
                               (post_id, user_id))
             else:
                 message = 'You can only like a post once'
         else:
             message = 'You cannot like your own post'
         self.redirect('/view?p=%s&u=%s&m=%s&#likes' %
                       (post_id, user_id, message))
     else:
         self.redirect('/login')
Beispiel #19
0
 def get(self, topic_id):
     key = getKey(topic_id)
     likes = Like.query().filter(Like.topic == key, Like.createdBy == self.user_info['user_id']).fetch(1)
     if len(likes) == 0:
         Like(topic=key, createdBy=self.user_info['user_id'], modifiedBy=self.user_info['user_id']).put()
     else:
         likes[0].key.delete()
     self.redirect(self.uri_for('home'))
Beispiel #20
0
def add_like():
    """Add like to comment."""
    comment_id = request.json["comment_id"]

    new_like = Like(comment_id=comment_id, user_id=g.user.id)
    db.session.add(new_like)
    db.session.commit()
    return ({"success": {"added_like": comment_id}})
Beispiel #21
0
 def get(self, action, post_id):
     if self.validate(action, post_id):
         params = {}
         like = Like(post=self.blog_post, liked_by=self.user)
         key = like.put()
         # get updated object
         params['post'] = db.get(key).post
         self.render("permalink.html", **params)
Beispiel #22
0
def add_fam_like(content,author, poet):
    """Add a like to quote from the api - they do not have ids from the api so they must be stored in the database"""

    quote = Quote.handle_api_quote(content=content, author=author)

    like = Like(poet_id=poet.id, quote_id=quote.id, is_user_quote=False)
    db.session.add(like)
    db.session.commit()
def like(eventId):
    if session.get("user"):
        like = Like(session["user_id"], eventId)
        db.session.add(like)
        db.session.commit()
        return redirect(url_for('getHome'))
    else:
        return redirect(url_for('login'))
Beispiel #24
0
 def post(self, post_id):
     post = Post.get_by_id(int(post_id))
     if post and post.author.key().id() == self.user.key().id():
         self.error(404)
     else:
         like = Like(post=post, user=self.user)
         like.put()
         time.sleep(1)
         self.redirect('/{}'.format(post_id))
Beispiel #25
0
    def test_likes_relationship(self):
        """ tests if the likes relationship is functional """

        l1 = Like(user_id=1000, msg_id=1000001)

        db.session.add(l1)
        db.session.commit()

        self.assertEqual(self.m1.likes, [l1])
Beispiel #26
0
def add_like():
    post = Post.query.get(request.form.get("post_id"))
    if not post:
        abort(404)
    like = Like(post.id, current_user.id)
    user = User.query.get(post.author.id)
    user.likes_value = user.likes_value + 1
    db.session.add(like)
    db.session.commit()
    return "1"
Beispiel #27
0
    def test_is_liked_by_true(self):
        """Does the is_liked_by work for the message model"""
        m1 = Message.query.get(99999)
        u2 = User.query.get(88888)

        # setting up u2 to like m1:
        like = Like(user_id=88888, mes_id=99999)
        db.session.add(like)
        db.session.commit()
        self.assertEqual(m1.is_liked_by(u2), True)
Beispiel #28
0
def like(request, pk):
    comment = get_object_or_404(Comment, pk=pk)
    topic_user = request.user.topic_user(comment.topic)
    for c in Dislike.objects.filter(user=topic_user, comment=comment):
        c.active = False
        c.save()
    if comment.liked_by.filter(pk=topic_user.pk).count() < 1:
        Like(user=topic_user, comment=comment).save()
    comment.save()
    return HttpResponse("")
Beispiel #29
0
    def setup_likes(self):
        m1 = Message(text="trending warble", user_id=self.testuser_id)
        m2 = Message(text="Eating some lunch", user_id=self.testuser_id)
        m3 = Message(id=9876, text="likable warble", user_id=self.u1_id)
        db.session.add_all([m1, m2, m3])
        db.session.commit()

        l1 = Like(user_id=self.testuser_id, message_id=9876)

        db.session.add(l1)
        db.session.commit()
Beispiel #30
0
def like_msg(id):
    if not g.user:
        flash("Access unauthorized.", "danger")
        return redirect("/")

    likes = Like(user_id=g.user.id, message_id=id)
    db.session.add(likes)
    db.session.commit()

    # return redirect(f"/messages/{id}")
    return redirect(url_for('messages_show', message_id=id))