]> git.openstreetmap.org Git - nominatim.git/blob - nominatim/api/status.py
Merge pull request #3291 from lonvia/fix-timezone-handling
[nominatim.git] / nominatim / api / status.py
1 # SPDX-License-Identifier: GPL-2.0-only
2 #
3 # This file is part of Nominatim. (https://nominatim.org)
4 #
5 # Copyright (C) 2023 by the Nominatim developer community.
6 # For a full list of authors see the git log.
7 """
8 Classes and function releated 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 nominatim.api.connection import SearchConnection
17 from nominatim import 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 = version.NOMINATIM_VERSION
26     data_updated: Optional[dt.datetime] = None
27     database_version: Optional[version.NominatimVersion] = 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         verstr = await conn.get_property('database_version')
48         status.database_version = version.parse_version(verstr)
49     except ValueError:
50         pass
51
52     return status