]> git.lizzy.rs Git - cheatdb.git/blobdiff - app/querybuilder.py
Filter tags by available packages in package search
[cheatdb.git] / app / querybuilder.py
index 43229dbc77d3e0b3f68b2380d09dbd64ef34fc9c..1d6b6f063c2368117d96ba1f789da503301cf838 100644 (file)
@@ -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