X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/8f0885f6cb24f545a2f5021d53d8aec64a72bf9b..4080fbb95cd2a12c93276c1f6e58226d1c534406:/nominatim/db/status.py diff --git a/nominatim/db/status.py b/nominatim/db/status.py index a0454771..225638f4 100644 --- a/nominatim/db/status.py +++ b/nominatim/db/status.py @@ -1,11 +1,12 @@ """ -Access and helper functions for the status table. +Access and helper functions for the status and status log table. """ import datetime as dt import logging import re from ..tools.exec_utils import get_url +from ..errors import UsageError LOG = logging.getLogger() @@ -19,7 +20,7 @@ def compute_database_date(conn): if osmid is None: LOG.fatal("No data found in the database.") - raise RuntimeError("No data found in the database.") + raise UsageError("No data found in the database.") LOG.info("Using node id %d for timestamp lookup", osmid) # Get the node from the API to find the timestamp when it was created. @@ -31,7 +32,7 @@ def compute_database_date(conn): if match is None: LOG.fatal("The node data downloaded from the API does not contain valid data.\n" "URL used: %s", node_url) - raise RuntimeError("Bad API data.") + raise UsageError("Bad API data.") LOG.debug("Found timestamp %s", match[1]) @@ -39,13 +40,19 @@ def compute_database_date(conn): def set_status(conn, date, seq=None, indexed=True): - """ Replace the current status with the given status. + """ Replace the current status with the given status. If date is `None` + then only sequence and indexed will be updated as given. Otherwise + the whole status is replaced. """ - assert date.tzinfo == dt.timezone.utc + assert date is None or date.tzinfo == dt.timezone.utc with conn.cursor() as cur: - cur.execute("TRUNCATE TABLE import_status") - cur.execute("""INSERT INTO import_status (lastimportdate, sequence_id, indexed) - VALUES (%s, %s, %s)""", (date, seq, indexed)) + if date is None: + cur.execute("UPDATE import_status set sequence_id = %s, indexed = %s", + (seq, indexed)) + else: + cur.execute("TRUNCATE TABLE import_status") + cur.execute("""INSERT INTO import_status (lastimportdate, sequence_id, indexed) + VALUES (%s, %s, %s)""", (date, seq, indexed)) conn.commit() @@ -61,3 +68,21 @@ def get_status(conn): row = cur.fetchone() return row['lastimportdate'], row['sequence_id'], row['indexed'] + + +def set_indexed(conn, state): + """ Set the indexed flag in the status table to the given state. + """ + with conn.cursor() as cur: + cur.execute("UPDATE import_status SET indexed = %s", (state, )) + conn.commit() + + +def log_status(conn, start, event, batchsize=None): + """ Write a new status line to the `import_osmosis_log` table. + """ + with conn.cursor() as cur: + cur.execute("""INSERT INTO import_osmosis_log + (batchend, batchseq, batchsize, starttime, endtime, event) + SELECT lastimportdate, sequence_id, %s, %s, now(), %s FROM import_status""", + (batchsize, start, event))