from . import bp
from app.models import *
from celery import uuid, group
-from app.tasks.importtasks import importRepoScreenshot, makeVCSRelease, checkZipRelease
+from app.tasks.importtasks import importRepoScreenshot, makeVCSRelease, checkZipRelease, updateMetaFromRelease
from app.tasks.forumtasks import importTopicList, checkAllForumAccounts
from flask_wtf import FlaskForm
from wtforms import *
def admin_page():
if request.method == "POST":
action = request.form["action"]
+
if action == "delstuckreleases":
PackageRelease.query.filter(PackageRelease.task_id != None).delete()
db.session.commit()
return redirect(url_for("admin.admin_page"))
+
elif action == "checkreleases":
releases = PackageRelease.query.filter(PackageRelease.url.like("/uploads/%")).all()
time.sleep(0.1)
return redirect(url_for("todo.view"))
+
+ elif action == "reimportpackages":
+ tasks = []
+ for package in Package.query.filter_by(approved=True, soft_deleted=False).all():
+ release = package.releases.first()
+ if release:
+ zippath = release.url.replace("/uploads/", app.config["UPLOAD_DIR"])
+ tasks.append(updateMetaFromRelease.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":
task = importTopicList.delay()
return redirect(url_for("tasks.check", id=task.id, r=url_for("todo.topics")))
+
elif action == "checkusers":
task = checkAllForumAccounts.delay()
return redirect(url_for("tasks.check", id=task.id, r=url_for("admin.admin_page")))
+
elif action == "importscreenshots":
packages = Package.query \
.filter_by(soft_deleted=False) \
importRepoScreenshot.delay(package.id)
return redirect(url_for("admin.admin_page"))
+
elif action == "restore":
package = Package.query.get(request.form["package"])
if package is None:
package.soft_deleted = False
db.session.commit()
return redirect(url_for("admin.admin_page"))
- elif action == "modprovides":
- packages = Package.query.filter_by(type=PackageType.MOD).all()
- mpackage_cache = {}
- for p in packages:
- if len(p.provides) == 0:
- p.provides.append(MetaPackage.GetOrCreate(p.name, mpackage_cache))
- db.session.commit()
- return redirect(url_for("admin.admin_page"))
elif action == "recalcscores":
for p in Package.query.all():
p.recalcScore()
db.session.commit()
return redirect(url_for("admin.admin_page"))
- elif action == "vcsrelease":
- for package in Package.query.filter(Package.repo.isnot(None)).all():
- if package.releases.count() != 0:
- continue
-
- rel = PackageRelease()
- rel.package = package
- rel.title = datetime.date.today().isoformat()
- rel.url = ""
- rel.task_id = uuid()
- rel.approved = True
- db.session.add(rel)
- db.session.commit()
-
- makeVCSRelease.apply_async((rel.id, "master"), task_id=rel.task_id)
-
- msg = "Release {} created".format(rel.title)
- addNotification(package.maintainers, current_user, msg, rel.getEditURL(), package)
- db.session.commit()
elif action == "cleanuploads":
upload_dir = app.config['UPLOAD_DIR']