Exemple #1
0
def create_tables():
    User.create_table()
    Feed.create_table()
    Link.create_table()
    Ban.create_table()
    Comment.create_table()
    FeedAdmin.create_table()
    Report.create_table()
    create_subscriptions_table()
    DisposableToken.create_table()
    CommentVote.create_table()
    LinkVote.create_table()
Exemple #2
0
def create_tables(app):
    with app.app_context():
        from news.models.disposable_token import DisposableToken

        DisposableToken.create_table()

        from news.models.feed import Feed

        Feed.create_table()

        from news.models.user import User

        User.create_table()

        from news.models.link import Link

        Link.create_table()

        from news.models.vote import LinkVote

        LinkVote.create_table()

        from news.models.comment import Comment

        Comment.create_table()

        from news.models.vote import CommentVote

        CommentVote.create_table()

        from news.models.subscriptions import create_subscriptions_table

        create_subscriptions_table()

        from news.models.feed_admin import FeedAdmin

        FeedAdmin.create_table()

        from news.models.report import Report

        Report.create_table()

        from news.models.link import SavedLink

        SavedLink.create_table()

        from news.models.ban import Ban

        Ban.create_table()
Exemple #3
0
    def archive(self):
        """
        Archive the link

        Link get archived to save some memory in redis/db by disallowing voting and commenting on old links
        Upon archiving of the link all votes get deleted and only the final score is kept
        Same thing happens with the votes on comments of this link - votes get deleted and only final score is kept
        """

        # delete link votes from DB
        LinkVote.where("link_id", self.id).delete()
        # delete cached link votes
        link_upvotes_key, link_downvotes_key = LinkVote.set_keys(self.id)
        cache.delete(link_upvotes_key)
        cache.delete(link_downvotes_key)

        # delete comment votes
        for comment in Comment.where("link_id", self.id):
            # delete cached comment votes
            comment_upvotes_key, comment_downvotes_key = CommentVote.set_keys(
                comment.id
            )
            cache.delete(comment_upvotes_key)
            cache.delete(comment_downvotes_key)
            # delete comment votes from DB
            CommentVote.where("comment_id", comment.id).delete()

        # update self
        with self.get_read_modify_write_lock():
            self.archived = True
            self.update_with_cache()
Exemple #4
0
 def to_python(self, value: str) -> Optional[Comment]:
     if value == "":
         abort(404)
     comment = Comment.by_id(value)
     if comment is None:
         abort(404)
     return comment
Exemple #5
0
    def comments(self):
        """
        Users posted comments
        :return: comments
        """
        from news.models.comment import Comment

        return Comment.where("user_id", self.id).get()
Exemple #6
0
    def comment(self) -> "Comment":
        """
        Return the link that was voted on
        :return: link
        """
        from news.models.comment import Comment

        if "comment" not in self._relations:
            self._relations["comment"] = Comment.by_id(self.link_id)
        return self._relations["comment"]
Exemple #7
0
    def thing(self):
        if "thing" not in self._relations:
            if self.reportable_type == "comments":
                from news.models.comment import Comment

                self._relations["thing"] = Comment.by_id(self.reportable_id)
            if self.reportable_type == "links":
                from news.models.link import Link

                self._relations["thing"] = Link.by_id(self.reportable_id)
        return self._relations["thing"]
Exemple #8
0
def users_profile(username):
    user = User.by_username(username)
    if user is None:
        abort(404)
    if user.id == 12345:
        return render_template("autoposter_profile.html", user=user)
    links = (Link.where(
        "user_id", user.id).order_by_raw("ups - downs DESC").limit(9).get())
    comments = (Comment.where(
        "user_id", user.id).order_by_raw("ups - downs DESC").limit(6).get())
    administrations = FeedAdmin.by_user_id(user.id)
    return render_template(
        "profile.html",
        user=user,
        links=links[:min(len(links), 8)],
        has_more_links=len(links) > 8,
        comments=comments[:min(len(comments), 5)],
        has_more_comments=len(comments) > 5,
        administrations=administrations,
        active_section="about",
    )
Exemple #9
0
 def comment(self):
     return Comment.by_id(self.comment_id)