mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-12-27 06:51:42 +03:00
use import date from osm2pgsql property table if available
This commit is contained in:
parent
247065ff6f
commit
ae7c584e28
@ -219,12 +219,11 @@ class SetupAll:
|
|||||||
""" Determine the database date and set the status accordingly.
|
""" Determine the database date and set the status accordingly.
|
||||||
"""
|
"""
|
||||||
with connect(dsn) as conn:
|
with connect(dsn) as conn:
|
||||||
if not offline:
|
properties.set_property(conn, 'database_version', str(NOMINATIM_VERSION))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
dbdate = status.compute_database_date(conn)
|
dbdate = status.compute_database_date(conn, offline)
|
||||||
status.set_status(conn, dbdate)
|
status.set_status(conn, dbdate)
|
||||||
LOG.info('Database is at %s.', dbdate)
|
LOG.info('Database is at %s.', dbdate)
|
||||||
except Exception as exc: # pylint: disable=broad-except
|
except Exception as exc: # pylint: disable=broad-except
|
||||||
LOG.error('Cannot determine date of database: %s', exc)
|
LOG.error('Cannot determine date of database: %s', exc)
|
||||||
|
|
||||||
properties.set_property(conn, 'database_version', str(NOMINATIM_VERSION))
|
|
||||||
|
@ -29,11 +29,24 @@ class StatusRow(TypedDict):
|
|||||||
indexed: Optional[bool]
|
indexed: Optional[bool]
|
||||||
|
|
||||||
|
|
||||||
def compute_database_date(conn: Connection) -> dt.datetime:
|
def compute_database_date(conn: Connection, offline: bool = False) -> dt.datetime:
|
||||||
""" Determine the date of the database from the newest object in the
|
""" Determine the date of the database from the newest object in the
|
||||||
data base.
|
data base.
|
||||||
"""
|
"""
|
||||||
# First, find the node with the highest ID in the database
|
# If there is a date from osm2pgsql available, use that.
|
||||||
|
if conn.table_exists('osm2pgsql_properties'):
|
||||||
|
with conn.cursor() as cur:
|
||||||
|
cur.execute(""" SELECT value FROM osm2pgsql_properties
|
||||||
|
WHERE property = 'current_timestamp' """)
|
||||||
|
row = cur.fetchone()
|
||||||
|
if row is not None:
|
||||||
|
return dt.datetime.strptime(row[0], "%Y-%m-%dT%H:%M:%SZ")\
|
||||||
|
.replace(tzinfo=dt.timezone.utc)
|
||||||
|
|
||||||
|
if offline:
|
||||||
|
raise UsageError("Cannot determine database date from data in offline mode.")
|
||||||
|
|
||||||
|
# Else, find the node with the highest ID in the database
|
||||||
with conn.cursor() as cur:
|
with conn.cursor() as cur:
|
||||||
if conn.table_exists('place'):
|
if conn.table_exists('place'):
|
||||||
osmid = cur.scalar("SELECT max(osm_id) FROM place WHERE osm_type='N'")
|
osmid = cur.scalar("SELECT max(osm_id) FROM place WHERE osm_type='N'")
|
||||||
|
@ -31,6 +31,22 @@ def setup_status_table(status_table):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('offline', [True, False])
|
||||||
|
def test_compute_database_date_from_osm2pgsql(table_factory, temp_db_conn, offline):
|
||||||
|
table_factory('osm2pgsql_properties', 'property TEXT, value TEXT',
|
||||||
|
content=(('current_timestamp', '2024-01-03T23:45:54Z'), ))
|
||||||
|
|
||||||
|
date = nominatim.db.status.compute_database_date(temp_db_conn, offline=offline)
|
||||||
|
assert date == iso_date('2024-01-03T23:45:54')
|
||||||
|
|
||||||
|
|
||||||
|
def test_compute_database_date_from_osm2pgsql_nodata(table_factory, temp_db_conn):
|
||||||
|
table_factory('osm2pgsql_properties', 'property TEXT, value TEXT')
|
||||||
|
|
||||||
|
with pytest.raises(UsageError, match='Cannot determine database date from data in offline mode'):
|
||||||
|
nominatim.db.status.compute_database_date(temp_db_conn, offline=True)
|
||||||
|
|
||||||
|
|
||||||
def test_compute_database_date_place_empty(place_table, temp_db_conn):
|
def test_compute_database_date_place_empty(place_table, temp_db_conn):
|
||||||
with pytest.raises(UsageError):
|
with pytest.raises(UsageError):
|
||||||
nominatim.db.status.compute_database_date(temp_db_conn)
|
nominatim.db.status.compute_database_date(temp_db_conn)
|
||||||
|
Loading…
Reference in New Issue
Block a user