Esempio n. 1
0
class Comment(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'))

    ## Only stored if the user unchecked the anonymous option
    user = db.Column(db.Integer, db.ForeignKey('user.id'))

    message = db.Column(db.Text)
    timestamp = db.Column(db.DateTime)
    upvotes = db.Column(db.Integer)
    downvotes = db.Column(db.Integer)
    parent_id = db.Column(db.Integer, db.ForeignKey('comment.id'))
    replies = db.relationship('Comment',
                              backref=db.backref('parent', remote_side=[id]),
                              lazy='dynamic')

    @hybrid_property
    def hn_score(self):
        s = self.upvotes - self.downvotes
        item_hour_age = (datetime.datetime.now() -
                         self.timestamp).total_seconds() / 3600.0
        return (s - 1) / (item_hour_age + 2)**1.8

    @hn_score.expression
    def hn_score(cls):
        s = cls.upvotes - cls.downvotes
        item_hour_age = -1 * func.date_part(
            'epoch', func.age(cls.timestamp, func.current_timestamp())) / 3600
        return (s - 1) / func.power((item_hour_age + 2), 1.8)
Esempio n. 2
0
class Post(db.Model):
    __tablename__ = 'post'

    id = db.Column(db.Integer, primary_key=True)
    message = db.Column(db.Text)
    timestamp = db.Column(db.DateTime)
    upvotes = db.Column(db.Integer)
    downvotes = db.Column(db.Integer)

    # Functional ways to calculate 'hotness'
    @hybrid_property
    def reddit_score(self):
        s = self.upvotes - self.downvotes
        order = func.log(10, func.greatest(func.abs(s), 1))
        sign = func.sign(s)
        seconds = func.date_part('epoch', self.timestamp) - 1134028003

        return func.round(func.cast(sign * order + seconds / 45000, Numeric),
                          7)

    @hybrid_property
    def hn_score(self):
        s = self.upvotes - self.downvotes
        item_hour_age = (datetime.datetime.now() -
                         self.timestamp).total_seconds() / 3600.0
        return (s - 1) / (item_hour_age + 2)**1.8

    @hn_score.expression
    def hn_score(cls):
        s = cls.upvotes - cls.downvotes
        item_hour_age = -1 * func.date_part(
            'epoch', func.age(cls.timestamp, func.current_timestamp())) / 3600
        return (s - 1) / func.power((item_hour_age + 2), 1.8)

    @hybrid_property
    def top(self):
        return self.upvotes - self.downvotes
Esempio n. 3
0
class RateLimit(db.Model):
    ip = db.Column(db.String(16), primary_key=True)
    last_request = db.Column(db.DateTime)
Esempio n. 4
0
class Vote(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
    user = db.Column(db.Integer, db.ForeignKey('user.id'))
    value = db.Column(db.Integer)
Esempio n. 5
0
class CommentVote(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    comment_id = db.Column(db.Integer, db.ForeignKey('comment.id'))
    user = db.Column(db.Integer, db.ForeignKey('user.id'))
    value = db.Column(db.Integer)
Esempio n. 6
0
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255))
    name = db.Column(db.String(255))
    last_post = db.Column(db.DateTime)
Esempio n. 7
0
class FacebookPost(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'))