from . import bp
from app.models import *
from celery import uuid, group
-from app.tasks.importtasks import importRepoScreenshot, makeVCSRelease, checkZipRelease, updateMetaFromRelease
+from app.tasks.importtasks import importRepoScreenshot, makeVCSRelease, checkZipRelease, updateMetaFromRelease, importForeignDownloads
from app.tasks.forumtasks import importTopicList, checkAllForumAccounts
from flask_wtf import FlaskForm
from wtforms import *
return redirect(url_for("todo.view"))
+ elif action == "importforeign":
+ releases = PackageRelease.query.filter(PackageRelease.url.like("http%")).all()
+
+ tasks = []
+ for release in releases:
+ tasks.append(importForeignDownloads.s(release.id))
+
+ 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")))
from app import app
from app.models import *
from app.tasks import celery, TaskError
-from app.utils import randomString
+from app.utils import randomString, getExtension
from .minetestcheck import build_tree, MinetestCheckError, ContentType
from .minetestcheck.config import parse_conf
print("screenshot.png does not exist")
return None
+
+
+@celery.task(bind=True)
+def importForeignDownloads(self, id):
+ release = PackageRelease.query.get(id)
+ if release is None:
+ raise TaskError("No such release!")
+ elif release.package is None:
+ raise TaskError("No package attached to release")
+ elif not release.url.startswith("http"):
+ return
+
+ try:
+ ext = getExtension(release.url)
+ filename = randomString(10) + "." + ext
+ filepath = os.path.join(app.config["UPLOAD_DIR"], filename)
+ urllib.request.urlretrieve(release.url, filepath)
+
+ release.url = "/uploads/" + filename
+ db.session.commit()
+ except urllib.error.URLError:
+ release.task_id = self.request.id
+ release.approved = False
+ db.session.commit()
<option value="checkreleases">Validate all Zip releases</option>
<option value="reimportpackages">Reimport meta</option>
<option value="importmodlist">Import forum topics</option>
+ <option value="importforeign">Import foreign release downloads</option>
<option value="recalcscores">Recalculate package scores</option>
<option value="checkusers">Check forum users</option>
<option value="importscreenshots">Import screenshots from VCS</option>