aboutsummaryrefslogtreecommitdiff
path: root/app/tasks/importtasks.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/tasks/importtasks.py')
-rw-r--r--app/tasks/importtasks.py26
1 files changed, 25 insertions, 1 deletions
diff --git a/app/tasks/importtasks.py b/app/tasks/importtasks.py
index 0e5536c..e0b2308 100644
--- a/app/tasks/importtasks.py
+++ b/app/tasks/importtasks.py
@@ -27,7 +27,7 @@ from zipfile import ZipFile
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
@@ -341,3 +341,27 @@ def importRepoScreenshot(id):
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()