aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/blueprints/packages/packages.py5
-rw-r--r--app/querybuilder.py79
2 files changed, 46 insertions, 38 deletions
diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py
index f8124ea..17a12a1 100644
--- a/app/blueprints/packages/packages.py
+++ b/app/blueprints/packages/packages.py
@@ -96,8 +96,9 @@ def list_all():
qb.show_discarded = True
topics = qb.buildTopicQuery().all()
- tags = db.session.query(func.count(Tags.c.tag_id), Tag) \
- .select_from(Tag).outerjoin(Tags).group_by(Tag.id).order_by(db.asc(Tag.title)).all()
+ tags_query = db.session.query(func.count(Tags.c.tag_id), Tag) \
+ .select_from(Tag).join(Tags).join(Package).group_by(Tag.id).order_by(db.asc(Tag.title))
+ tags = qb.filterPackageQuery(tags_query).all()
selected_tags = set(qb.tags)
diff --git a/app/querybuilder.py b/app/querybuilder.py
index 43229db..1d6b6f0 100644
--- a/app/querybuilder.py
+++ b/app/querybuilder.py
@@ -76,45 +76,12 @@ class QueryBuilder:
else:
query = Package.query.filter_by(soft_deleted=False, approved=True)
+ return self.filterPackageQuery(self.orderPackageQuery(query))
+
+ def filterPackageQuery(self, query):
if len(self.types) > 0:
query = query.filter(Package.type.in_(self.types))
- if self.search:
- query = query.search(self.search, sort=self.order_by is None)
-
- if self.random:
- query = query.order_by(func.random())
- else:
- to_order = None
- if self.order_by is None and self.search:
- pass
- elif self.order_by is None or self.order_by == "score":
- to_order = Package.score
- elif self.order_by == "name":
- to_order = Package.name
- elif self.order_by == "title":
- to_order = Package.title
- elif self.order_by == "downloads":
- to_order = Package.downloads
- elif self.order_by == "created_at" or self.order_by == "date":
- to_order = Package.created_at
- elif self.order_by == "approved_at" or self.order_by == "date":
- to_order = Package.approved_at
- elif self.order_by == "last_release":
- to_order = PackageRelease.releaseDate
- else:
- abort(400)
-
- if to_order:
- if self.order_dir == "asc":
- to_order = db.asc(to_order)
- elif self.order_dir == "desc":
- to_order = db.desc(to_order)
- else:
- abort(400)
-
- query = query.order_by(to_order)
-
if self.author:
author = User.query.filter_by(username=self.author).first()
if not author:
@@ -150,6 +117,46 @@ class QueryBuilder:
return query
+ def orderPackageQuery(self, query):
+ if self.search:
+ query = query.search(self.search, sort=self.order_by is None)
+
+ if self.random:
+ query = query.order_by(func.random())
+ return query
+
+ to_order = None
+ if self.order_by is None and self.search:
+ pass
+ elif self.order_by is None or self.order_by == "score":
+ to_order = Package.score
+ elif self.order_by == "name":
+ to_order = Package.name
+ elif self.order_by == "title":
+ to_order = Package.title
+ elif self.order_by == "downloads":
+ to_order = Package.downloads
+ elif self.order_by == "created_at" or self.order_by == "date":
+ to_order = Package.created_at
+ elif self.order_by == "approved_at" or self.order_by == "date":
+ to_order = Package.approved_at
+ elif self.order_by == "last_release":
+ to_order = PackageRelease.releaseDate
+ else:
+ abort(400)
+
+ if to_order:
+ if self.order_dir == "asc":
+ to_order = db.asc(to_order)
+ elif self.order_dir == "desc":
+ to_order = db.desc(to_order)
+ else:
+ abort(400)
+
+ query = query.order_by(to_order)
+
+ return query
+
def buildTopicQuery(self, show_added=False):
query = ForumTopic.query