From c1b4256d440d0c858dedb4971f96c78677538b1d Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sat, 30 May 2020 16:48:37 +0100 Subject: [PATCH] Add delete unused uploads admin function --- app/blueprints/admin/admin.py | 31 ++++++++++++++++++++++++++++++- app/templates/admin/list.html | 1 + app/utils.py | 2 +- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/app/blueprints/admin/admin.py b/app/blueprints/admin/admin.py index 9af9c17c..eca7ff2f 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") diff --git a/app/templates/admin/list.html b/app/templates/admin/list.html index 48158df8..59dc8a09 100644 --- a/app/templates/admin/list.html +++ b/app/templates/admin/list.html @@ -25,6 +25,7 @@ + diff --git a/app/utils.py b/app/utils.py index 73ce4e7b..bb24920b 100644 --- a/app/utils.py +++ b/app/utils.py @@ -73,7 +73,7 @@ def doFileUpload(file, fileType, fileTypeDesc): ext = getExtension(file.filename) if ext is None or not ext in allowedExtensions: - flash("Please upload load " + fileTypeDesc, "danger") + flash("Please upload " + fileTypeDesc, "danger") return None, None if isImage and not isAllowedImage(file.stream.read()):