Add admin option to check all releases

This commit is contained in:
rubenwardy 2020-01-19 01:59:00 +00:00
parent facdd35b11
commit 6e626c0f89
5 changed files with 32 additions and 9 deletions

View File

@ -20,8 +20,8 @@ from flask_user import *
import flask_menu as menu import flask_menu as menu
from . import bp from . import bp
from app.models import * from app.models import *
from celery import uuid from celery import uuid, group
from app.tasks.importtasks import importRepoScreenshot, importAllDependencies, makeVCSRelease from app.tasks.importtasks import importRepoScreenshot, importAllDependencies, makeVCSRelease, checkZipRelease
from app.tasks.forumtasks import importTopicList, checkAllForumAccounts from app.tasks.forumtasks import importTopicList, checkAllForumAccounts
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import * from wtforms import *
@ -37,6 +37,21 @@ def admin_page():
PackageRelease.query.filter(PackageRelease.task_id != None).delete() PackageRelease.query.filter(PackageRelease.task_id != None).delete()
db.session.commit() db.session.commit()
return redirect(url_for("admin.admin_page")) return redirect(url_for("admin.admin_page"))
elif action == "checkreleases":
releases = PackageRelease.query.filter(PackageRelease.url.like("/uploads/%")).all()
tasks = []
for release in releases:
zippath = release.url.replace("/uploads/", app.config["UPLOAD_DIR"])
tasks.append(checkZipRelease.s(release.id, zippath))
result = group(tasks).apply_async()
while not result.ready():
import time
time.sleep(0.1)
return redirect(url_for("todo.view"))
elif action == "importmodlist": elif action == "importmodlist":
task = importTopicList.delay() task = importTopicList.delay()
return redirect(url_for("tasks.check", id=task.id, r=url_for("todo.topics"))) return redirect(url_for("tasks.check", id=task.id, r=url_for("todo.topics")))

View File

@ -22,7 +22,7 @@ from . import bp
from app.rediscache import has_key, set_key, make_download_key from app.rediscache import has_key, set_key, make_download_key
from app.models import * from app.models import *
from app.tasks.importtasks import makeVCSRelease, checkZIPRelease from app.tasks.importtasks import makeVCSRelease, checkZipRelease
from app.utils import * from app.utils import *
from celery import uuid from celery import uuid
@ -110,7 +110,7 @@ def create_release(package):
db.session.add(rel) db.session.add(rel)
db.session.commit() db.session.commit()
checkZIPRelease.apply_async((rel.id, uploadedPath), task_id=rel.task_id) checkZipRelease.apply_async((rel.id, uploadedPath), task_id=rel.task_id)
msg = "{}: Release {} created".format(package.title, rel.title) msg = "{}: Release {} created".format(package.title, rel.title)
triggerNotif(package.author, current_user, msg, rel.getEditURL()) triggerNotif(package.author, current_user, msg, rel.getEditURL())

View File

@ -229,8 +229,8 @@ def makeVCSReleaseFromGithub(id, branch, release, url):
return release.url return release.url
@celery.task() @celery.task(bind=True)
def checkZIPRelease(id, path): def checkZipRelease(self, id, path):
release = PackageRelease.query.get(id) release = PackageRelease.query.get(id)
if release is None: if release is None:
raise TaskError("No such release!") raise TaskError("No such release!")
@ -246,6 +246,13 @@ def checkZIPRelease(id, path):
tree = build_tree(temp, expected_type=ContentType[release.package.type.name], \ tree = build_tree(temp, expected_type=ContentType[release.package.type.name], \
author=release.package.author.username, name=release.package.name) author=release.package.author.username, name=release.package.name)
except MinetestCheckError as err: except MinetestCheckError as err:
if "Fails validation" not in release.title:
release.title += " (Fails validation)"
release.task_id = self.request.id
release.approved = False
db.session.commit()
raise TaskError(str(err)) raise TaskError(str(err))
release.task_id = None release.task_id = None

View File

@ -20,6 +20,7 @@
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" /> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<select name="action"> <select name="action">
<option value="delstuckreleases" selected>Delete stuck releases</option> <option value="delstuckreleases" selected>Delete stuck releases</option>
<option value="checkreleases">Validate all Zip releases</option>
<option value="importmodlist">Import forum topics</option> <option value="importmodlist">Import forum topics</option>
<option value="recalcscores">Recalculate package scores</option> <option value="recalcscores">Recalculate package scores</option>
<option value="checkusers">Check forum users</option> <option value="checkusers">Check forum users</option>

View File

@ -12,12 +12,12 @@ GitHub-Flask~=3.2
SQLAlchemy-Searchable==1.0.3 SQLAlchemy-Searchable==1.0.3
beautifulsoup4~=4.6 beautifulsoup4~=4.6
celery==4.1.1 celery~=4.4
kombu==4.2.0 kombu~=4.6
GitPython~=2.1 GitPython~=2.1
git-archive-all~=1.20 git-archive-all~=1.20
lxml~=4.2 lxml~=4.2
pillow~=6.2 pillow~=6.2
pyScss~=1.3 pyScss~=1.3
redis==2.10.6 redis~=3.3
psycopg2~=2.7 psycopg2~=2.7