def get_path_with_query_string(scope: WWWScope) -> str: path_with_query_string = urllib.parse.quote( scope.get("root_path", "") + scope["path"]) if scope["query_string"]: path_with_query_string = "{}?{}".format( path_with_query_string, scope["query_string"].decode("ascii")) return path_with_query_string
def get_accept_header(scope: WWWScope) -> str: accept = "*/*" for key, value in scope.get("headers", []): if key == b"accept": accept = value.decode("ascii") break return accept
async def __call__( self, scope: WWWScope, receive: ASGIReceiveCallable, send: ASGISendCallable ) -> None: self.task_counter += 1 task_counter = self.task_counter client = scope.get("client") prefix = "%s:%d - ASGI" % (client[0], client[1]) if client else "ASGI" async def inner_receive() -> ASGIReceiveEvent: message = await receive() logged_message = message_with_placeholders(message) log_text = "%s [%d] Receive %s" self.logger.trace( # type: ignore log_text, prefix, task_counter, logged_message ) return message async def inner_send(message: ASGISendEvent) -> None: logged_message = message_with_placeholders(message) log_text = "%s [%d] Send %s" self.logger.trace( # type: ignore log_text, prefix, task_counter, logged_message ) await send(message) logged_scope = message_with_placeholders(scope) log_text = "%s [%d] Started scope=%s" self.logger.trace(log_text, prefix, task_counter, logged_scope) # type: ignore try: await self.app(scope, inner_receive, inner_send) except BaseException as exc: log_text = "%s [%d] Raised exception" self.logger.trace(log_text, prefix, task_counter) # type: ignore raise exc from None else: log_text = "%s [%d] Completed" self.logger.trace(log_text, prefix, task_counter) # type: ignore
def get_client_addr(scope: WWWScope) -> str: client = scope.get("client") if not client: return "" return "%s:%d" % client