Source code for tkp.db.consistency

"""
check database for consistency
"""
import logging
import tkp.db

logger = logging.getLogger(__name__)

# The three queries below were know to give a count > 0
# when the db got into an inconsistent state.
# Therefore, before every run we do a check on these numbers
query_id0 = """\
SELECT COUNT(*)
  FROM extractedsource
 WHERE id = 0
"""

query_image0 = """\
SELECT COUNT(*)
  FROM extractedsource
 WHERE image = 0
"""

query_zone0 = """\
SELECT COUNT(*)
  FROM extractedsource
 WHERE id = 0
   AND image = 0
   AND zone = 0
"""

[docs]def check(): """ Checks for any inconsistent values in tables. Returns False if any inconsistency is found, otherwise True. """ for query in (query_id0, query_image0, query_zone0): if not isconsistent(query): return False return True
[docs]def isconsistent(query): """ Counting rows should return 0, otherwise database is in an inconsistent state. If the database is consistent we return True, otherwise False. """ try: cursor = tkp.db.execute(query, commit=True) result = cursor.fetchone()[0] if result == 0: return True else: logger.warning("Inconsistent database:\n %s returns %s" % (query, result)) except Exception, e: logger.exception("No consistency check possible for database") return False