def response(self, request, exception): """Fetches and executes an exception handler and returns a response object :param request: Request :param exception: Exception to handle :return: Response object """ handler = self.lookup(exception) response = None try: if handler: response = handler(request=request, exception=exception) if response is None: response = self.default(request=request, exception=exception) except Exception: self.log(format_exc()) if self.debug: url = getattr(request, 'url', 'unknown') response_message = ( 'Exception raised in exception handler "{}" ' 'for uri: "{}"\n{}').format( handler.__name__, url, format_exc()) self._log.error(response_message) return text(response_message, 500) else: return text('An error occurred while handling an error', 500) return response
def handler(request): response = text("OK") response.cookies['test'] = 'at you' response.cookies['test']['httponly'] = True response.cookies['test']['expires'] = datetime.now() + timedelta( seconds=10) return response
async def put(request): assert isinstance(request.stream, BodyChannel) result = '' while True: body_chunk = await request.stream.receive() if body_chunk['more_content'] is False: break result += body_chunk['content'].decode('utf-8') return text(result)
def test_composition_view_rejects_invalid_methods(method): app = Mach9('test_composition_view') view = CompositionView() view.add(['GET', 'POST', 'PUT'], lambda x: text('first method')) app.add_route(view, '/') if method in ['GET', 'POST', 'PUT']: request, response = getattr(app.test_client, method.lower())('/') assert response.status == 200 assert response.text == 'first method' if method in ['DELETE', 'PATCH']: request, response = getattr(app.test_client, method.lower())('/') assert response.status == 405
def default(self, request, exception): self.log(format_exc()) if issubclass(type(exception), Mach9Exception): return text( 'Error: {}'.format(exception), status=getattr(exception, 'status_code', 500), headers=getattr(exception, 'headers', dict()) ) elif self.debug: html_output = self._render_traceback_html(exception, request) response_message = ( 'Exception occurred while handling uri: "{}"\n{}'.format( request.url, format_exc())) self._log.error(response_message) return html(html_output, status=500) else: return html(INTERNAL_SERVER_ERROR_HTML, status=500)
def test_composition_view_runs_methods_as_expected(method): app = Mach9('test_composition_view') view = CompositionView() def first(request): assert request.stream is None return text('first method') view.add(['GET', 'POST', 'PUT'], first) view.add(['DELETE', 'PATCH'], lambda x: text('second method')) app.add_route(view, '/') if method in ['GET', 'POST', 'PUT']: request, response = getattr(app.test_client, method.lower())('/') assert response.text == 'first method' if method in ['DELETE', 'PATCH']: request, response = getattr(app.test_client, method.lower())('/') assert response.text == 'second method'
async def handler(request, name): return text('OK')
async def handler(request, folder_id): return text('OK')
async def handler(request, weight): results.append(weight) return text('OK')
async def handler2(request, param): return text('OK2 ' + param)
async def handler_2(request): await asyncio.sleep(2) return text('OK')
def handler(request): assert request.stream is None return text('OK')
async def handler1(request): return text('OK1')
async def handler2(request): return text('default')
async def handler1(request): return text('Hello, world!')
async def handler2(request): return text('You\'re at subdomain.example.com!')
async def redirect_target(request): return text('OK')
async def handler(request): return text('✓')
def exception_list(request, exception): return text("ok")
async def handler(request, unhashable): return text('OK')
def handler(request): return text('OK')
async def handler1(request): return text('You\'re at example.com!')
async def handler2(request): return text('Duplicated')
def handler_exception(request, exception): return text('Internal Server Error.', 500)
async def get(request): return text('GET', headers={'Connection': 'close'})
async def handler(request, folder_id): results.append(folder_id) return text('OK')
async def handler1(request, path): return text('OK')
async def handler1(request, param): return text('OK1 ' + param)
async def handler2(request): return text('OK')
async def handler(request, name): results.append(name) return text('OK')