def ensure_response(request): rv = yield from self._provider.local_dispatcher(request) status_or_headers = headers = None if isinstance(rv, tuple): rv, status_or_headers, headers = rv + (None,) * (3 - len(rv)) if rv is None: raise HTTPInternalServerError() if isinstance(status_or_headers, (list, dict)): headers, status_or_headers = status_or_headers, None if not isinstance(rv, Response): data = rv rv = Response(headers=headers, status=status_or_headers or 200, content_type='application/json') rv.text = json_serializer(data) headers = status_or_headers = None if status_or_headers is not None: if isinstance(status_or_headers, int): rv.status = status_or_headers if headers: rv.headers.extend(headers) return rv