MCPcopy
hub / github.com/encode/uvicorn / run_asgi

Method run_asgi

uvicorn/protocols/http/h11_impl.py:413–439  ·  view source on GitHub ↗
(self, app: ASGI3Application)

Source from the content-addressed store, hash-verified

411
412 # ASGI exception wrapper
413 async def run_asgi(self, app: ASGI3Application) -> None:
414 try:
415 result = await app( # type: ignore[func-returns-value]
416 self.scope, self.receive, self.send
417 )
418 except BaseException as exc:
419 msg = "Exception in ASGI application\n"
420 self.logger.error(msg, exc_info=exc)
421 if not self.response_started:
422 await self.send_500_response()
423 else:
424 self.transport.close()
425 else:
426 if result is not None:
427 msg = "ASGI callable should return None, but returned '%s'."
428 self.logger.error(msg, result)
429 self.transport.close()
430 elif not self.response_started and not self.disconnected:
431 msg = "ASGI callable returned without starting response."
432 self.logger.error(msg)
433 await self.send_500_response()
434 elif not self.response_complete and not self.disconnected:
435 msg = "ASGI callable returned without completing response."
436 self.logger.error(msg)
437 self.transport.close()
438 finally:
439 self.on_response = lambda: None
440
441 async def send_500_response(self) -> None:
442 response_start_event: HTTPResponseStartEvent = {

Callers 1

handle_eventsMethod · 0.45

Calls 3

send_500_responseMethod · 0.95
appFunction · 0.50
closeMethod · 0.45

Tested by

no test coverage detected