]> git.openstreetmap.org Git - nominatim.git/blobdiff - nominatim/db/status.py
introduce custom UsageError
[nominatim.git] / nominatim / db / status.py
index af4b85c345b015690bb9c93952720816e2e07537..75da3c166029fa8cc4266b9a76aed5fe97b7dcdc 100644 (file)
@@ -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])
 
@@ -48,3 +49,34 @@ def set_status(conn, date, seq=None, indexed=True):
                        VALUES (%s, %s, %s)""", (date, seq, indexed))
 
     conn.commit()
+
+
+def get_status(conn):
+    """ Return the current status as a triple of (date, sequence, indexed).
+        If status has not been set up yet, a triple of None is returned.
+    """
+    with conn.cursor() as cur:
+        cur.execute("SELECT * FROM import_status LIMIT 1")
+        if cur.rowcount < 1:
+            return None, None, None
+
+        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))