mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Add an exception for unsupported middleware wrapping for better failure
handling.
This commit is contained in:
@@ -19,7 +19,12 @@ import galaxy.model.mapping
|
||||
import galaxy.datatypes.registry
|
||||
import galaxy.web.framework
|
||||
import galaxy.web.framework.webapp
|
||||
from galaxy.webapps.util import build_template_error_formatters, wrap_if_allowed
|
||||
from galaxy.webapps.util import (
|
||||
MiddlewareWrapUnsupported,
|
||||
build_template_error_formatters,
|
||||
wrap_if_allowed,
|
||||
wrap_if_allowed_or_fail
|
||||
)
|
||||
from galaxy import util
|
||||
from galaxy.util import asbool
|
||||
from galaxy.util.properties import load_app_properties
|
||||
@@ -912,13 +917,15 @@ def wrap_in_middleware( app, global_conf, application_stack, **local_conf ):
|
||||
# Interactive exception debugging, scary dangerous if publicly
|
||||
# accessible, if not enabled we'll use the regular error printing
|
||||
# middleware.
|
||||
from weberror import evalexception
|
||||
import galaxy.web.framework.middleware.error
|
||||
app = wrap_if_allowed( app, stack, evalexception.EvalException,
|
||||
args=(conf,),
|
||||
kwargs=dict(templating_formatters=build_template_error_formatters()),
|
||||
alt_wrap=galaxy.web.framework.middleware.error.ErrorMiddleware,
|
||||
alt_args=(conf,) )
|
||||
try:
|
||||
from weberror import evalexception
|
||||
app = wrap_if_allowed_or_fail( app, stack, evalexception.EvalException,
|
||||
args=(conf,),
|
||||
kwargs=dict(templating_formatters=build_template_error_formatters()) )
|
||||
except MiddlewareWrapUnsupported as exc:
|
||||
log.warning(str(exc))
|
||||
import galaxy.web.framework.middleware.error
|
||||
app = wrap_if_allowed( app, stack, galaxy.web.framework.middleware.error.ErrorMiddleware, args=(conf,) )
|
||||
else:
|
||||
# Not in interactive debug mode, just use the regular error middleware
|
||||
import galaxy.web.framework.middleware.error
|
||||
|
||||
@@ -11,8 +11,12 @@ from inspect import isclass
|
||||
from paste import httpexceptions
|
||||
|
||||
from galaxy.util import asbool
|
||||
from galaxy.webapps.util import build_template_error_formatters, wrap_if_allowed
|
||||
|
||||
from galaxy.webapps.util import (
|
||||
MiddlewareWrapUnsupported,
|
||||
build_template_error_formatters,
|
||||
wrap_if_allowed,
|
||||
wrap_if_allowed_or_fail
|
||||
)
|
||||
import galaxy.model
|
||||
import galaxy.model.mapping
|
||||
import galaxy.web.framework.webapp
|
||||
@@ -119,13 +123,15 @@ def wrap_in_middleware( app, global_conf, application_stack, **local_conf ):
|
||||
# Interactive exception debugging, scary dangerous if publicly
|
||||
# accessible, if not enabled we'll use the regular error printing
|
||||
# middleware.
|
||||
from weberror import evalexception
|
||||
import galaxy.web.framework.middleware.error
|
||||
app = wrap_if_allowed( app, stack, evalexception.EvalException,
|
||||
args=(conf,),
|
||||
kwargs=dict(templating_formatters=build_template_error_formatters()),
|
||||
alt_wrap=galaxy.web.framework.middleware.error.ErrorMiddleware,
|
||||
alt_args=(conf,) )
|
||||
try:
|
||||
from weberror import evalexception
|
||||
app = wrap_if_allowed_or_fail( app, stack, evalexception.EvalException,
|
||||
args=(conf,),
|
||||
kwargs=dict(templating_formatters=build_template_error_formatters()) )
|
||||
except MiddlewareWrapUnsupported as exc:
|
||||
log.warning(str(exc))
|
||||
import galaxy.web.framework.middleware.error
|
||||
app = wrap_if_allowed( app, stack, galaxy.web.framework.middleware.error.ErrorMiddleware, args=(conf,) )
|
||||
else:
|
||||
# Not in interactive debug mode, just use the regular error middleware
|
||||
import galaxy.web.framework.middleware.error
|
||||
|
||||
@@ -14,7 +14,12 @@ from galaxy.util import asbool
|
||||
import galaxy.webapps.tool_shed.model
|
||||
import galaxy.webapps.tool_shed.model.mapping
|
||||
import galaxy.web.framework.webapp
|
||||
from galaxy.webapps.util import build_template_error_formatters, wrap_if_allowed
|
||||
from galaxy.webapps.util import (
|
||||
MiddlewareWrapUnsupported,
|
||||
build_template_error_formatters,
|
||||
wrap_if_allowed,
|
||||
wrap_if_allowed_or_fail
|
||||
)
|
||||
from galaxy import util
|
||||
from galaxy.util.properties import load_app_properties
|
||||
from routes.middleware import RoutesMiddleware
|
||||
@@ -237,13 +242,16 @@ def wrap_in_middleware( app, global_conf, application_stack, **local_conf ):
|
||||
# Interactive exception debugging, scary dangerous if publicly
|
||||
# accessible, if not enabled we'll use the regular error printing
|
||||
# middleware.
|
||||
from weberror import evalexception
|
||||
import galaxy.web.framework.middleware.error
|
||||
app = wrap_if_allowed( app, stack, evalexception.EvalException,
|
||||
args=(conf,),
|
||||
kwargs=dict(templating_formatters=build_template_error_formatters()),
|
||||
alt_wrap=galaxy.web.framework.middleware.error.ErrorMiddleware,
|
||||
alt_args=(conf,) )
|
||||
try:
|
||||
from weberror import evalexception
|
||||
app = wrap_if_allowed_or_fail( app, stack, evalexception.EvalException,
|
||||
args=(conf,),
|
||||
kwargs=dict(templating_formatters=build_template_error_formatters()) )
|
||||
except MiddlewareWrapUnsupported as exc:
|
||||
log.warning(str(exc))
|
||||
import galaxy.web.framework.middleware.error
|
||||
app = wrap_if_allowed( app, stack, galaxy.web.framework.middleware.error.ErrorMiddleware, args=(conf,) )
|
||||
|
||||
else:
|
||||
# Not in interactive debug mode, just use the regular error middleware
|
||||
import galaxy.web.framework.middleware.error
|
||||
|
||||
+30
-13
@@ -8,6 +8,10 @@ import mako.exceptions
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class MiddlewareWrapUnsupported(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def build_template_error_formatters():
|
||||
"""
|
||||
Build a list of template error formatters for WebError. When an error
|
||||
@@ -26,8 +30,26 @@ def build_template_error_formatters():
|
||||
return formatters
|
||||
|
||||
|
||||
def wrap_if_allowed(app, stack, wrap, name=None, args=None, kwargs=None,
|
||||
alt_wrap=None, alt_name=None, alt_args=None, alt_kwargs=None):
|
||||
def wrap_if_allowed_or_fail(app, stack, wrap, name=None, args=None, kwargs=None):
|
||||
"""
|
||||
Wrap the application with the given method if the application stack allows for it.
|
||||
|
||||
Arguments are the same as for :func:`wrap_if_allowed`.
|
||||
|
||||
Raises :exception:`MiddlewareWrapUnsupported` if the stack does not allow the middleware.
|
||||
"""
|
||||
name = name or wrap.__name__
|
||||
if not stack.allowed_middleware(wrap):
|
||||
raise MiddlewareWrapUnsupported(
|
||||
"'%s' is enabled in your configuration but the %s application stack does not support it, this "
|
||||
"middleware has been disabled" % (name, stack.name))
|
||||
args = args or []
|
||||
kwargs = kwargs or {}
|
||||
log.debug("Enabling '%s' middleware", name)
|
||||
return wrap(app, *args, **kwargs)
|
||||
|
||||
|
||||
def wrap_if_allowed(app, stack, wrap, name=None, args=None, kwargs=None):
|
||||
"""
|
||||
Wrap the application with the given method if the application stack allows for it.
|
||||
|
||||
@@ -43,16 +65,11 @@ def wrap_if_allowed(app, stack, wrap, name=None, args=None, kwargs=None,
|
||||
:param args: arguments to pass to `wrap` (not including `app` itself)
|
||||
:type kwargs: dict
|
||||
:param kwargs: keyword arguments to pass to `wrap`
|
||||
|
||||
Returns `app` unmodified if the stack does not allow the middleware.
|
||||
"""
|
||||
name = name or wrap.__name__
|
||||
if stack.allowed_middleware(wrap):
|
||||
args = args or []
|
||||
kwargs = kwargs or {}
|
||||
log.debug("Enabling '%s' middleware", name)
|
||||
return wrap(app, *args, **kwargs)
|
||||
else:
|
||||
log.warning("'%s' is enabled in your configuration but the %s application stack does not support it, this "
|
||||
"middleware has been disabled", name, stack.name)
|
||||
if alt_wrap:
|
||||
app = wrap_if_allowed(app, stack, alt_wrap, name=alt_name, args=alt_args, kwargs=alt_kwargs)
|
||||
try:
|
||||
return wrap_if_allowed_or_fail(app, stack, wrap, name=name, args=args, kwargs=kwargs)
|
||||
except MiddlewareWrapUnsupported as exc:
|
||||
log.warning(str(exc))
|
||||
return app
|
||||
|
||||
Reference in New Issue
Block a user