]> git.openstreetmap.org Git - nominatim.git/commitdiff
catch special async timeout error in servers
authorSarah Hoffmann <lonvia@denofr.de>
Sat, 27 Jan 2024 18:53:13 +0000 (19:53 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Sat, 27 Jan 2024 19:57:23 +0000 (20:57 +0100)
In Python <= 3.10 this is not yet the same as TimeoutError.

Fixes #3303.

nominatim/server/falcon/server.py
nominatim/server/starlette/server.py

index 5ec418a6f3b4aa5ad4c1f287506cb843b3b03504..00036795ae67b80f5c89726559bdd9860abb0dcb 100644 (file)
@@ -10,6 +10,7 @@ Server implementation using the falcon webserver framework.
 from typing import Optional, Mapping, cast, Any, List
 from pathlib import Path
 import datetime as dt
 from typing import Optional, Mapping, cast, Any, List
 from pathlib import Path
 import datetime as dt
+import asyncio
 
 from falcon.asgi import App, Request, Response
 
 
 from falcon.asgi import App, Request, Response
 
@@ -164,6 +165,8 @@ def get_application(project_dir: Path,
               middleware=middleware)
     app.add_error_handler(HTTPNominatimError, nominatim_error_handler)
     app.add_error_handler(TimeoutError, timeout_error_handler)
               middleware=middleware)
     app.add_error_handler(HTTPNominatimError, nominatim_error_handler)
     app.add_error_handler(TimeoutError, timeout_error_handler)
+    # different from TimeoutError in Python <= 3.10
+    app.add_error_handler(asyncio.TimeoutError, timeout_error_handler)
 
     legacy_urls = api.config.get_bool('SERVE_LEGACY_URLS')
     for name, func in api_impl.ROUTES:
 
     legacy_urls = api.config.get_bool('SERVE_LEGACY_URLS')
     for name, func in api_impl.ROUTES:
index 33ab22c7bcee7c2b1994ab56496acec886f38d30..f793dfde30a274533e2750f7a09a00a792710494 100644 (file)
@@ -10,6 +10,7 @@ Server implementation using the starlette webserver framework.
 from typing import Any, Optional, Mapping, Callable, cast, Coroutine, Dict, Awaitable
 from pathlib import Path
 import datetime as dt
 from typing import Any, Optional, Mapping, Callable, cast, Coroutine, Dict, Awaitable
 from pathlib import Path
 import datetime as dt
+import asyncio
 
 from starlette.applications import Starlette
 from starlette.routing import Route
 
 from starlette.applications import Starlette
 from starlette.routing import Route
@@ -144,7 +145,8 @@ def get_application(project_dir: Path,
         middleware.append(Middleware(FileLoggingMiddleware, file_name=log_file))
 
     exceptions: Dict[Any, Callable[[Request, Exception], Awaitable[Response]]] = {
         middleware.append(Middleware(FileLoggingMiddleware, file_name=log_file))
 
     exceptions: Dict[Any, Callable[[Request, Exception], Awaitable[Response]]] = {
-        TimeoutError: timeout_error
+        TimeoutError: timeout_error,
+        asyncio.TimeoutError: timeout_error
     }
 
     async def _shutdown() -> None:
     }
 
     async def _shutdown() -> None: