Пример #1
0
    def _process_error(self, error=None, result=None, request=None):
        """Process and sendback an error response
        """

        if isinstance(error, response.Response):
            error = error.subject

        log.err(error, 'Deferred failed:')
        return response.InternalServerError(
            'ERROR 500: Internal server error {}\n{}'.format(error, result))
Пример #2
0
    def dispatch(self, controller, request):
        """Dispatch a route and return back the appropiate response.

        :param controller: the mamba controller
        :type controller: :class:`~mamba.Controller`
        :param request: the HTTP request
        :type request: :class:`twisted.web.server.Request`
        """

        try:
            route = RouteDispatcher(self, controller, request).lookup()

            if type(route) is Route:
                # at this point we can get a Deferred or an inmediate result
                # depending on the user code
                result = defer.maybeDeferred(route, controller, request)
                result.addCallback(self._process, request)
                result.addErrback(self._process_error, request)
            elif route == 'NotImplemented':
                result = defer.succeed(response.NotImplemented(
                    UrlSanitizer().sanitize_container(
                        [controller.get_register_path()] + request.postpath
                    )
                ))
            else:
                msg = 'ERROR 404: {} not found'.format(
                    UrlSanitizer().sanitize_container(
                        [controller.get_register_path()] + request.postpath
                    )
                )
                result = defer.succeed(response.NotFound(
                    msg,
                    {'content-type': 'text/plain'}
                ))
        except TypeError as error:
            log.msg(error, logLevel=logging.WARN)
            result = defer.succeed(response.BadRequest(
                str(error),
                {'content-type': 'text/plain'}
            ))
        except Exception as error:
            log.err(error)
            result = response.InternalServerError(
                'ERROR 500: Internal server error: {}\n\t{}'.format(
                    type(error), error
                )
            )

        return result
Пример #3
0
 def test_internal_server_error_code_is_500(self):
     result = response.InternalServerError('')
     self.assertEqual(result.code, http.INTERNAL_SERVER_ERROR)