aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2019-01-28 21:31:08 +0000
committerrubenwardy <rw@rubenwardy.com>2019-01-28 21:33:50 +0000
commit84b996c489b2003c8da010baf92b748915170974 (patch)
tree1aa351dd75196487bc2819e886a48af3d9537651
parentd77403c0be04a79693fca4b0a8c6a5b3e06a6177 (diff)
downloadcheatdb-84b996c489b2003c8da010baf92b748915170974.tar.xz
Add Minetest version checking to packages API
-rw-r--r--app/models.py7
-rw-r--r--app/querybuilder.py16
-rw-r--r--app/views/api.py6
-rw-r--r--migrations/versions/97a9c461bc2d_.py28
4 files changed, 53 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])
diff --git a/migrations/versions/97a9c461bc2d_.py b/migrations/versions/97a9c461bc2d_.py
new file mode 100644
index 0000000..0960d41
--- /dev/null
+++ b/migrations/versions/97a9c461bc2d_.py
@@ -0,0 +1,28 @@
+"""empty message
+
+Revision ID: 97a9c461bc2d
+Revises: 7def3e843d04
+Create Date: 2019-01-28 20:49:41.831991
+
+"""
+from alembic import op
+import sqlalchemy as sa
+from sqlalchemy.dialects import postgresql
+
+# revision identifiers, used by Alembic.
+revision = '97a9c461bc2d'
+down_revision = '7def3e843d04'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.add_column('minetest_release', sa.Column('protocol', sa.Integer(), nullable=False, server_default="0"))
+ # ### end Alembic commands ###
+
+
+def downgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_column('minetest_release', 'protocol')
+ # ### end Alembic commands ###