]> git.lizzy.rs Git - cheatdb.git/blob - app/blueprints/metapackages/__init__.py
896a260cad600f13d49eeab8bc4404d72832a1b0
[cheatdb.git] / app / blueprints / metapackages / __init__.py
1 # ContentDB
2 # Copyright (C) 2018  rubenwardy
3 #
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program.  If not, see <https://www.gnu.org/licenses/>.
16
17
18 from flask import *
19
20 bp = Blueprint("metapackages", __name__)
21
22 from flask_user import *
23 from app.models import *
24
25 @bp.route("/metapackages/")
26 def list_all():
27         mpackages = db.session.query(MetaPackage, func.count(Package.id)) \
28                         .select_from(MetaPackage).outerjoin(MetaPackage.packages) \
29                         .order_by(db.asc(MetaPackage.name)) \
30                         .group_by(MetaPackage.id).all()
31         return render_template("metapackages/list.html", mpackages=mpackages)
32
33 @bp.route("/metapackages/<name>/")
34 def view(name):
35         mpackage = MetaPackage.query.filter_by(name=name).first()
36         if mpackage is None:
37                 abort(404)
38
39         dependers = db.session.query(Package) \
40                 .select_from(MetaPackage) \
41                 .filter(MetaPackage.name==name) \
42                 .join(MetaPackage.dependencies) \
43                 .join(Dependency.depender) \
44                 .filter(Dependency.optional==False, Package.approved==True, Package.soft_deleted==False) \
45                 .all()
46
47         optional_dependers = db.session.query(Package) \
48                 .select_from(MetaPackage) \
49                 .filter(MetaPackage.name==name) \
50                 .join(MetaPackage.dependencies) \
51                 .join(Dependency.depender) \
52                 .filter(Dependency.optional==True, Package.approved==True, Package.soft_deleted==False) \
53                 .all()
54
55         similar_topics = None
56         if mpackage.packages.filter_by(approved=True, soft_deleted=False).count() == 0:
57                 similar_topics = ForumTopic.query \
58                                 .filter_by(name=name) \
59                                 .order_by(db.asc(ForumTopic.name), db.asc(ForumTopic.title)) \
60                                 .all()
61
62         return render_template("metapackages/view.html", mpackage=mpackage, \
63                 dependers=dependers, optional_dependers=optional_dependers, \
64                 similar_topics=similar_topics)