예제 #1
0
    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
예제 #2
0
 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
예제 #3
0
 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)
예제 #4
0
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
예제 #5
0
    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)
예제 #6
0
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'
예제 #7
0
 async def handler(request, name):
     return text('OK')
예제 #8
0
 async def handler(request, folder_id):
     return text('OK')
예제 #9
0
 async def handler(request, weight):
     results.append(weight)
     return text('OK')
예제 #10
0
 async def handler2(request, param):
     return text('OK2 ' + param)
예제 #11
0
async def handler_2(request):
    await asyncio.sleep(2)
    return text('OK')
예제 #12
0
 def handler(request):
     assert request.stream is None
     return text('OK')
예제 #13
0
 async def handler1(request):
     return text('OK1')
예제 #14
0
 async def handler2(request):
     return text('default')
예제 #15
0
 async def handler1(request):
     return text('Hello, world!')
예제 #16
0
 async def handler2(request):
     return text('You\'re at subdomain.example.com!')
예제 #17
0
 async def redirect_target(request):
     return text('OK')
예제 #18
0
 async def handler(request):
     return text('✓')
예제 #19
0
 def exception_list(request, exception):
     return text("ok")
예제 #20
0
 async def handler(request, unhashable):
     return text('OK')
예제 #21
0
 def handler(request):
     return text('OK')
예제 #22
0
 async def handler1(request):
     return text('You\'re at example.com!')
예제 #23
0
 async def handler2(request):
     return text('Duplicated')
예제 #24
0
 def handler_exception(request, exception):
     return text('Internal Server Error.', 500)
예제 #25
0
 async def get(request):
     return text('GET', headers={'Connection': 'close'})
예제 #26
0
 async def handler(request, folder_id):
     results.append(folder_id)
     return text('OK')
예제 #27
0
 async def handler1(request, path):
     return text('OK')
예제 #28
0
 async def handler1(request, param):
     return text('OK1 ' + param)
예제 #29
0
 async def handler2(request):
     return text('OK')
예제 #30
0
 async def handler(request, name):
     results.append(name)
     return text('OK')