From 2844773e4d05b3453fb90e131035a1639f05cd84 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Tue, 29 Jan 2019 01:28:38 +0000 Subject: [PATCH] Fix wrong release ID returned by API on explicit protocol version --- app/models.py | 23 +++++++++++++++++------ app/views/api.py | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/app/models.py b/app/models.py index 2337b0b..e9cd65c 100644 --- a/app/models.py +++ b/app/models.py @@ -403,7 +403,7 @@ class Package(db.Model): for e in PackagePropertyKey: setattr(self, e.name, getattr(package, e.name)) - def getAsDictionaryShort(self, base_url): + def getAsDictionaryShort(self, base_url, protonum=None): tnurl = self.getThumbnailURL(1) return { "name": self.name, @@ -411,12 +411,12 @@ class Package(db.Model): "author": self.author.display_name, "short_description": self.shortDesc, "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, "score": round(self.score * 10) / 10 } - def getAsDictionary(self, base_url): + def getAsDictionary(self, base_url, protonum=None): tnurl = self.getThumbnailURL(1) return { "author": self.author.display_name, @@ -440,7 +440,7 @@ class Package(db.Model): "screenshots": [base_url + ss.url for ss in self.screenshots], "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 } @@ -489,9 +489,20 @@ class Package(db.Model): return url_for("package_download_page", 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: - 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 None diff --git a/app/views/api.py b/app/views/api.py index 273ae8e..855c6a5 100644 --- a/app/views/api.py +++ b/app/views/api.py @@ -27,7 +27,7 @@ def api_packages_page(): qb = QueryBuilder(request.args) 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] return jsonify(pkgs)