diff options
author | rubenwardy <rw@rubenwardy.com> | 2020-07-18 03:14:56 +0100 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2020-07-18 03:14:56 +0100 |
commit | 64dab0c4b65ee9742108c64d304a66c28e84788d (patch) | |
tree | 1b4e1acd846fd6d5048d96acba6e9e8a536f3aeb /app/querybuilder.py | |
parent | dd7146205acda0b87f773b110d171c6a345c987d (diff) | |
download | cheatdb-64dab0c4b65ee9742108c64d304a66c28e84788d.tar.xz |
Filter tags by available packages in package search
Diffstat (limited to 'app/querybuilder.py')
-rw-r--r-- | app/querybuilder.py | 79 |
1 files changed, 43 insertions, 36 deletions
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 |