Fix wrong release ID returned by API on explicit protocol version

This commit is contained in:
rubenwardy 2019-01-29 01:28:38 +00:00
parent 23c406bff9
commit 2844773e4d
2 changed files with 18 additions and 7 deletions

View File

@ -403,7 +403,7 @@ class Package(db.Model):
for e in PackagePropertyKey: for e in PackagePropertyKey:
setattr(self, e.name, getattr(package, e.name)) setattr(self, e.name, getattr(package, e.name))
def getAsDictionaryShort(self, base_url): def getAsDictionaryShort(self, base_url, protonum=None):
tnurl = self.getThumbnailURL(1) tnurl = self.getThumbnailURL(1)
return { return {
"name": self.name, "name": self.name,
@ -411,12 +411,12 @@ class Package(db.Model):
"author": self.author.display_name, "author": self.author.display_name,
"short_description": self.shortDesc, "short_description": self.shortDesc,
"type": self.type.toName(), "type": self.type.toName(),
"release": self.getDownloadRelease().id if self.getDownloadRelease() is not None else None, "release": self.getDownloadRelease(protonum).id if self.getDownloadRelease(protonum) is not None else None,
"thumbnail": (base_url + tnurl) if tnurl is not None else None, "thumbnail": (base_url + tnurl) if tnurl is not None else None,
"score": round(self.score * 10) / 10 "score": round(self.score * 10) / 10
} }
def getAsDictionary(self, base_url): def getAsDictionary(self, base_url, protonum=None):
tnurl = self.getThumbnailURL(1) tnurl = self.getThumbnailURL(1)
return { return {
"author": self.author.display_name, "author": self.author.display_name,
@ -440,7 +440,7 @@ class Package(db.Model):
"screenshots": [base_url + ss.url for ss in self.screenshots], "screenshots": [base_url + ss.url for ss in self.screenshots],
"url": base_url + self.getDownloadURL(), "url": base_url + self.getDownloadURL(),
"release": self.getDownloadRelease().id if self.getDownloadRelease() is not None else None, "release": self.getDownloadRelease(protonum).id if self.getDownloadRelease(protonum) is not None else None,
"score": round(self.score * 10) / 10 "score": round(self.score * 10) / 10
} }
@ -489,9 +489,20 @@ class Package(db.Model):
return url_for("package_download_page", return url_for("package_download_page",
author=self.author.username, name=self.name) author=self.author.username, name=self.name)
def getDownloadRelease(self): def getDownloadRelease(self, protonum=None):
version = None
if protonum is not None:
version = MinetestRelease.query.filter(MinetestRelease.protocol >= int(protonum)).first()
if version is not None:
version = version.id
else:
version = 10000000
for rel in self.releases: for rel in self.releases:
if rel.approved: if rel.approved and (protonum is None or
((rel.min_rel is None or rel.min_rel_id <= version) and \
(rel.max_rel is None or rel.max_rel_id >= version))):
return rel return rel
return None return None

View File

@ -27,7 +27,7 @@ def api_packages_page():
qb = QueryBuilder(request.args) qb = QueryBuilder(request.args)
query = qb.buildPackageQuery() query = qb.buildPackageQuery()
pkgs = [package.getAsDictionaryShort(app.config["BASE_URL"]) \ pkgs = [package.getAsDictionaryShort(app.config["BASE_URL"], request.args.get("protocol_version")) \
for package in query.all() if package.getDownloadRelease() is not None] for package in query.all() if package.getDownloadRelease() is not None]
return jsonify(pkgs) return jsonify(pkgs)