]> git.lizzy.rs Git - cheatdb.git/commitdiff
Add ability to delete unused metapackages
authorrubenwardy <rw@rubenwardy.com>
Tue, 18 Aug 2020 13:22:16 +0000 (14:22 +0100)
committerrubenwardy <rw@rubenwardy.com>
Tue, 18 Aug 2020 13:22:16 +0000 (14:22 +0100)
app/blueprints/admin/admin.py
app/blueprints/metapackages/__init__.py
app/templates/admin/list.html
app/templates/meta/list.html

index d6f9965f629ff7e629a29898378c364848fc2a75..50ea64f8e432d8c0425b2708179a8876b4fadbe4 100644 (file)
@@ -150,6 +150,16 @@ def admin_page():
                        else:
                                flash("No downloads to create", "danger")
 
+                       return redirect(url_for("admin.admin_page"))
+
+               elif action == "delmetapackages":
+                       query = MetaPackage.query.filter(~MetaPackage.dependencies.any(), ~MetaPackage.packages.any())
+                       count = query.count()
+                       query.delete(synchronize_session=False)
+                       db.session.commit()
+
+                       flash("Deleted " + str(count) + " unused meta packages", "success")
+                       return redirect(url_for("admin.admin_page"))
                else:
                        flash("Unknown action: " + action, "danger")
 
index ef9f803a982fd5cfcdf3b49836bfdf81c659bb94..6d32e6521b469a8cdde8ffcba827bb2d018c54f3 100644 (file)
@@ -24,7 +24,10 @@ from app.models import *
 
 @bp.route("/metapackages/")
 def list_all():
-       mpackages = MetaPackage.query.order_by(db.asc(MetaPackage.name)).all()
+       mpackages = db.session.query(MetaPackage, func.count(MetaPackage.id)) \
+                       .select_from(MetaPackage).outerjoin(MetaPackage.packages) \
+                       .order_by(db.asc(MetaPackage.name)) \
+                       .group_by(MetaPackage.id).all()
        return render_template("meta/list.html", mpackages=mpackages)
 
 @bp.route("/metapackages/<name>/")
index 211c86ddb81299d01c8941e8a69fbe189f3f2385..4f426747929ce4b208d8473a30073649592ca90d 100644 (file)
                                        <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
                                        <div class="row px-3">
                                                <select name="action" class="custom-select col">
-                                                       <option value="delstuckreleases" selected>Delete stuck releases</option>
-                                                       <option value="checkreleases">Validate all Zip releases</option>
+                                                       <option value="cleanuploads" selected>Delete unreachable uploads</option>
+                                                       <option value="delmetapackages">Delete unused meta packages</option>
+                                                       <option value="delstuckreleases">Delete stuck releases</option>
                                                        <option value="reimportpackages">Reimport meta</option>
+                                                       <option value="recalcscores">Recalculate package scores</option>
+                                                       <option value="div">------</option>
+                                                       <option value="checkreleases">Validate all Zip releases</option>
                                                        <option value="importmodlist">Import forum topics</option>
                                                        <option value="importforeign">Import foreign release downloads</option>
-                                                       <option value="recalcscores">Recalculate package scores</option>
                                                        <option value="checkusers">Check forum users</option>
                                                        <option value="importscreenshots">Import screenshots from VCS</option>
-                                                       <option value="cleanuploads">Delete unreachable uploads</option>
                                                </select>
                                                <input type="submit" value="Perform" class="col-sm-auto btn btn-primary ml-2" />
                                        </div>
index 525bafdefb78c3489c3f912c89edcf7b4964e78d..a2a468c918227197a13b64232d838eaa1022012f 100644 (file)
@@ -5,11 +5,36 @@ Meta Packages
 {% endblock %}
 
 {% block content %}
-       <ul>
-               {% for meta in mpackages %}
-                       <li><a href="{{ url_for('metapackages.view', name=meta.name) }}">{{ meta.name }}</a> ({{ meta.packages.filter_by(soft_deleted=False, approved=True).all() | count }} packages)</li>
+       <div class="list-group">
+               <div class="list-group-item">
+                       <div class="row text-muted">
+                               <div class="col-sm">
+                                       {{ _("Name") }}
+                               </div>
+
+                               <div class="col-sm-1 text-center">
+                                       {{ _("Packages") }}
+                               </div>
+                       </div>
+               </div>
+
+               {% for pair in mpackages %}
+                       {% set meta = pair[0] %}
+                       {% set count = pair[1] %}
+                       <a class="list-group-item list-group-item-action"
+                                       href="{{ url_for('metapackages.view', name=meta.name) }}">
+                               <div class="row">
+                                       <div class="col-sm">
+                                               {{ meta.name }}
+                                       </div>
+
+                                       <div class="col-sm-1 text-center">
+                                               {{ count }}
+                                       </div>
+                               </div>
+                       </a>
                {% else %}
                        <li><i>No meta packages found.</i></li>
                {% endfor %}
-       </ul>
+       </div>
 {% endblock %}