in azure_functions_worker/http_v2.py [0:0]
def initialize_http_server(host_addr, **kwargs):
"""
Initialize HTTP v2 server for handling HTTP requests.
"""
try:
ext_base = HttpV2Registry.ext_base()
web_extension_mod_name = ext_base.ModuleTrackerMeta.get_module()
extension_module = importlib.import_module(web_extension_mod_name)
web_app_class = extension_module.WebApp
web_server_class = extension_module.WebServer
unused_port = get_unused_tcp_port()
app = web_app_class()
request_type = ext_base.RequestTrackerMeta.get_request_type()
@app.route
async def catch_all(request: request_type): # type: ignore
invoc_id = request.headers.get(X_MS_INVOCATION_ID)
if invoc_id is None:
raise MissingHeaderError("Header %s not found" %
X_MS_INVOCATION_ID)
logger.info('Received HTTP request for invocation %s', invoc_id)
http_coordinator.set_http_request(invoc_id, request)
http_resp = \
await http_coordinator.await_http_response_async(invoc_id)
logger.info('Sending HTTP response for invocation %s', invoc_id)
# if http_resp is an python exception, raise it
if isinstance(http_resp, Exception):
raise http_resp
return http_resp
web_server = web_server_class(host_addr, unused_port, app)
web_server_run_task = web_server.serve()
loop = asyncio.get_event_loop()
loop.create_task(web_server_run_task)
web_server_address = f"http://{host_addr}:{unused_port}"
logger.info('HTTP server starting on %s', web_server_address)
return web_server_address
except Exception as e:
raise HttpServerInitError("Error initializing HTTP server: %s" % e) \
from e