flows: show error message in flow when stage raises
This commit is contained in:
parent
34be1dd9f4
commit
de3b753a26
|
@ -0,0 +1,22 @@
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.pb-exception {
|
||||||
|
font-family: monospace;
|
||||||
|
overflow-x: scroll;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<header class="pf-c-login__main-header">
|
||||||
|
<h1 class="pf-c-title pf-m-3xl">
|
||||||
|
{% trans 'Whoops!' %}
|
||||||
|
</h1>
|
||||||
|
</header>
|
||||||
|
<div class="pf-c-login__main-body">
|
||||||
|
<h3>
|
||||||
|
{% trans 'Something went wrong! Please try again later.' %}
|
||||||
|
</h3>
|
||||||
|
{% if debug %}
|
||||||
|
<pre class="pb-exception">{{ tb }}</pre>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
|
@ -1,4 +1,5 @@
|
||||||
"""passbook multi-stage authentication engine"""
|
"""passbook multi-stage authentication engine"""
|
||||||
|
from traceback import format_tb
|
||||||
from typing import Any, Dict, Optional
|
from typing import Any, Dict, Optional
|
||||||
|
|
||||||
from django.http import (
|
from django.http import (
|
||||||
|
@ -8,7 +9,7 @@ from django.http import (
|
||||||
HttpResponseRedirect,
|
HttpResponseRedirect,
|
||||||
JsonResponse,
|
JsonResponse,
|
||||||
)
|
)
|
||||||
from django.shortcuts import get_object_or_404, redirect, reverse
|
from django.shortcuts import get_object_or_404, redirect, render, reverse
|
||||||
from django.template.response import TemplateResponse
|
from django.template.response import TemplateResponse
|
||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
from django.views.decorators.clickjacking import xframe_options_sameorigin
|
from django.views.decorators.clickjacking import xframe_options_sameorigin
|
||||||
|
@ -106,8 +107,18 @@ class FlowExecutorView(View):
|
||||||
stage=self.current_stage,
|
stage=self.current_stage,
|
||||||
flow_slug=self.flow.slug,
|
flow_slug=self.flow.slug,
|
||||||
)
|
)
|
||||||
|
try:
|
||||||
stage_response = self.current_stage_view.get(request, *args, **kwargs)
|
stage_response = self.current_stage_view.get(request, *args, **kwargs)
|
||||||
return to_stage_response(request, stage_response)
|
return to_stage_response(request, stage_response)
|
||||||
|
except Exception as exc: # pylint: disable=broad-except
|
||||||
|
return to_stage_response(
|
||||||
|
request,
|
||||||
|
render(
|
||||||
|
request,
|
||||||
|
"flows/error.html",
|
||||||
|
{"error": exc, "tb": "".join(format_tb(exc.__traceback__)),},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
def post(self, request: HttpRequest, *args, **kwargs) -> HttpResponse:
|
def post(self, request: HttpRequest, *args, **kwargs) -> HttpResponse:
|
||||||
"""pass post request to current stage"""
|
"""pass post request to current stage"""
|
||||||
|
@ -117,8 +128,18 @@ class FlowExecutorView(View):
|
||||||
stage=self.current_stage,
|
stage=self.current_stage,
|
||||||
flow_slug=self.flow.slug,
|
flow_slug=self.flow.slug,
|
||||||
)
|
)
|
||||||
|
try:
|
||||||
stage_response = self.current_stage_view.post(request, *args, **kwargs)
|
stage_response = self.current_stage_view.post(request, *args, **kwargs)
|
||||||
return to_stage_response(request, stage_response)
|
return to_stage_response(request, stage_response)
|
||||||
|
except Exception as exc: # pylint: disable=broad-except
|
||||||
|
return to_stage_response(
|
||||||
|
request,
|
||||||
|
render(
|
||||||
|
request,
|
||||||
|
"flows/error.html",
|
||||||
|
{"error": exc, "tb": "".join(format_tb(exc.__traceback__)),},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
def _initiate_plan(self) -> FlowPlan:
|
def _initiate_plan(self) -> FlowPlan:
|
||||||
planner = FlowPlanner(self.flow)
|
planner = FlowPlanner(self.flow)
|
||||||
|
|
Reference in New Issue