]> git.openstreetmap.org Git - nominatim.git/blob - src/nominatim_api/status.py
Merge remote-tracking branch 'upstream/master'
[nominatim.git] / src / nominatim_api / status.py
1 # SPDX-License-Identifier: GPL-3.0-or-later
2 #
3 # This file is part of Nominatim. (https://nominatim.org)
4 #
5 # Copyright (C) 2024 by the Nominatim developer community.
6 # For a full list of authors see the git log.
7 """
8 Classes and function related to status call.
9 """
10 from typing import Optional
11 import datetime as dt
12 import dataclasses
13
14 import sqlalchemy as sa
15
16 from .connection import SearchConnection
17 from .version import NOMINATIM_API_VERSION
18
19 @dataclasses.dataclass
20 class StatusResult:
21     """ Result of a call to the status API.
22     """
23     status: int
24     message: str
25     software_version = NOMINATIM_API_VERSION
26     data_updated: Optional[dt.datetime] = None
27     database_version: Optional[str] = None
28
29
30 async def get_status(conn: SearchConnection) -> StatusResult:
31     """ Execute a status API call.
32     """
33     status = StatusResult(0, 'OK')
34
35     # Last update date
36     sql = sa.select(conn.t.import_status.c.lastimportdate).limit(1)
37     status.data_updated = await conn.scalar(sql)
38
39     if status.data_updated is not None:
40         if status.data_updated.tzinfo is None:
41             status.data_updated = status.data_updated.replace(tzinfo=dt.timezone.utc)
42         else:
43             status.data_updated = status.data_updated.astimezone(dt.timezone.utc)
44
45     # Database version
46     try:
47         status.database_version = await conn.get_property('database_version')
48     except ValueError:
49         pass
50
51     return status