diff options
author | rubenwardy <rw@rubenwardy.com> | 2019-11-21 22:16:35 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-21 22:16:35 +0000 |
commit | 33b2b38308c41fc9d182df241a317f700d861d9a (patch) | |
tree | 78563e21df2243e7597e0f74c018e8ef01a37cee /app/models.py | |
parent | 94426e97aa0f539be2c0a04b91e1beefef30563e (diff) | |
download | cheatdb-33b2b38308c41fc9d182df241a317f700d861d9a.tar.xz |
Improve package scoring
Diffstat (limited to 'app/models.py')
-rw-r--r-- | app/models.py | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/app/models.py b/app/models.py index 3632ebc..9a80873 100644 --- a/app/models.py +++ b/app/models.py @@ -24,6 +24,7 @@ from flask import Flask, url_for from flask_sqlalchemy import SQLAlchemy, BaseQuery from flask_migrate import Migrate from flask_user import login_required, UserManager, UserMixin, SQLAlchemyAdapter +from sqlalchemy import func from sqlalchemy.orm import validates from sqlalchemy_searchable import SearchQueryMixin from sqlalchemy_utils.types import TSVectorType @@ -425,6 +426,9 @@ class Package(db.Model): for e in PackagePropertyKey: setattr(self, e.name, getattr(package, e.name)) + def getIsFOSS(self): + return self.license.is_foss and self.media_license.is_foss + def getState(self): if self.approved: return "approved" @@ -602,16 +606,20 @@ class Package(db.Model): else: raise Exception("Permission {} is not related to packages".format(perm.name)) - def recalcScore(self): - self.score = 10 + def setStartScore(self): + downloads = db.session.query(func.sum(PackageRelease.downloads)). \ + filter(PackageRelease.package_id == self.id).scalar() or 0 + + forum_score = 0 + forum_bonus = 0 + topic = self.forums and ForumTopic.query.get(self.forums) + if topic: + months = (datetime.datetime.now() - topic.created_at).days / 30 + years = months / 12 + forum_score = topic.views / max(years, 0.0416) + 80*min(max(months, 0.5), 6) + forum_bonus = topic.views + topic.posts - if self.forums is not None: - topic = ForumTopic.query.get(self.forums) - if topic: - days = (datetime.datetime.now() - topic.created_at).days - months = days / 30 - years = days / 365 - self.score = topic.views / max(years, 0.0416) + 80*min(max(months, 0.5), 6) + self.score = max(downloads, forum_score * 0.6) + forum_bonus if self.getMainScreenshotURL() is None: self.score *= 0.8 @@ -619,6 +627,7 @@ class Package(db.Model): if not self.license.is_foss or not self.media_license.is_foss: self.score *= 0.1 + class MetaPackage(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), unique=True, nullable=False) |