diff --git a/app/static/polltask.js b/app/static/polltask.js index bc9d802..8687665 100644 --- a/app/static/polltask.js +++ b/app/static/polltask.js @@ -32,6 +32,8 @@ function pollTask(poll_url, disableTimeout) { if (res.status == "SUCCESS") { console.log("Got result") resolve(res.result) + } else if (res.status == "FAILURE" || res.status == "REVOKED") { + reject() } else { retry() } diff --git a/app/tasks/__init__.py b/app/tasks/__init__.py index 40a824c..fe566b8 100644 --- a/app/tasks/__init__.py +++ b/app/tasks/__init__.py @@ -4,6 +4,12 @@ from celery import Celery from app import app from app.models import * +class TaskError(Exception): + def __init__(self, value): + self.value = value + def __str__(self): + return repr("TaskError: " + self.value) + class FlaskCelery(Celery): def __init__(self, *args, **kwargs): super(FlaskCelery, self).__init__(*args, **kwargs) diff --git a/app/tasks/importtasks.py b/app/tasks/importtasks.py index 7233d87..12b61dd 100644 --- a/app/tasks/importtasks.py +++ b/app/tasks/importtasks.py @@ -4,14 +4,7 @@ import urllib.request from urllib.parse import urlparse, quote_plus from app import app from app.models import * -from app.tasks import celery - -class TaskError(Exception): - def __init__(self, value): - self.value = value - def __str__(self): - return repr(self.value) - +from app.tasks import celery, TaskError class GithubURLMaker: def __init__(self, url): @@ -177,6 +170,7 @@ def getMeta(urlstr, author): @celery.task() def makeVCSRelease(id, branch): release = PackageRelease.query.get(id) + if release is None: raise TaskError("No such release!") diff --git a/app/templates/tasks/view.html b/app/templates/tasks/view.html index d47203f..df980fb 100644 --- a/app/templates/tasks/view.html +++ b/app/templates/tasks/view.html @@ -5,10 +5,10 @@ Working {% endblock %} {% block content %} - {% if "error" in info %} + {% if "error" in info or info.status == "FAILURE" or info.status == "REVOKED" %}

Task Failed

-

{{ info. error }}

+
{{ info.error }}
{% else %}

Working…

diff --git a/app/views/tasks.py b/app/views/tasks.py index e6a5dc4..58d6d25 100644 --- a/app/views/tasks.py +++ b/app/views/tasks.py @@ -3,7 +3,7 @@ from flask_user import * from flask.ext import menu from app import app, csrf from app.models import * -from app.tasks import celery +from app.tasks import celery, TaskError from app.tasks.importtasks import getMeta from .utils import shouldReturnJson # from celery.result import AsyncResult @@ -33,8 +33,14 @@ def check_task(id): info = { 'id': id, 'status': status, - 'error': str(result), } + + if current_user.is_authenticated and current_user.rank.atLeast(UserRank.ADMIN): + info["error"] = str(traceback) + elif str(result)[1:12] == "TaskError: ": + info["error"] = str(result)[12:-1] + else: + info["error"] = "Unknown server error" else: info = { 'id': id,