I am currently working on a model where I will judge the relevance of an article. This follows Hacker News' algorithm. Here is my articles model in app/articles/models.py
from app.extensions import db
class Article(db.Model):
""" database representation of an article """
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(128))
subtitle = db.Column(db.String(512))
body = db.Column(db.Text())
votes = db.Column(db.Integer, default=1)
views = db.Column(db.Integer, default=1)
timestamp = db.Column(db.DateTime, default=datetime.utcnow)
def popularity(self, gravity=1.8):
""" uses hacker news popularity rating """
submit_delta = (self.timestamp - datetime.utcnow()).total_seconds()
time_decay = submit_delta / 60 / 60
popularity = (self.views - 1) / (time_decay + 2) ** gravity
return popularity
Currently, I am trying to sort by the result of popularity
.
>>> from app.articles.models import Article
>>> Article.query.order_by(Article.popularity()).all()
this does not work. How would I sort my articles by their popularity?