from __future__ import absolute_import
import json
-import sys
from contextlib import contextmanager
+import logging
+import six
import cherrypy
+from orchestrator import OrchestratorError
import rbd
import rados
-from .. import logger
from ..services.ceph_service import SendCommandError
from ..exceptions import ViewCacheNoDataException, DashboardException
from ..tools import wraps
-if sys.version_info < (3, 0):
+
+logger = logging.getLogger('exception')
+
+
+if six.PY2:
# Monkey-patch a __call__ method into @contextmanager to make
# it compatible to Python 3
- from contextlib import GeneratorContextManager # pylint: disable=no-name-in-module
+ # pylint: disable=no-name-in-module,ungrouped-imports
+ from contextlib import GeneratorContextManager
def init(self, *args):
if len(args) == 1:
GeneratorContextManager.__call__ = call
# pylint: disable=function-redefined
- def contextmanager(func):
+ def contextmanager(func): # noqa: F811
@wraps(func)
def helper(*args, **kwds):
if include_http_status:
out['status'] = getattr(e, 'status', 500)
if task:
- out['task'] = dict(name=task.name, metadata=task.metadata)
+ out['task'] = dict(name=task.name, metadata=task.metadata) # type: ignore
return out
return handler(*args, **kwargs)
# Don't catch cherrypy.* Exceptions.
except (ViewCacheNoDataException, DashboardException) as e:
- logger.exception('dashboard_exception_handler')
+ logger.exception('Dashboard Exception')
cherrypy.response.headers['Content-Type'] = 'application/json'
cherrypy.response.status = getattr(e, 'status', 400)
return json.dumps(serialize_dashboard_exception(e)).encode('utf-8')
yield
except SendCommandError as e:
raise DashboardException(e, component=component)
+
+
+@contextmanager
+def handle_orchestrator_error(component):
+ try:
+ yield
+ except OrchestratorError as e:
+ raise DashboardException(e, component=component)