]> git.openstreetmap.org Git - nominatim.git/blob - src/nominatim_api/status.py
Merge pull request #3587 from danieldegroot2/lookup-spelling
[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
20 @dataclasses.dataclass
21 class StatusResult:
22     """ Result of a call to the status API.
23     """
24     status: int
25     message: str
26     software_version = NOMINATIM_API_VERSION
27     data_updated: Optional[dt.datetime] = None
28     database_version: Optional[str] = None
29
30
31 async def get_status(conn: SearchConnection) -> StatusResult:
32     """ Execute a status API call.
33     """
34     status = StatusResult(0, 'OK')
35
36     # Last update date
37     sql = sa.select(conn.t.import_status.c.lastimportdate).limit(1)
38     status.data_updated = await conn.scalar(sql)
39
40     if status.data_updated is not None:
41         if status.data_updated.tzinfo is None:
42             status.data_updated = status.data_updated.replace(tzinfo=dt.timezone.utc)
43         else:
44             status.data_updated = status.data_updated.astimezone(dt.timezone.utc)
45
46     # Database version
47     try:
48         status.database_version = await conn.get_property('database_version')
49     except ValueError:
50         pass
51
52     return status