diff options
-rw-r--r-- | app/blueprints/admin/admin.py | 31 | ||||
-rw-r--r-- | app/templates/admin/list.html | 1 | ||||
-rw-r--r-- | 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 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") diff --git a/app/templates/admin/list.html b/app/templates/admin/list.html index 48158df..59dc8a0 100644 --- a/app/templates/admin/list.html +++ b/app/templates/admin/list.html @@ -25,6 +25,7 @@ <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> <!-- <option value="importdepends">Import dependencies from downloads</option> --> <!-- <option value="modprovides">Set provides to mod name</option> --> <!-- <option value="vcsrelease">Create VCS releases</option> --> diff --git a/app/utils.py b/app/utils.py index 73ce4e7..bb24920 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()): |