X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/23f2690c54558c48e77b3653792674837ec67207..ace84ed0e370c5f1530bf02983990c0ab45b220b:/nominatim/api/status.py?ds=sidebyside diff --git a/nominatim/api/status.py b/nominatim/api/status.py index c8ebbefa..1069184c 100644 --- a/nominatim/api/status.py +++ b/nominatim/api/status.py @@ -5,14 +5,13 @@ # Copyright (C) 2023 by the Nominatim developer community. # For a full list of authors see the git log. """ -Classes and function releated to status call. +Classes and function related to status call. """ -from typing import Optional, cast +from typing import Optional import datetime as dt import dataclasses import sqlalchemy as sa -import asyncpg from nominatim.api.connection import SearchConnection from nominatim import version @@ -28,37 +27,26 @@ class StatusResult: database_version: Optional[version.NominatimVersion] = None -async def _get_database_date(conn: SearchConnection) -> Optional[dt.datetime]: - """ Query the database date. - """ - sql = sa.text('SELECT lastimportdate FROM import_status LIMIT 1') - result = await conn.execute(sql) - - for row in result: - return cast(dt.datetime, row[0]) - - return None - - -async def _get_database_version(conn: SearchConnection) -> Optional[version.NominatimVersion]: - sql = sa.text("""SELECT value FROM nominatim_properties - WHERE property = 'database_version'""") - result = await conn.execute(sql) - - for row in result: - return version.parse_version(cast(str, row[0])) - - return None - - async def get_status(conn: SearchConnection) -> StatusResult: """ Execute a status API call. """ status = StatusResult(0, 'OK') + + # Last update date + sql = sa.select(conn.t.import_status.c.lastimportdate).limit(1) + status.data_updated = await conn.scalar(sql) + + if status.data_updated is not None: + if status.data_updated.tzinfo is None: + status.data_updated = status.data_updated.replace(tzinfo=dt.timezone.utc) + else: + status.data_updated = status.data_updated.astimezone(dt.timezone.utc) + + # Database version try: - status.data_updated = await _get_database_date(conn) - status.database_version = await _get_database_version(conn) - except asyncpg.PostgresError: - return StatusResult(700, 'Database connection failed') + verstr = await conn.get_property('database_version') + status.database_version = version.parse_version(verstr) + except ValueError: + pass return status