Commit 61a38f2e by Őry Máté

dashboard: allow waiting for Operation result

parent 531ce4e6
...@@ -52,6 +52,7 @@ from django_tables2 import SingleTableView ...@@ -52,6 +52,7 @@ from django_tables2 import SingleTableView
from braces.views import (LoginRequiredMixin, SuperuserRequiredMixin, from braces.views import (LoginRequiredMixin, SuperuserRequiredMixin,
PermissionRequiredMixin) PermissionRequiredMixin)
from braces.views._access import AccessMixin from braces.views._access import AccessMixin
from celery.exceptions import TimeoutError
from django_sshkey.models import UserKey from django_sshkey.models import UserKey
...@@ -583,12 +584,27 @@ class OperationView(RedirectToLoginMixin, DetailView): ...@@ -583,12 +584,27 @@ class OperationView(RedirectToLoginMixin, DetailView):
extra = {} extra = {}
result = None result = None
try: try:
self.get_op().async(user=request.user, **extra) task = self.get_op().async(user=request.user, **extra)
except Exception as e: except Exception as e:
messages.error(request, _('Could not start operation.')) messages.error(request, _('Could not start operation.'))
logger.exception(e) logger.exception(e)
result = e result = e
else: else:
wait = self.wait_for_result
if wait:
try:
result = task.get(timeout=wait,
interval=min((wait / 5, .5)))
except TimeoutError:
logger.debug("Result didn't arrive in %ss",
self.wait_for_result, exc_info=True)
except Exception as e:
messages.error(request, _('Operation failed.'))
logger.debug("Operation failed.", exc_info=True)
result = e
else:
messages.success(request, _('Operation succeeded.'))
if result is None:
messages.success(request, _('Operation is started.')) messages.success(request, _('Operation is started.'))
if "/json" in request.META.get("HTTP_ACCEPT", ""): if "/json" in request.META.get("HTTP_ACCEPT", ""):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment