aboutsummaryrefslogtreecommitdiff
path: root/app/blueprints/admin/admin.py
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2020-05-30 16:48:37 +0100
committerrubenwardy <rw@rubenwardy.com>2020-05-30 16:48:37 +0100
commitc1b4256d440d0c858dedb4971f96c78677538b1d (patch)
tree5ed79bee29ef3eba778398028044c31ee9b11ed3 /app/blueprints/admin/admin.py
parented78a2e06f7bb3090cf11632eccbfac3aa335030 (diff)
downloadcheatdb-c1b4256d440d0c858dedb4971f96c78677538b1d.tar.xz
Add delete unused uploads admin function
Diffstat (limited to 'app/blueprints/admin/admin.py')
-rw-r--r--app/blueprints/admin/admin.py31
1 files changed, 30 insertions, 1 deletions
diff --git a/app/blueprints/admin/admin.py b/app/blueprints/admin/admin.py
index 9af9c17..eca7ff2 100644
--- a/app/blueprints/admin/admin.py
+++ b/app/blueprints/admin/admin.py
@@ -26,7 +26,7 @@ from app.tasks.forumtasks import importTopicList, checkAllForumAccounts
from flask_wtf import FlaskForm
from wtforms import *
from app.utils import loginUser, rank_required, triggerNotif
-import datetime
+import datetime, os
@bp.route("/admin/", methods=["GET", "POST"])
@rank_required(UserRank.ADMIN)
@@ -114,6 +114,35 @@ def admin_page():
triggerNotif(package.author, current_user, msg, rel.getEditURL())
db.session.commit()
+ elif action == "cleanuploads":
+ upload_dir = app.config['UPLOAD_DIR']
+
+ (_, _, filenames) = next(os.walk(upload_dir))
+ existing_uploads = set(filenames)
+
+ if len(existing_uploads) != 0:
+ def getURLsFromDB(column):
+ results = db.session.query(column).filter(column != None, column != "").all()
+ return set([os.path.basename(x[0]) for x in results])
+
+ release_urls = getURLsFromDB(PackageRelease.url)
+ screenshot_urls = getURLsFromDB(PackageScreenshot.url)
+
+ db_urls = release_urls.union(screenshot_urls)
+ unreachable = existing_uploads.difference(db_urls)
+
+ import sys
+ print("On Disk: ", existing_uploads, file=sys.stderr)
+ print("In DB: ", db_urls, file=sys.stderr)
+ print("Unreachable: ", unreachable, file=sys.stderr)
+
+ for filename in unreachable:
+ os.remove(os.path.join(upload_dir, filename))
+
+ flash("Deleted " + str(len(unreachable)) + " unreachable uploads", "success")
+ else:
+ flash("No downloads to create", "danger")
+
else:
flash("Unknown action: " + action, "danger")