diff options
Diffstat (limited to 'app/blueprints/admin/admin.py')
-rw-r--r-- | app/blueprints/admin/admin.py | 31 |
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") |