]> git.openstreetmap.org Git - nominatim.git/commitdiff
fix error message for non-existing database
authorSarah Hoffmann <lonvia@denofr.de>
Wed, 7 Dec 2022 19:05:24 +0000 (20:05 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Tue, 3 Jan 2023 09:03:00 +0000 (10:03 +0100)
nominatim/apicmd/status.py
nominatim/result_formatter/v1.py
nominatim/server/falcon/server.py
nominatim/server/sanic/server.py
nominatim/server/starlette/server.py
test/python/api/test_api_status.py
test/python/result_formatter/test_v1.py

index b5ee9cb94ab4c9dec514a6caf57b401ae89c5fd8..07a1c321789eeeb4b0992d39b71ec719da431c51 100644 (file)
@@ -61,6 +61,6 @@ async def get_status(engine: AsyncEngine) -> StatusResult:
             status.data_updated = await _get_database_date(conn)
             status.database_version = await _get_database_version(conn)
     except asyncpg.PostgresError:
-        return StatusResult(700, 'No database')
+        return StatusResult(700, 'Database connection failed')
 
     return status
index 081f451e5f01ad5b2ea74e5d5022eb2a76d2d37b..6d25ce6cf3c7ad70c348a3249a382b25db541483 100644 (file)
@@ -18,7 +18,10 @@ create = FormatDispatcher()
 
 @create.format_func(StatusResult, 'text')
 def _format_status_text(result: StatusResult) -> str:
-    return result.message
+    if result.status:
+        return f"ERROR: {result.message}"
+
+    return 'OK'
 
 
 @create.format_func(StatusResult, 'json')
index b7b1aaa5bf5e70b4d9dd4e40fc33a94cbc043b71..81e6ed396846d34cd47f534231ade5ab8da03a7b 100644 (file)
@@ -65,6 +65,8 @@ class NominatimV1:
         result = await self.api.status()
 
         self.format_response(req, resp, result)
+        if result.status and req.context.format == 'text':
+            resp.status = 500
 
 
 def get_application(project_dir: Path,
index d00676b915eb65737767e66f0fe5d9da5ba77c87..74841f3f798298a68a78339a3ac24cb09b64ef90 100644 (file)
@@ -61,7 +61,13 @@ async def extract_format(request: sanic.Request) -> Optional[sanic.HTTPResponse]
 async def status(request: sanic.Request) -> sanic.HTTPResponse:
     """ Implementation of status endpoint.
     """
-    return api_response(request,await request.app.ctx.api.status())
+    result = await request.app.ctx.api.status()
+    response = api_response(request, result)
+
+    if request.ctx.format == 'text' and result.status:
+        response.status = 500
+
+    return response
 
 
 def get_application(project_dir: Path,
index bed82f70f2f198c3a49a3519c4301a91caa8296b..41ad899c9908769b970455faab3ffd159e8c688f 100644 (file)
@@ -60,7 +60,12 @@ async def on_status(request: Request) -> Response:
     """
     parse_format(request, StatusResult, 'text')
     result = await request.app.state.API.status()
-    return format_response(request, result)
+    response = format_response(request, result)
+
+    if request.state.format == 'text' and result.status:
+        response.status_code = 500
+
+    return response
 
 
 V1_ROUTES = [
index aae5055ee645db88183d32efee981380ccf937b5..38c0fa7fe6b23078d29ffbc333df567d1b8665b2 100644 (file)
@@ -54,7 +54,7 @@ def test_status_database_not_found(monkeypatch):
     result = api.status()
 
     assert result.status == 700
-    assert result.message == 'No database'
+    assert result.message == 'Database connection failed'
     assert result.software_version == version_str()
     assert result.database_version is None
     assert result.data_updated is None
index da944c251b0e9c7b522e5d67406a4325d6fab6ac..5b7d2bfc4ff78c8d0dd0c452000b4113dfecf9f8 100644 (file)
@@ -38,7 +38,11 @@ class TestStatusResultFormat:
 
 
     def test_format_text(self):
-        assert self.formatter.format(StatusResult(0, 'message here'), 'text') == 'message here'
+        assert self.formatter.format(StatusResult(0, 'message here'), 'text') == 'OK'
+
+
+    def test_format_text(self):
+        assert self.formatter.format(StatusResult(500, 'message here'), 'text') == 'ERROR: message here'
 
 
     def test_format_json_minimal(self):