Пример #1
0
    def connection_made(self, transport: asyncio.BaseTransport) -> None:
        super().connection_made(transport)

        assert isinstance(transport, asyncio.Transport)

        transport.write(b"HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello,")
        transport.close()
Пример #2
0
    async def __call__(self,
                       request: panic_request.Request,
                       response_callback: typing.Any,
                       transport: asyncio.BaseTransport = None) -> typing.Any:

        try:
            uri_route = self._panic.router.request(request.method, request.url)
        except panic_exceptions.NotFound as err:
            if WWW_DEBUG:
                response = panic_response.text(
                    f'Method[{request.method}] and Route[{request.url}] does not exist',
                    status=500)

            else:
                response = panic_response.text('Service Error', status=500)

            response_callback(response)
            return None

        if uri_route.streamable:
            raise NotImplementedError

        if uri_route.method is panic_datatypes.HTTPMethod.channel:
            while True:
                response = await uri_route.handler(request, response_callback)
                if response in [0]:
                    break

            await response_callback.close()
            transport.close()

        elif uri_route.awaitable:
            try:
                response = await uri_route.handler(request)
            except Exception as err:
                try:
                    if inspect.iscoroutinefunction(
                            self._panic.exception_handler):
                        response = self._panic.exception_handler(request, err)
                    else:
                        response = self._panic.exception_handler(request, err)
                except Exception as errZero:
                    if self._panic.params.debug:
                        response = panic_response.text(
                            f'Error[{errZero}] while handling error[{err}]',
                            status=500)
                    else:
                        response = panic_response.text('Internal Error',
                                                       status=500)

            response_callback(response)
        else:
            raise NotImplementedError