diff options
author | rubenwardy <rw@rubenwardy.com> | 2020-07-14 00:28:56 +0100 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2020-07-14 00:28:56 +0100 |
commit | aa6892da82c709670a447434496f16392617aa69 (patch) | |
tree | f8390e6baa9cc56e0bc804f7aef020149e4e10ab /app/tasks/importtasks.py | |
parent | 3fbc5f7751ad09243ce6b15a2d04ce5c2fb664a0 (diff) | |
download | cheatdb-aa6892da82c709670a447434496f16392617aa69.tar.xz |
Add admin function to import foreign release URLs
Diffstat (limited to 'app/tasks/importtasks.py')
-rw-r--r-- | app/tasks/importtasks.py | 26 |
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() |