diff options
| author | rubenwardy <rw@rubenwardy.com> | 2019-01-28 21:31:08 +0000 |
|---|---|---|
| committer | rubenwardy <rw@rubenwardy.com> | 2019-01-28 21:33:50 +0000 |
| commit | 84b996c489b2003c8da010baf92b748915170974 (patch) | |
| tree | 1aa351dd75196487bc2819e886a48af3d9537651 /app | |
| parent | d77403c0be04a79693fca4b0a8c6a5b3e06a6177 (diff) | |
| download | cheatdb-84b996c489b2003c8da010baf92b748915170974.tar.xz | |
Add Minetest version checking to packages API
Diffstat (limited to 'app')
| -rw-r--r-- | app/models.py | 7 | ||||
| -rw-r--r-- | app/querybuilder.py | 16 | ||||
| -rw-r--r-- | app/views/api.py | 6 |
3 files changed, 25 insertions, 4 deletions
diff --git a/app/models.py b/app/models.py index 30dc27d..c1ec727 100644 --- a/app/models.py +++ b/app/models.py @@ -614,8 +614,9 @@ class Tag(db.Model): class MinetestRelease(db.Model): - id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String(100), unique=True, nullable=False) + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(100), unique=True, nullable=False) + protocol = db.Column(db.Integer, nullable=False, default=0) def __init__(self, name=None): self.name = name @@ -629,7 +630,7 @@ class PackageRelease(db.Model): package_id = db.Column(db.Integer, db.ForeignKey("package.id")) title = db.Column(db.String(100), nullable=False) - releaseDate = db.Column(db.DateTime, nullable=False) + releaseDate = db.Column(db.DateTime, nullable=False) url = db.Column(db.String(200), nullable=False) approved = db.Column(db.Boolean, nullable=False, default=False) task_id = db.Column(db.String(37), nullable=True) diff --git a/app/querybuilder.py b/app/querybuilder.py index a7f1323..e524bde 100644 --- a/app/querybuilder.py +++ b/app/querybuilder.py @@ -1,7 +1,8 @@ -from .models import db, PackageType, Package, ForumTopic, License +from .models import db, PackageType, Package, ForumTopic, License, MinetestRelease, PackageRelease from .utils import isNo from sqlalchemy.sql.expression import func from flask import abort +from sqlalchemy import or_ class QueryBuilder: title = None @@ -27,6 +28,7 @@ class QueryBuilder: self.limit = 1 if self.lucky else None self.order_by = args.get("sort") or "score" self.order_dir = args.get("order") or "desc" + self.protocol_version = args.get("protocol_version") if self.search is not None and self.search.strip() == "": self.search = None @@ -64,6 +66,18 @@ class QueryBuilder: query = query.filter(Package.license.has(License.is_foss == True)) query = query.filter(Package.media_license.has(License.is_foss == True)) + if self.protocol_version: + self.protocol_version = int(self.protocol_version) + version = MinetestRelease.query.filter(MinetestRelease.protocol>=self.protocol_version).first() + if version is not None: + version = version.id + else: + version = 10000000 + + query = query.join(Package.releases) \ + .filter(or_(PackageRelease.min_rel_id==None, PackageRelease.min_rel_id<=version)) \ + .filter(or_(PackageRelease.max_rel_id==None, PackageRelease.max_rel_id>=version)) + if self.limit: query = query.limit(self.limit) diff --git a/app/views/api.py b/app/views/api.py index 1e7190a..273ae8e 100644 --- a/app/views/api.py +++ b/app/views/api.py @@ -61,3 +61,9 @@ def topic_set_discard(): db.session.commit() return jsonify(topic.getAsDictionary()) + + +@app.route("/api/minetest_versions/") +def api_minetest_versions_page(): + return jsonify([{ "name": rel.name, "protocol_version": rel.protocol }\ + for rel in MinetestRelease.query.all() if rel.getActual() is not None]) |
